Francois PIETTE
2009-10-23 08:56:08 UTC
Hi !
I have a little bit progressed. But need more help.
I found the values in Philips SpeechMagic SDK:
typedef struct PHILIPSCELPWAVEFORMAT_tag
{
WAVEFORMATEX wfx;
BYTE extraFormatInfo[32];
} PHILIPSCELPWAVEFORMAT;
typedef PHILIPSCELPWAVEFORMAT FAR *LPPHILIPSCELPWAVEFORMAT;
LPPHILIPSCELPWAVEFORMAT srcFormat =
(LPPHILIPSCELPWAVEFORMAT)LocalAlloc(LPTR, maxFormatSize);
ZeroMemory(srcFormat, maxFormatSize);
srcFormat->wfx.cbSize = 2;
srcFormat->wfx.wFormatTag = WAVE_FORMAT_PHILIPS_CELP;
srcFormat->wfx.nChannels = 1;
srcFormat->wfx.nAvgBytesPerSec = 2400;
srcFormat->wfx.wBitsPerSample = 0;
srcFormat->wfx.nSamplesPerSec = 16000;
srcFormat->wfx.nBlockAlign = 24;
srcFormat->extraFormatInfo[0] = (BYTE)0x0;
srcFormat->extraFormatInfo[1] = (BYTE)0x0;
Witk those values, all ACM functions are happy (acmStreamOpen,
acmStreamSize, acmStreamConvert, acmStreamClose), convertion seems to take
place. But the resulting PCM file is pure garbage. Remember the same code
work for MP3 files.
There is one value which remains unknow for me: the source file is read
block by block to feed acmStreamConvert. With MP3 the block size is 522 bytes
(no idea why, btw). I don't know which value use for CELP files. I tried
various without success.
Any hint about what could be wrong ?
Complete source code is available upon request.
Regards,
--
Francois PIETTE
I have a little bit progressed. But need more help.
I found the values in Philips SpeechMagic SDK:
typedef struct PHILIPSCELPWAVEFORMAT_tag
{
WAVEFORMATEX wfx;
BYTE extraFormatInfo[32];
} PHILIPSCELPWAVEFORMAT;
typedef PHILIPSCELPWAVEFORMAT FAR *LPPHILIPSCELPWAVEFORMAT;
LPPHILIPSCELPWAVEFORMAT srcFormat =
(LPPHILIPSCELPWAVEFORMAT)LocalAlloc(LPTR, maxFormatSize);
ZeroMemory(srcFormat, maxFormatSize);
srcFormat->wfx.cbSize = 2;
srcFormat->wfx.wFormatTag = WAVE_FORMAT_PHILIPS_CELP;
srcFormat->wfx.nChannels = 1;
srcFormat->wfx.nAvgBytesPerSec = 2400;
srcFormat->wfx.wBitsPerSample = 0;
srcFormat->wfx.nSamplesPerSec = 16000;
srcFormat->wfx.nBlockAlign = 24;
srcFormat->extraFormatInfo[0] = (BYTE)0x0;
srcFormat->extraFormatInfo[1] = (BYTE)0x0;
Witk those values, all ACM functions are happy (acmStreamOpen,
acmStreamSize, acmStreamConvert, acmStreamClose), convertion seems to take
place. But the resulting PCM file is pure garbage. Remember the same code
work for MP3 files.
There is one value which remains unknow for me: the source file is read
block by block to feed acmStreamConvert. With MP3 the block size is 522 bytes
(no idea why, btw). I don't know which value use for CELP files. I tried
various without success.
Any hint about what could be wrong ?
Complete source code is available upon request.
Regards,
--
Francois PIETTE
Hello,
I have the need to convert files from Philips dictation system (Philips CELP
codec) to PCM wave files.
I know how to use the ACM API (acmStreamOpen, acmStreamConvert and the
likes) to convert from one format to another, for example from MP3 to PCM.
I'm almost sure I can use the exact same programming to use Philips CELP
codec instead of MP3 codec. Of course Philips CELP codec is installed on my
system.
Below is an extract from a MP3 to PCM converter : // define MP3 input format
LPMPEGLAYER3WAVEFORMAT mp3format = (LPMPEGLAYER3WAVEFORMAT)
LocalAlloc(LPTR, maxFormatSize);
mp3format->wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
mp3format->wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
mp3format->wfx.nChannels = 2;
mp3format->wfx.nAvgBytesPerSec = 128 * (1024 / 8); // not
really used but must be one of 64, 96, 112, 128, 160kbps
mp3format->wfx.wBitsPerSample = 0; // MUST BE
ZERO
mp3format->wfx.nBlockAlign = 1; // MUST BE
ONE
mp3format->wfx.nSamplesPerSec = 44100; // 44.1kHz
mp3format->fdwFlags = MPEGLAYER3_FLAG_PADDING_OFF;
mp3format->nBlockSize = MP3_BLOCK_SIZE; // voodoo
value #1
mp3format->nFramesPerBlock = 1; // MUST BE
ONE
mp3format->nCodecDelay = 1393; // voodoo
value #2
mp3format->wID = MPEGLAYER3_ID_MPEG;
I have no idea where to find MPEGLAYER3WAVEFORMAT adapted for Philips codec.
MMReg.h contains a lot of structures for many kind of codec, I can't find
one for Philips codec.
The question is: Where can I find the information ?
Thanks in advance,
--
Francois Piette
http://www.overbyte.be
I have the need to convert files from Philips dictation system (Philips CELP
codec) to PCM wave files.
I know how to use the ACM API (acmStreamOpen, acmStreamConvert and the
likes) to convert from one format to another, for example from MP3 to PCM.
I'm almost sure I can use the exact same programming to use Philips CELP
codec instead of MP3 codec. Of course Philips CELP codec is installed on my
system.
Below is an extract from a MP3 to PCM converter : // define MP3 input format
LPMPEGLAYER3WAVEFORMAT mp3format = (LPMPEGLAYER3WAVEFORMAT)
LocalAlloc(LPTR, maxFormatSize);
mp3format->wfx.cbSize = MPEGLAYER3_WFX_EXTRA_BYTES;
mp3format->wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
mp3format->wfx.nChannels = 2;
mp3format->wfx.nAvgBytesPerSec = 128 * (1024 / 8); // not
really used but must be one of 64, 96, 112, 128, 160kbps
mp3format->wfx.wBitsPerSample = 0; // MUST BE
ZERO
mp3format->wfx.nBlockAlign = 1; // MUST BE
ONE
mp3format->wfx.nSamplesPerSec = 44100; // 44.1kHz
mp3format->fdwFlags = MPEGLAYER3_FLAG_PADDING_OFF;
mp3format->nBlockSize = MP3_BLOCK_SIZE; // voodoo
value #1
mp3format->nFramesPerBlock = 1; // MUST BE
ONE
mp3format->nCodecDelay = 1393; // voodoo
value #2
mp3format->wID = MPEGLAYER3_ID_MPEG;
I have no idea where to find MPEGLAYER3WAVEFORMAT adapted for Philips codec.
MMReg.h contains a lot of structures for many kind of codec, I can't find
one for Philips codec.
The question is: Where can I find the information ?
Thanks in advance,
--
Francois Piette
http://www.overbyte.be