Find Jobs
Hire Freelancers

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

$100-500 USD

Berlangsung
Dibuat sekitar 18 tahun yang lalu

$100-500 USD

Dibayar ketika dikirim
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 Proyek: 3240631

Tentang proyek

5 proposal
Proyek remot
Aktif 18 tahun yang lalu

Ingin menghasilkan uang?

Keuntungan menawar di Freelancer

Tentukan anggaran dan garis waktu Anda
Dapatkan bayaran atas pekerjaan Anda
Uraikan proposal Anda
Gratis mendaftar dan menawar pekerjaan
Diberikan kepada:
Avatar Pengguna
See private message.
$212,49 USD dalam 20 hari
4,9 (28 ulasan)
5,5
5,5
5 freelancer menawar dengan rata-rata $1.105 USD untuk pekerjaan ini
Avatar Pengguna
See private message.
$4.505 USD dalam 20 hari
3,3 (10 ulasan)
6,6
6,6
Avatar Pengguna
See private message.
$425 USD dalam 20 hari
4,6 (6 ulasan)
4,2
4,2
Avatar Pengguna
See private message.
$170 USD dalam 20 hari
4,2 (4 ulasan)
3,9
3,9
Avatar Pengguna
See private message.
$212,50 USD dalam 20 hari
5,0 (4 ulasan)
2,7
2,7

Tentang klien

Bendera UNITED STATES
United States
5,0
5
Anggota sejak Des 8, 2005

Verifikasi Klien

Terima kasih! Kami telah mengirim Anda email untuk mengklaim kredit gratis Anda.
Anda sesuatu yang salah saat mengirimkan Anda email. Silakan coba lagi.
Pengguna Terdaftar Total Pekerjaan Terpasang
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Memuat pratinjau
Izin diberikan untuk Geolokasi.
Sesi login Anda telah kedaluwarsa dan Anda sudah keluar. Silakan login kembali.