我是进行录音,但系统默认的是:PCM - 44.1 kHz 16 Bit Stereo
我只需要MPEG Layer-3 - 32 kBit/s, 22,050 Hz, Mono 和 PCM - 11.025 kHz, 16 位, 单声道 两种。
设置时必须通过调用acmFormatChoose API,弹出对话框。
请问如果才能不要弹出对话框,在程序中直接设置?
谢谢!

解决方案 »

  1.   

    当时我做录音控件同样遇到这个问题最后的解决办法,先生成一个MPEG Layer-3 - 32 kBit/s, 22,050 Hz, Mono 和 PCM - 11.025 kHz, 16 位, 单声道 的文件,直接可以打开录音机,选择格式,然后录一段空的声音,保存然后打开这个文件进行录音,使用api处理这样既可保存成你需要的格式
      

  2.   

    自己研究了一下,搞定了。部分代码如下:
    其中包含两个预置的数据。其实这个数据好像就是个文件头,在写文件的时间这样写入就行了。
    如果需是讨论请联系:[email protected] Const WFXSize                       As Long = 128& * 1024&           
    Private btWfxOut()                          As Byte
    Private lngWFXOutLen                        As LongPublic Sub SelectFormatMp3()  '32K 16bit mono Mp3
     ReDim btWfxOut(WFXSize - 1) As Byte
          
           btWfxOut(0) = 85
            btWfxOut(1) = 0
             btWfxOut(2) = 1
              btWfxOut(3) = 0
               btWfxOut(4) = 34
                btWfxOut(5) = 86
                 btWfxOut(6) = 0
                  btWfxOut(7) = 0
                   btWfxOut(8) = 160
                    btWfxOut(9) = 15
                     btWfxOut(10) = 0
     btWfxOut(11) = 0
      btWfxOut(12) = 1
       btWfxOut(13) = 0
        btWfxOut(14) = 0
         btWfxOut(15) = 0
          btWfxOut(16) = 12
           btWfxOut(17) = 0
            btWfxOut(18) = 1
             btWfxOut(19) = 0
              btWfxOut(20) = 2
              
     btWfxOut(21) = 0
      btWfxOut(22) = 0
       btWfxOut(23) = 0
        btWfxOut(24) = 104
         btWfxOut(25) = 0
          btWfxOut(26) = 1
           btWfxOut(27) = 0
            btWfxOut(28) = 113
             btWfxOut(29) = 5
                     lngWFXOutLen = CLng(18) + CLng(12)    
    End SubPublic Sub SelectFormatWav()  'PCM 16bit 22K mono  ReDim btWfxOut(WFXSize - 1) As Byte
          
           btWfxOut(0) = 1
            btWfxOut(1) = 0
             btWfxOut(2) = 1
              btWfxOut(3) = 0
               btWfxOut(4) = 17
                btWfxOut(5) = 43
                 btWfxOut(6) = 0
                  btWfxOut(7) = 0
                   btWfxOut(8) = 34
                    btWfxOut(9) = 86
                     btWfxOut(10) = 0
     btWfxOut(11) = 0
      btWfxOut(12) = 2
       btWfxOut(13) = 0
        btWfxOut(14) = 16
                 lngWFXOutLen = CLng(18) + CLng(0)    
    End SubPrivate Sub WriteWAVHdr()
        Dim udtHdr      As WAVRIFF
        Dim lngDataID   As Long
        Dim lngData     As Long    With udtHdr
            .RIFF = WAV_RIFF
            .WAVE = WAV_WAVE
            .fmt = WAV_FMT
            .hdrlen = FileLength(hFOut) - 8
            .chnksize = lngWFXOutLen
        End With    FileSeek hFOut, 0, FILE_BEGIN
        FileWrite hFOut, VarPtr(udtHdr), Len(udtHdr)    FileWrite hFOut, VarPtr(btWfxOut(0)), lngWFXOutLen   '这个地方就是是将文件头写入,不同类型数据不一样    lngDataID = WAV_DATA
        FileWrite hFOut, VarPtr(lngDataID), 4    lngData = FileLength(hFOut) - (FilePosition(hFOut) + 4)
        FileWrite hFOut, VarPtr(lngData), 4
    End Sub