Find Jobs
Hire Freelancers

Create a DLL in C++ to manage VST audio plugins

$100-500 USD

Completed
Posted about 18 years ago

$100-500 USD

Paid on delivery
Your assignment is to create a wrapper DLL in C++ that will provide effects processing support using Steinberg’s VST architecture. The DLL must be capable of hosting multiple effects and chaining them together. The DLL must be multithread safe since the Process call will be called from a different thread as everything else. At any given time, only two threads will access each instance: a UI thread and an audio processing thread. The code must be built in Unicode and provide wchar_t string support wherever possible. We are able to provide a test harness for processing the audio data through the DLL. The coder is responsible for prototyping the basic functionality, including initialization, enumeration of plugins, and loading of a plugin. Please name the project VstMgr and use the VST SDK version 2.4. See the deliverables for a description of the required interfaces. ## Deliverables Rent A Coder requirements notice: As originally posted, this bid request does not have complete details. Should a dispute arise and this project go into arbitration "as is", the contract's vagueness might cause it to be interpreted against you, even though you were acting in good-faith. So for your protection, if you are interested in this project, please work-out and document the requirements onsite. 1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done. 2) Deliverables must be in ready-to-compile condition for Visual Studio 2003 with no warnings and no errors. 3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc.). 4) The source code may use the Standard Template Libraries, but it may not use ATL or MFC. 5) The deliverable must process audio correctly using at least three different plugins from different vendors. Implement the following static call on the DLL: HRESULT CreateVstMgrInstance(IVstMgr** ppIVstMgr); Create an instance of the VstMgr class. Each instance is capable of loading one or more plugins that process audio in serial fashion. This document will refer to a single group of plugins as a chain. When the host is finished with the instance, it will call IVstMgr::Release() Implement the following interfaces on the DLL: interface IVstMgr : public IUnknown { HRESULT Initialize(); // Prepares the list of available plugins for quick access through the EnumValidPlugins call. HRESULT SetPluginDirectory(PCWSTR pszFilePath); // defines the source folder for all VST plugins (DLLs) HRESULT SetAudioFormat(WAVEFORMATEX* pwfx, DWORD dwBlockSamples); // Tells the DLL the format of the audio data, typically 32 bit IEEE_FLOAT in stereo. // dwBlockSamples refers to the number of audio samples for each channel. For example, a single left + right pair of stereo values counts as one sample. HRESULT EnumValidPlugins(DWORD dwIndex, CLSID* pclsid, LPWSTR pszFriendlyName, PDWORD pdwNameDestSize); // Provides the list of all available plugins on the system. // The CLSID should be generated from the 4 byte unique ID in the plugin (getUniqueID). The remaining space in the CLSID should be 0. HRESULT AddPlugin(const CLSID* pclsid, DWORD dwNextItemPluginId, IMemBlob* pSettings = NULL, PDWORD pdwNewPlugId = NULL); // Creates a new instance of a plugin and inserts it the chain. pSettings represents parameters from a previous session to load into the plugin. The DLL is responsible for creating a unique DWORD id and tracking it while the plugin is loaded. HRESULT RemovePlugin(DWORD dwPluginId) = 0; // remove a plugin from the chain HRESULT MovePlugin(DWORD dwPluginId, DWORD dwNextItemPluginId) = 0; // change the position of a plugin in the audio processing chain. HRESULT GetPluginWindowSize(DWORD dwPluginId, PLONG plWidth, PLONG plHeight) ; // Determine the size required to display the plugin’s UI HRESULT OpenPluginWindow(DWORD dwPluginId, HWND hwndFrame); // Once the host constructs a window with handle hwndFrame, it makes this call to get the plugin to place the UI in the new window. HRESULT ClosePluginWindow(DWORD dwPluginId); // This tells the plugin that the user has closed the window and that it should free any open resources HRESULT GetPluginSettings(DWORD dwPluginId, IMemBlob* pSettings) HRESULT SetPluginSettings((DWORD dwPluginId, IMemBlob* pSettings) // These two routines read/write an opaque memory block from/to the plugin to capture/assign the current state. HRESULT EnumActivePlugins(DWORD dwIndex, CLSID* pclsid, LPWSTR pszFriendlyName, PDWORD pdwNameDestSize, PDWORD pdwPluginId); // List the plugins currently loaded into the chain HRESULT Process(PVOID pData, DWORD dwSampleCount); // The host makes this call to have the DLL feed the audio data through each plugin in the chain. dwSampleCount refers to the number of audio samples for each channel. For example, a single left + right pair of stereo values counts as one sample. This routine processes the data in place. The DLL will need to do some buffering to copy the results back into the source buffer. HRESULT IsBypassed(); // Tells the host whether or not any plugins are active and loaded. If Process() would not change the audio data in any way, this call will return S_OK, otherwise S_FALSE; HRESULT EnablePlugin(DWORD dwPlugId, BOOL bEnable); // This call will engage or disengage the specified plugin. When it is disabled, the audio data should not go through the plugin. interface IMemBlob { HRESULT GetBlob(PBYTE pbDest, PDWORD pdwDestSize); HRESULT SetBlob(PBYTE pbData, DWORD dwSize); }; These two functions get and set a basic block of memory. They will be implemented by the host. ## Platform Must support Windows 2000 and Windows XP using Steinberg VST SDK 2.4
Project ID: 3240631

About the project

4 proposals
Remote project
Active 18 yrs ago

Looking to make some money?

Benefits of bidding on Freelancer

Set your budget and timeframe
Get paid for your work
Outline your proposal
It's free to sign up and bid on jobs
Awarded to:
User Avatar
See private message.
$212.49 USD in 20 days
4.9 (30 reviews)
5.6
5.6
4 freelancers are bidding on average $1,339 USD for this job
User Avatar
See private message.
$4,505 USD in 20 days
3.3 (10 reviews)
6.6
6.6
User Avatar
See private message.
$425 USD in 20 days
4.6 (6 reviews)
4.2
4.2
User Avatar
See private message.
$212.50 USD in 20 days
5.0 (5 reviews)
3.6
3.6

About the client

Flag of UNITED STATES
Pittsburgh, United States
5.0
5
Member since Dec 8, 2005

Client Verification

Thanks! We’ve emailed you a link to claim your free credit.
Something went wrong while sending your email. Please try again.
Registered Users Total Jobs Posted
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Loading preview
Permission granted for Geolocation.
Your login session has expired and you have been logged out. Please log in again.