Got a 512 error on calling acmStreamOpen() in c#
-
Hi all, I got a problem on calling acmStreamOpen() in C#.When I 'm calling acmStreamOpen(), on WAVEFORMATEXsrc and WAVEFORMATEXdest are both with the wFormatTag of WAVE_FORMAT_PCM,it returns 0(Successful).but if I changed any of them (or both )to be WAVE_FORMAT_ALAW, I got a 512 error. Did I miss something on defining the ALAW WAVAFORMATEX?Thanks.
CWavConvertor.WAVEFORMATEX WAVEFORMATEXsrc = new CWavConvertor.WAVEFORMATEX();
WAVEFORMATEXsrc.wFormatTag = CWavConvertor.WAVE_FORMAT_PCM;
WAVEFORMATEXsrc.nChannels = 1;
WAVEFORMATEXsrc.nSamplesPerSec = 22050;
WAVEFORMATEXsrc.wBitsPerSample = 16;
WAVEFORMATEXsrc.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXsrc.nChannels * WAVEFORMATEXsrc.wBitsPerSample / 8);
WAVEFORMATEXsrc.nAvgBytesPerSec = WAVEFORMATEXsrc.nSamplesPerSec * WAVEFORMATEXsrc.nBlockAlign;CWavConvertor.WAVEFORMATEX WAVEFORMATEXdest = new CWavConvertor.WAVEFORMATEX(); WAVEFORMATEXdest.wFormatTag = CWavConvertor.WAVE\_FORMAT\_ALAW; WAVEFORMATEXdest.nChannels = 1; WAVEFORMATEXdest.nSamplesPerSec = 8000; WAVEFORMATEXdest.wBitsPerSample = 8; WAVEFORMATEXdest.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXdest.nChannels \* WAVEFORMATEXdest.wBitsPerSample / 8); WAVEFORMATEXdest.nAvgBytesPerSec = WAVEFORMATEXdest.nSamplesPerSec \* WAVEFORMATEXdest.nBlockAlign; WAVEFORMATEXdest.cbSize = 0; CWavConvertor.WAVEFILTER wfltr = new CWavConvertor.WAVEFILTER(); IntPtr mystreamptr = IntPtr.Zero; int a = CWavConvertor.acmStreamOpen(out mystreamptr, IntPtr.Zero, ref WAVEFORMATEXsrc, ref WAVEFORMATEXdest, wfltr, 0, 0, CWavConvertor.ACM\_STREAMOPENF\_NONREALTIME); // returns 512(ACMERR\_NOTPOSSIBLE )
-
Hi all, I got a problem on calling acmStreamOpen() in C#.When I 'm calling acmStreamOpen(), on WAVEFORMATEXsrc and WAVEFORMATEXdest are both with the wFormatTag of WAVE_FORMAT_PCM,it returns 0(Successful).but if I changed any of them (or both )to be WAVE_FORMAT_ALAW, I got a 512 error. Did I miss something on defining the ALAW WAVAFORMATEX?Thanks.
CWavConvertor.WAVEFORMATEX WAVEFORMATEXsrc = new CWavConvertor.WAVEFORMATEX();
WAVEFORMATEXsrc.wFormatTag = CWavConvertor.WAVE_FORMAT_PCM;
WAVEFORMATEXsrc.nChannels = 1;
WAVEFORMATEXsrc.nSamplesPerSec = 22050;
WAVEFORMATEXsrc.wBitsPerSample = 16;
WAVEFORMATEXsrc.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXsrc.nChannels * WAVEFORMATEXsrc.wBitsPerSample / 8);
WAVEFORMATEXsrc.nAvgBytesPerSec = WAVEFORMATEXsrc.nSamplesPerSec * WAVEFORMATEXsrc.nBlockAlign;CWavConvertor.WAVEFORMATEX WAVEFORMATEXdest = new CWavConvertor.WAVEFORMATEX(); WAVEFORMATEXdest.wFormatTag = CWavConvertor.WAVE\_FORMAT\_ALAW; WAVEFORMATEXdest.nChannels = 1; WAVEFORMATEXdest.nSamplesPerSec = 8000; WAVEFORMATEXdest.wBitsPerSample = 8; WAVEFORMATEXdest.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXdest.nChannels \* WAVEFORMATEXdest.wBitsPerSample / 8); WAVEFORMATEXdest.nAvgBytesPerSec = WAVEFORMATEXdest.nSamplesPerSec \* WAVEFORMATEXdest.nBlockAlign; WAVEFORMATEXdest.cbSize = 0; CWavConvertor.WAVEFILTER wfltr = new CWavConvertor.WAVEFILTER(); IntPtr mystreamptr = IntPtr.Zero; int a = CWavConvertor.acmStreamOpen(out mystreamptr, IntPtr.Zero, ref WAVEFORMATEXsrc, ref WAVEFORMATEXdest, wfltr, 0, 0, CWavConvertor.ACM\_STREAMOPENF\_NONREALTIME); // returns 512(ACMERR\_NOTPOSSIBLE )
I am not familiar with any of this, however: 1. getting 0 (success) on some parameter values is good, it indicates your P/Invoke stuff could be correct (or pretty close). 2. A little Google action led to pages such as this one[^] which states: All newly defined WAVE types must contain both a fact chunk and an extended wave format description within the 'fmt' chunk. RIFF WAVE files of type WAVE_FORMAT_PCM need not have the extra chunk nor the extended wave format description. That might be a strong clue, although I couldn't tell you what it really means. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
-
Hi all, I got a problem on calling acmStreamOpen() in C#.When I 'm calling acmStreamOpen(), on WAVEFORMATEXsrc and WAVEFORMATEXdest are both with the wFormatTag of WAVE_FORMAT_PCM,it returns 0(Successful).but if I changed any of them (or both )to be WAVE_FORMAT_ALAW, I got a 512 error. Did I miss something on defining the ALAW WAVAFORMATEX?Thanks.
CWavConvertor.WAVEFORMATEX WAVEFORMATEXsrc = new CWavConvertor.WAVEFORMATEX();
WAVEFORMATEXsrc.wFormatTag = CWavConvertor.WAVE_FORMAT_PCM;
WAVEFORMATEXsrc.nChannels = 1;
WAVEFORMATEXsrc.nSamplesPerSec = 22050;
WAVEFORMATEXsrc.wBitsPerSample = 16;
WAVEFORMATEXsrc.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXsrc.nChannels * WAVEFORMATEXsrc.wBitsPerSample / 8);
WAVEFORMATEXsrc.nAvgBytesPerSec = WAVEFORMATEXsrc.nSamplesPerSec * WAVEFORMATEXsrc.nBlockAlign;CWavConvertor.WAVEFORMATEX WAVEFORMATEXdest = new CWavConvertor.WAVEFORMATEX(); WAVEFORMATEXdest.wFormatTag = CWavConvertor.WAVE\_FORMAT\_ALAW; WAVEFORMATEXdest.nChannels = 1; WAVEFORMATEXdest.nSamplesPerSec = 8000; WAVEFORMATEXdest.wBitsPerSample = 8; WAVEFORMATEXdest.nBlockAlign = Convert.ToUInt16(WAVEFORMATEXdest.nChannels \* WAVEFORMATEXdest.wBitsPerSample / 8); WAVEFORMATEXdest.nAvgBytesPerSec = WAVEFORMATEXdest.nSamplesPerSec \* WAVEFORMATEXdest.nBlockAlign; WAVEFORMATEXdest.cbSize = 0; CWavConvertor.WAVEFILTER wfltr = new CWavConvertor.WAVEFILTER(); IntPtr mystreamptr = IntPtr.Zero; int a = CWavConvertor.acmStreamOpen(out mystreamptr, IntPtr.Zero, ref WAVEFORMATEXsrc, ref WAVEFORMATEXdest, wfltr, 0, 0, CWavConvertor.ACM\_STREAMOPENF\_NONREALTIME); // returns 512(ACMERR\_NOTPOSSIBLE )
Is the codec for WAVE_FORMAT_ALAW installed? Next, some codecs can be used for playback only, not for recording or conversion. On Windows XP, you could try to do the conversion with Windows Audio Recorder in order to find out if it is possible at all. You might also have a look at NAudio: http://naudio.codeplex.com/[^]
-
Is the codec for WAVE_FORMAT_ALAW installed? Next, some codecs can be used for playback only, not for recording or conversion. On Windows XP, you could try to do the conversion with Windows Audio Recorder in order to find out if it is possible at all. You might also have a look at NAudio: http://naudio.codeplex.com/[^]
Bernhard Hiller wrote:
Next, some codecs can be used for playback only, not for recording or conversion. On Windows XP, you could try to do the conversion with Windows Audio Recorder in order to find out if it is possible at all.
I'm sure it can be converted.
Bernhard Hiller wrote:
Is the codec for WAVE_FORMAT_ALAW installed?
Do you know how to check out if a codec is installed?I am pretty new about this.