資源簡介
利用windows api采集麥克風音頻并播放。

代碼片段和文件信息
#include?“stdafx.h“
#include????
#include????
#include????
#pragma?comment(lib?“winmm.lib“)???
#define?BUFFER_SIZE?(44100*16*2/8*5)????//?錄制聲音長度??
#define?FRAGMENT_SIZE?1024??????????????//?緩存區大小??
#define?FRAGMENT_NUM?4??????????????????//?緩存區個數??
static?unsigned?char?buffer[BUFFER_SIZE]?=?{?0?};
static?int?buf_count?=?0;
//?函數定義???
void?CALLBACK?waveInProc(HWAVEIN?hwi
UINT?uMsg
DWORD_PTR?dwInstance
DWORD_PTR?dwParam1
DWORD_PTR?dwParam2);
void?CALLBACK?waveOutProc(HWAVEOUT?hwo
UINT?uMsg
DWORD_PTR?dwInstance
DWORD_PTR?dwParam1
DWORD_PTR?dwParam2);
//?入口???
int?main()
{
/*?錄音?*/
//?Device???
int?nReturn?=?waveInGetNumDevs();
printf(“輸入設備數目:%d\n“?nReturn);
for?(int?i?=?0;?i {
WAVEINCAPS?wic;
waveInGetDevCaps(i?&wic?sizeof(WAVEINCAPS));
printf(“#%d\t設備名:%s\n“?i?wic.szPname);
}
//?open???
HWAVEIN?hWaveIn;
WAVEFORMATEX?wavform;
wavform.wFormatTag?=?WAVE_FORMAT_PCM;
wavform.nChannels?=?2;
wavform.nSamplesPerSec?=?44100;
wavform.nAvgBytesPerSec?=?44100?*?16?*?2?/?8;
wavform.nBlockAlign?=?4;
wavform.wBitsPerSample?=?16;
wavform.cbSize?=?0;
waveInOpen(&hWaveIn?WAVE_MAPPER?&wavform?(DWORD_PTR)waveInProc?0?CALLBACK_FUNCTION);
WAVEINCAPS?wic;
waveInGetDevCaps((UINT_PTR)hWaveIn?&wic?sizeof(WAVEINCAPS));
printf(“打開的輸入設備:%s\n“?wic.szPname);
//?prepare?buffer???
static?WAVEHDR?wh[FRAGMENT_NUM];
for?(int?i?=?0;?i {
wh[i].lpData?=?new?char[FRAGMENT_SIZE];
wh[i].dwBufferLength?=?FRAGMENT_SIZE;
wh[i].dwBytesRecorded?=?0;
wh[i].dwUser?=?NULL;
wh[i].dwFlags?=?0;
wh[i].dwLoops?=?1;
wh[i].lpNext?=?NULL;
wh[i].reserved?=?0;
waveInPrepareHeader(hWaveIn?&wh[i]?sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn?&wh[i]?sizeof(WAVEHDR));
}
//?record???
printf(“Start?to?Record...\n“);
buf_count?=?0;
waveInStart(hWaveIn);
while?(buf_count? {
Sleep(1);
}
printf(“Record?Over!\n\n“);
//?clean???
waveInStop(hWaveIn);
waveInReset(hWaveIn);
for?(int?i?=?0;?i {
waveInUnprepareHeader(hWaveIn?&wh[i]?sizeof(WAVEHDR));
delete?wh[i].lpData;
}
waveInClose(hWaveIn);
system(“pause“);
printf(“\n“);
/*?放音?*/
//?Device???
nReturn?=?waveOutGetNumDevs();
printf(“\n輸出設備數目:%d\n“?nReturn);
for?(int?i?=?0;?i {
WAVEOUTCAPS?woc;
waveOutGetDevCaps(i?&woc?sizeof(WAVEOUTCAPS));
printf(“#%d\t設備名:%s\n“?i?wic.szPname);
}
//?open???
HWAVEOUT?hWaveOut;
waveOutOpen(&hWaveOut?WAVE_MAPPER?&wavform?(DWORD_PTR)waveOutProc?0?CALLBACK_FUNCTION);
WAVEOUTCAPS?woc;
waveOutGetDevCaps((UINT_PTR)hWaveOut?&woc?sizeof(WAVEOUTCAPS));
printf(“打開的輸出設備:%s\n“?wic.szPname);
//?prepare?buffer???
WAVEHDR?wavhdr;
wavhdr.lpData?=?(LPSTR)buffer;
wavhdr.dwBufferLength?=?BUFFER_SIZE;
wavhdr.dwFlags?=?0;
wavhdr.dwLoops?=?0;
waveOutPrepareHeader(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4139??2016-09-01?10:28??AudioCapture-WindowsApi\AudioCapture-WindowsApi\AudioCapture-WindowsApi.cpp
?????文件???????4566??2016-09-01?10:31??AudioCapture-WindowsApi\AudioCapture-WindowsApi\AudioCapture-WindowsApi.vcxproj
?????文件???????1330??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi\AudioCapture-WindowsApi.vcxproj.filters
?????文件???????1965??2016-09-05?18:34??AudioCapture-WindowsApi\AudioCapture-WindowsApi\Debug\AudioCapture-WindowsApi.Build.CppClean.log
?????文件?????????94??2016-09-05?18:34??AudioCapture-WindowsApi\AudioCapture-WindowsApi\Debug\AudioCapture-WindowsApi.log
?????文件???????1622??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi\ReadMe.txt
?????文件????????229??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi\stdafx.cpp
?????文件????????234??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi\stdafx.h
?????文件????????236??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi\targetver.h
?????文件???????1015??2016-09-01?10:24??AudioCapture-WindowsApi\AudioCapture-WindowsApi.sln
????..A..H.?????23040??2016-09-05?18:34??AudioCapture-WindowsApi\AudioCapture-WindowsApi.v12.suo
?????目錄??????????0??2016-09-05?18:34??AudioCapture-WindowsApi\AudioCapture-WindowsApi\Debug\AudioCap.7B50A768.tlog
?????目錄??????????0??2016-09-05?18:34??AudioCapture-WindowsApi\AudioCapture-WindowsApi\Debug
?????目錄??????????0??2016-09-01?10:28??AudioCapture-WindowsApi\AudioCapture-WindowsApi
?????目錄??????????0??2016-09-05?18:34??AudioCapture-WindowsApi\Debug
?????目錄??????????0??2016-09-05?18:34??AudioCapture-WindowsApi
-----------?---------??----------?-----??----
????????????????38470????????????????????16
評論
共有 條評論