Create Ogg Vorbis plugin

Cerrado Publicado Mar 28, 2006 Pagado a la entrega
Cerrado Pagado a la entrega

Create a DLL capable of reading Ogg Vorbis files. The host application will read uncompressed audio (PCM) from/to the DLL. Upon receiving the first build of the DLL, we will supply a host application to use as a test harness. We recommend that the coder create a simple test harness to test initialization, file opening, and simple meta data editing.

Each instance of the DLL will be single threaded. However, each instance may operate on a different thread.

The DLL may not use ATL or MFC. Please use STL for arrays, lists, strings, etc. The code must use Unicode mode and support Unicode filenames and meta data.

For reading, the host application will request data from different parts of the file. The DLL must be able to accurately seek to the right position, without having to scan the entire data stream from the beginning on each seek operation. This may require that the DLL perform an initial scan of the file to determine where each compressed data frame is. It will use this information to seek to the exact location needed to fulfill the request.

## Deliverables

1) Complete and fully-functional working DLL in source code form, that will compile in error and warning free way on Visual Studio 2003.

2) 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. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).

Implement the following exported functions on the DLL:

HRESULT CreateIPcmReader(IPcmReader** ppPcmReader);

HRESULT CreateIMetaEditor(IMetaEditor** ppMetaEditor);

Implement the following interfaces in the DLL, utilizing COM style AddRef and Release for instance management.

For reading Ogg files:

IPcmReader : public IUnknown

{

public:

// Open the file. The profiling flag indicates a background scanning process that will sequentially read the entire file.

virtual HRESULT STDMETHODCALLTYPE Open(PCWSTR pwzFileName, BOOL bProfiling) = 0;

// Get the format of the decoded PCM, [url removed, login to view] 32-bit IEEE floating point in stereo is preferred.

virtual HRESULT STDMETHODCALLTYPE GetFormatInfo(WAVEFORMATEX* pwfInfo, PDWORD pdwBitrate = NULL) = 0;

// Determine whether the file opened successfully

virtual HRESULT STDMETHODCALLTYPE IsValid() = 0;

// Get the total length of decoded PCM

virtual HRESULT STDMETHODCALLTYPE GetStreamLength(LONGLONG *pllByteLength) = 0;

// Get the total number of decoded samples. For example, a single pair of left and right channel values is one sample

virtual HRESULT STDMETHODCALLTYPE GetSampleCount(LONGLONG *pllCount) = 0;

// Get the sample rate of the decoded PCM

virtual HRESULT STDMETHODCALLTYPE GetSampleRate(ULONG *puSampleRate) = 0;

// Read the decoded PCM utilizing the position of the the decoded stream. This routine must be sample accurate when positioning into the file.

virtual HRESULT STDMETHODCALLTYPE LoadPcm(BYTE *pbData, LONGLONG llStreamBytePos, ULONG uLength) = 0;

// Shut down any resources prior to final release of the interface

virtual HRESULT STDMETHODCALLTYPE ShutDown(void) = 0;

// The frame offset array is intended for accurate seeking into the stream. During the initial profiling of the stream, the DLL can record where each compressed data frame begins in the file. When seeking, it can use this information to seek to exactly the right part of the file, without having to do any scanning. The frame offset array is a data blob and can be in any format you like. For example, it could be an array of DWORDs indicating the file position of each data frame.

virtual HRESULT STDMETHODCALLTYPE GetFrameOffsetArray(BYTE *pbData, ULONG *puDataSize) = 0;

virtual HRESULT STDMETHODCALLTYPE SetFrameOffsetArray(BYTE *pbData, ULONG uSize) = 0;

// Indicate to the host whether or not a frame offset data blob is used for this particular data file.

virtual HRESULT STDMETHODCALLTYPE FrameOffsetArrayReq(void) = 0;

};

// IMetaEditor is for reading and writing the tags using this set of numberical tags:

#define CATITEMEL_SONGTITLE 0x0001

#define CATITEMEL_ALBUMTITLE 0x0002

#define CATITEMEL_ARTISTNAME 0x0003

#define CATITEMEL_RECORDINGYEAR 0x0005

#define CATITEMEL_GENRE 0x0006

#define CATITEMEL_COMMENTS 0x0009

#define CATITEMEL_LABEL 0x000A

#define CATITEMEL_USER1 0x000B

#define CATITEMEL_USER2 0x000C

#define CATITEMEL_TRANSITION 0x000D

#define CATITEMEL_COMPOSER 0x000F

#define CATITEMEL_BPM 0x0100

#define CATITEMEL_TRACKNUMBER 0x0700

#define CATITEMEL_RATING 0x0900

#define CATITEMEL_KEY 0x0A00

IMetaEditor : public IUnknown

{

public:

virtual HRESULT STDMETHODCALLTYPE GetMetaDataString(ULONG dwCatItemId, PCWSTR pszString, PDWORD pdwCharLen) = 0;

virtual HRESULT STDMETHODCALLTYPE SetMetaDataString(ULONG dwCatItemId, PCWSTR pszString, DWORD dwCharLen) = 0;

virtual HRESULT STDMETHODCALLTYPE MetaEditOpen(PCWSTR pszFileName) = 0;

virtual HRESULT STDMETHODCALLTYPE GetMetaDataBin(BSTR bstrAttribName, BYTE* pbData, ULONG *puSize) = 0;

virtual HRESULT STDMETHODCALLTYPE SetMetaDataBin(BSTR bstrAttribName, BYTE* pbData, ULONG uSize) = 0;

};

## Platform

Must run on Windows XP and Wndows 2000.

Programación en C PHP

Nº del proyecto: #3388658

Sobre el proyecto

3 propuestas Proyecto remoto Activo Apr 18, 2006

3 freelancers están ofertando un promedio de $311 por este trabajo

polosin

See private message.

$594.15 USD en 14 días
(18 comentarios)
6.0
anandcoder

See private message.

$255 USD en 14 días
(0 comentarios)
0.0
akhrolvw

See private message.

$85 USD en 14 días
(0 comentarios)
0.0