Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Got a 512 error on calling acmStreamOpen() in c#

Got a 512 error on calling acmStreamOpen() in c#

Scheduled Pinned Locked Moved C#
helpcsharpquestion
4 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Alegria_Lee
    wrote on last edited by
    #1

    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 )
    
    L B 2 Replies Last reply
    0
    • A Alegria_Lee

      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 )
      
      L Offline
      L Offline
      Luc Pattyn
      wrote on last edited by
      #2

      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.

      1 Reply Last reply
      0
      • A Alegria_Lee

        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 )
        
        B Offline
        B Offline
        Bernhard Hiller
        wrote on last edited by
        #3

        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/[^]

        A 1 Reply Last reply
        0
        • B Bernhard Hiller

          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/[^]

          A Offline
          A Offline
          Alegria_Lee
          wrote on last edited by
          #4

          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.

          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • World
          • Users
          • Groups