C++ 採集音頻流(PCM裸流)實現錄音功能

來源:互聯網
上載者:User

與上一篇的“C++ 播放音頻流(PCM裸流)” 點擊開啟連結 相對應,本篇是關於用C++實現錄音功能的。同樣是直接建一個win32控制台程式然後將代碼拷過去改個檔案名稱就可以用,也可以下載本人上傳的相關工程,這個工程是用VS2013寫的,如果是較低的版本就呵呵了。點擊開啟連結

代碼部分如下:

#include "stdafx.h"#include <stdio.h>  #include <Windows.h>  #pragma comment(lib, "winmm.lib")  HWAVEIN hWaveIn;  //輸入裝置WAVEFORMATEX waveform; //採集音訊格式,結構體BYTE *pBuffer1;//採集音頻時的資料緩衝WAVEHDR wHdr1; //採集音頻時包含資料緩衝的結構體FILE *pf;int _tmain(int argc, _TCHAR* argv[]){HANDLE          wait;waveform.wFormatTag = WAVE_FORMAT_PCM;//聲音格式為PCMwaveform.nSamplesPerSec = 8000;//採樣率,16000次/秒waveform.wBitsPerSample = 16;//採樣位元,16bits/次waveform.nChannels = 1;//採樣聲道數,2聲道waveform.nAvgBytesPerSec = 16000;//每秒的資料率,就是每秒能採集多少位元組的資料waveform.nBlockAlign = 2;//一個塊的大小,採樣bit的位元組數乘以聲道數waveform.cbSize = 0;//一般為0wait = CreateEvent(NULL, 0, 0, NULL);//使用waveInOpen函數開啟音頻採集waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,(DWORD_PTR)wait, 0L, CALLBACK_EVENT);//建立兩個數組(這裡可以建立多個數組)用來緩衝音頻資料DWORD bufsize = 1024*100;//每次開闢10k的緩衝儲存錄音資料int i = 20;fopen_s(&pf, "錄音測試.pcm", "wb");while (i--)//錄製20左右秒聲音,結合音頻解碼和網路傳輸可以修改為即時錄音播放的機制以實現對講功能{pBuffer1 = new BYTE[bufsize];wHdr1.lpData = (LPSTR)pBuffer1;wHdr1.dwBufferLength = bufsize;wHdr1.dwBytesRecorded = 0;wHdr1.dwUser = 0;wHdr1.dwFlags = 0;wHdr1.dwLoops = 1;waveInPrepareHeader(hWaveIn, &wHdr1, sizeof(WAVEHDR));//準備一個波形資料區塊頭用於錄音waveInAddBuffer(hWaveIn, &wHdr1, sizeof (WAVEHDR));//指定波形資料區塊為錄音輸入緩衝waveInStart(hWaveIn);//開始錄音Sleep(1000);//等待聲音錄製1swaveInReset(hWaveIn);//停止錄音fwrite(pBuffer1, 1, wHdr1.dwBytesRecorded, pf);delete pBuffer1;printf("%ds  ", i);}fclose(pf);waveInClose(hWaveIn);return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.