Find Jobs
Hire Freelancers

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

$100-500 USD

Terminado
Publicado hace alrededor de 18 años

$100-500 USD

Pagado a la entrega
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
ID del proyecto: 3240631

Información sobre el proyecto

4 propuestas
Proyecto remoto
Activo hace 18 años

¿Buscas ganar dinero?

Beneficios de presentar ofertas en Freelancer

Fija tu plazo y presupuesto
Cobra por tu trabajo
Describe tu propuesta
Es gratis registrarse y presentar ofertas en los trabajos
Adjudicado a:
Avatar del usuario
See private message.
$212,49 USD en 20 días
4,9 (30 comentarios)
5,6
5,6
4 freelancers están ofertando un promedio de $1.339 USD por este trabajo
Avatar del usuario
See private message.
$4.505 USD en 20 días
3,3 (10 comentarios)
6,6
6,6
Avatar del usuario
See private message.
$425 USD en 20 días
4,6 (6 comentarios)
4,2
4,2
Avatar del usuario
See private message.
$212,50 USD en 20 días
5,0 (5 comentarios)
3,6
3,6

Sobre este cliente

Bandera de UNITED STATES
Pittsburgh, United States
5,0
5
Miembro desde dic 8, 2005

Verificación del cliente

¡Gracias! Te hemos enviado un enlace para reclamar tu crédito gratuito.
Algo salió mal al enviar tu correo electrónico. Por favor, intenta de nuevo.
Usuarios registrados Total de empleos publicados
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Cargando visualización previa
Permiso concedido para Geolocalización.
Tu sesión de acceso ha expirado y has sido desconectado. Por favor, inica sesión nuevamente.