windows下錄製音頻

來源:互聯網
上載者:User

標籤:windows編程   音頻錄製   

參考文檔:

1:github上的一個開原始碼:點擊開啟連結,因為儲存音頻需要自己寫檔案頭部,所以這裡借鑒了它的檔案儲存體功能。

2:一個很有用的文章代碼:點擊開啟連結,雖然有點小瑕疵,但是下面有解答。

3:一個說明類的部落格:點擊開啟連結


這裡加一些說明:windows下多線程盡量用_beginthreadex而不是CreateThread,網上原因說的很詳細。其次,在關閉錄音時,一定不要對waveIn裝置進行緩衝區操作,要不然容易產生死結。範例程式碼如下:

建立終止拷貝線程的代碼:(上文部落格裡面提示,不能在錄音的回呼函數裡將資料寫到檔案,因此需要建立線程,單獨拷貝)

bool stopRecording(const char *fileName, int nameSize){char *fileNameTrue = (char *)malloc(sizeof(char)* (nameSize+1));strcpy_s(fileNameTrue,nameSize+1, fileName);//終止錄音unsigned threadID;hAudio_Detect_Thread = (HANDLE)_beginthreadex(NULL, 0, &Audio_Detect, fileNameTrue, 0, &threadID);WaitForSingleObject(hAudio_Detect_Thread, INFINITE);CloseHandle(hAudio_Detect_Thread);return true;}


給waveIn裝置更換緩衝模組的代碼,注意緩衝模組最少應該是4個,過少容易造成雜音之類的問題
void processSamples(){if(bRecordingStarted ){waveInUnprepareHeader(hWaveIn, WaveHeaders[iBuffIdx], sizeof(WAVEHDR));iBuffIdx ++;if (iBuffIdx == BUFFERCOUNT){iBuffIdx = 0;}WaveHeaders[iBuffIdxT]->dwBufferLength = WaveBufSize;WaveHeaders[iBuffIdxT]->dwFlags = 0;WaveHeaders[iBuffIdxT]->dwLoops = 0;waveInPrepareHeader(hWaveIn, WaveHeaders[iBuffIdxT], sizeof(WAVEHDR));waveInAddBuffer(hWaveIn, WaveHeaders[iBuffIdxT], sizeof(WAVEHDR));if (iBuffIdxT == BUFFERCOUNT){iBuffIdxT = 0;}}}


寫資料的函數,主要調用了github上的代碼
void writeData(char *name){//停止錄音printf("進入寫的函數裡面了, the name is %s\n", name);bRecordingStarted = false;waveInReset(hWaveIn);int stopcode = waveInStop(hWaveIn);printf("the stopcode is %d\n", stopcode);COutputFile *file = NULL;file = new CWaveOutputFile;if (!file->Create(name, m_waveformin)){printf("初始化就錯誤了\n");}printf("正在寫資料\n");file->WriteData(m_AudioDataPool.lpdata, m_AudioDataPool.dwLength);printf("the length of m_AudioDataPool.length is %d", m_AudioDataPool.dwLength);file->Flush();//釋放資源free(name);free(m_AudioDataPool.lpdata);m_AudioDataPool.lpdata = NULL;m_AudioDataPool.dwLength = 0;}


windows下錄製音頻

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.