91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3.61MB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2023-11-08
  • 語(yǔ)言: C/C++
  • 標(biāo)簽: C++??PCM裸流??雙緩存??

資源簡(jiǎn)介

這份代碼實(shí)現(xiàn)打開PCM裸流文件并用雙緩存機(jī)制進(jìn)行播放的,可在VS2013下直接編譯運(yùn)行,其中包含一個(gè)PCM裸流文件。

資源截圖

代碼片段和文件信息

#include?
#include?

#pragma?comment(lib?“winmm.lib“)

#define?DATASIZE?1024*512?//分次截取數(shù)據(jù)大小
FILE* pcmfile;??//音頻文件
HWAVEOUT????????hwo;

void?CALLBACK?WaveCallback(HWAVEOUT?hWave?UINT?uMsg?DWORD?dwInstance?DWORD?dw1?DWORD?dw2)//回調(diào)函數(shù)
{
switch?(uMsg)
{
case?WOM_DONE://上次緩存播放完成觸發(fā)該事件
{
LPWAVEHDR?pWaveHeader?=?(LPWAVEHDR)dw1;
pWaveHeader->dwBufferLength?=?fread(pWaveHeader->lpData?1?DATASIZE?pcmfile);;
waveOutPrepareHeader(hwo?pWaveHeader?sizeof(WAVEHDR));
waveOutWrite(hwo?pWaveHeader?sizeof(WAVEHDR));
break;
}
}
}

void?main()?
{
int?????????????cnt;
WAVEHDR?????????wh1;
WAVEHDR?????????wh2;
WAVEFORMATEX????wfx;

fopen_s(&pcmfile?“paomo.pcm“?“rb“);//打開文件

wfx.wFormatTag?=?WAVE_FORMAT_PCM;//設(shè)置波形聲音的格式
wfx.nChannels?=?1;//設(shè)置音頻文件的通道數(shù)量
wfx.nSamplesPerSec?=?8000;//設(shè)置每個(gè)聲道播放和記錄時(shí)的樣本頻率
wfx.nAvgBytesPerSec?=?16000;//設(shè)置請(qǐng)求的平均數(shù)據(jù)傳輸率單位byte/s。這個(gè)值對(duì)于創(chuàng)建緩沖大小是很有用的
wfx.nBlockAlign?=?2;//以字節(jié)為單位設(shè)置塊對(duì)齊
wfx.wBitsPerSample?=?16;
wfx.cbSize?=?0;//額外信息的大小

waveOutOpen(&hwo?WAVE_MAPPER?&wfx?(DWORD)WaveCallback?0L?CALLBACK_FUNCTION);//打開一個(gè)給定的波形音頻輸出裝置來進(jìn)行聲音播放,方式為回調(diào)函數(shù)方式。如果是對(duì)話框程序,可以將第五個(gè)參數(shù)改為(DWORD)this,操作跟本Demo程序相似

wh1.dwLoops?=?0L;//播放區(qū)一
wh1.lpData?=?new?char[DATASIZE];
wh1.dwBufferLength?=?DATASIZE;?
fread(wh1.lpData?1?DATASIZE?pcmfile);
wh1.dwFlags?=?0L;
waveOutPrepareHeader(hwo?&wh1?sizeof(WAVEHDR));//準(zhǔn)備一個(gè)波形數(shù)據(jù)塊用于播放
waveOutWrite(hwo?&wh1?sizeof(WAVEHDR));//在音頻媒體中播放第二個(gè)參數(shù)指定的數(shù)據(jù),也相當(dāng)于開啟一個(gè)播放區(qū)的意思

wh2.dwLoops?=?0L;//播放區(qū)二,基本同上
wh2.lpData?=?new?char[DATASIZE];
wh2.dwBufferLength?=?DATASIZE;
fread(wh2.lpData?1?DATASIZE?pcmfile);
wh2.dwFlags?=?0L;
waveOutPrepareHeader(hwo?&wh2?sizeof(WAVEHDR));
waveOutWrite(hwo?&wh2?sizeof(WAVEHDR));

while?(wh1.dwBufferLength?!=?0?||?wh2.dwBufferLength?!=?0)//如果文件還在沒播放完則等待500ms
{
Sleep(500);
}
waveOutUnprepareHeader(hwo?&wh1?sizeof(WAVEHDR));//清理數(shù)據(jù)
waveOutUnprepareHeader(hwo?&wh2?sizeof(WAVEHDR));

delete?[]wh1.lpData;
delete?[]wh2.lpData;
fclose(pcmfile);//關(guān)閉文件
return;
}

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-03-22?02:20??PcmDoubleBufferPlayer\
?????目錄???????????0??2015-03-22?02:20??PcmDoubleBufferPlayer\Debug\
?????目錄???????????0??2015-03-22?02:20??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\
?????文件????????1009??2015-03-21?18:20??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer.sln
?????文件???????18944??2015-03-22?02:20??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer.v12.suo
?????目錄???????????0??2015-03-22?02:20??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\Debug\
?????文件?????4144064??2014-06-09?21:51??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\paomo.pcm
?????文件????????2343??2015-03-22?02:20??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\PcmDoubleBufferPlayer.cpp
?????文件????????4115??2015-03-21?18:22??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\PcmDoubleBufferPlayer.vcxproj
?????文件?????????962??2015-03-21?18:22??PcmDoubleBufferPlayer\PcmDoubleBufferPlayer\PcmDoubleBufferPlayer.vcxproj.filters

評(píng)論

共有 條評(píng)論