一:如何采集到语音信息 
二:如何 发送语音信息
三:我一点都不了解 请多多指教 呵!
QQ:5879472 (隐身 在线恭候)

解决方案 »

  1.   

    得到数据可以用mixer-xxx API 
    实现数据的传输可以用socket实现
    不过有个问题就同步的问题,怎样才能使声音不断断续续,我还不知道怎么做
      

  2.   

    http://blog.csdn.net/candycat/archive/2001/05/17/7592.aspx
      

  3.   

    waveInClose (hWaveIn) ;
                   MessageBeep (MB_ICONEXCLAMATION) ;
                   MessageBox (hwnd, szMemError, szAppName,
                                     MB_ICONEXCLAMATION | MB_OK) ;
                   return TRUE ;
              }
              
              pSaveBuffer = pNewBuffer ;
              CopyMemory (pSaveBuffer + dwDataLength, ((PWAVEHDR) lParam)->lpData,
                             ((PWAVEHDR) lParam)->dwBytesRecorded) ;
              
              dwDataLength += ((PWAVEHDR) lParam)->dwBytesRecorded ;
              
              if (bEnding)
              {
                   waveInClose (hWaveIn) ;
                   return TRUE ;
              }
              
                   // Send out a new buffer
              
              waveInAddBuffer (hWaveIn, (PWAVEHDR) lParam, sizeof (WAVEHDR)) ;
              return TRUE ;
              
         case MM_WIM_CLOSE:
                   // Free the buffer memory          waveInUnprepareHeader (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
              waveInUnprepareHeader (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;          free (pBuffer1) ;
              free (pBuffer2) ;
              
                   // Enable and disable buttons
              
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), TRUE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), FALSE) ;
              SetFocus (GetDlgItem (hwnd, IDC_RECORD_BEG)) ;
              
              if (dwDataLength > 0)
              {
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG),   TRUE)  ;
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), FALSE) ;
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END),   FALSE) ;
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP),   TRUE)  ;
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV),   TRUE)  ;
                   EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), TRUE)  ;
                   SetFocus (GetDlgItem (hwnd, IDC_PLAY_BEG)) ;
              }
              bRecording = FALSE ;
              
              if (bTerminating)
                   SendMessage (hwnd, WM_SYSCOMMAND, SC_CLOSE, 0L) ;
              
              return TRUE ;
              
         case MM_WOM_OPEN:
                   // Enable and disable buttons
              
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG),   FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END),   TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP),   FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV),   FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), FALSE) ;
              SetFocus (GetDlgItem (hwnd, IDC_PLAY_END)) ;
              
                   // Set up header
              
      

  4.   

    pWaveHdr1->lpData          = pSaveBuffer ;
              pWaveHdr1->dwBufferLength  = dwDataLength ;
              pWaveHdr1->dwBytesRecorded = 0 ;
              pWaveHdr1->dwUser          = 0 ;
              pWaveHdr1->dwFlags         = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
              pWaveHdr1->dwLoops         = dwRepetitions ;
              pWaveHdr1->lpNext          = NULL ;
              pWaveHdr1->reserved        = 0 ;
              
                   // Prepare and write
              
              waveOutPrepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
              waveOutWrite (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
              
              bEnding = FALSE ;
              bPlaying = TRUE ;
              return TRUE ;
              
         case MM_WOM_DONE:
              waveOutUnprepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
              waveOutClose (hWaveOut) ;
              return TRUE ;
              
         case MM_WOM_CLOSE:
                   // Enable and disable buttons
              
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG),   TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END),   FALSE) ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV),   TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP),   TRUE)  ;
              EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), TRUE)  ;
              SetFocus (GetDlgItem (hwnd, IDC_PLAY_BEG)) ;
              
              SetDlgItemText (hwnd, IDC_PLAY_PAUSE, TEXT ("Pause")) ;
              bPaused = FALSE ;
              dwRepetitions = 1 ;
              bPlaying = FALSE ;
              
              if (bReverse)
              {
                   ReverseMemory (pSaveBuffer, dwDataLength) ;
                   bReverse = FALSE ;
              }
              
              if (bTerminating)
                   SendMessage (hwnd, WM_SYSCOMMAND, SC_CLOSE, 0L) ;
              
              return TRUE ;
              
         case WM_SYSCOMMAND:
              switch (LOWORD (wParam))
              {
              case SC_CLOSE:
                   if (bRecording)
                   {
                        bTerminating = TRUE ;
                        bEnding = TRUE ;
                        waveInReset (hWaveIn) ;
                        return TRUE ;
                   }
                   
                   if (bPlaying)
                   {
                        bTerminating = TRUE ;
                        bEnding = TRUE ;
                        waveOutReset (hWaveOut) ;
                        return TRUE ;
                   }
                   
                   free (pWaveHdr1) ;
                   free (pWaveHdr2) ;
                   free (pSaveBuffer) ;
                   EndDialog (hwnd, 0) ;
                   return TRUE ;
              }
              break ;
         }
         return FALSE ;
    }
      

  5.   

    看看directxshow相关的东西,音视频的捕捉和显示搞明白然后用socket传输,需要自定义协议的。可以考虑h323 sip等等
      

  6.   

    http://www.vckbase.com/document/viewdoc/?id=1080http://www.vckbase.com/document/viewdoc/?id=232