-
大小: 653KB文件類型: .rar金幣: 2下載: 0 次發布日期: 2021-05-21
- 語言: C/C++
- 標簽:
資源簡介
這是本人花費近兩周時間的成果,純錄制mp3格式,也是我公司大型項目的一部分技術,現分享出來,希望能給正在研究這方面技術的帶來幫助,xp和win7上錄音有很大區別,也許搜索會發現有許多的錄音源代碼,但我想說的是還真沒有能同時在xp、win7都通過的,至少本人是找了N個,下了N個,也沒找到。本人發的在xp、win7上通過(vista上沒測試,應該也能過)。

代碼片段和文件信息
//---------------------------------------------------------------------------
#include?“stdafx.h“
#include?
#pragma?hdrstop
#include?“AudioCap.h“
//---------------------------------------------------------------------------
#pragma?package(smart_init)
#pragma?comment(lib“winmm.lib“)
CAudioCap::CAudioCap(char?*NombreDWORD?FrecMuestreoWORD?Resolucion)
{
??m_Buffer=NULL;
??m_TamBuffer=4192;
??//Crea?el?Objeto?WaveFile.
??m_WaveFile=new?CWaveFile(NombreFrecMuestreoResolucionm_TamBuffer);
??//Abre?el?dispositivo?de?entrada.
??m_Format.wFormatTag=WAVE_FORMAT_PCM;
??m_Format.nChannels=1;
??m_Format.nSamplesPerSec=FrecMuestreo;
??m_Format.wBitsPerSample=Resolucion;
??m_Format.nBlockAlign=m_Format.nChannels*m_Format.wBitsPerSample/8;
??m_Format.nAvgBytesPerSec=m_Format.wBitsPerSample*m_Format.nBlockAlign;
??//Para?CALLBACK.
??//Abre?el?dispositivo.
??m_hr=waveInOpen(&m_WaveIn
??????????????????WAVE_MAPPER
??????????????????&m_Format
??????????????????(DWORD)(VOID?*)waveInProc
??????????????????0
??????????????????CALLBACK_FUNCTION);
??if(m_hr!=MMSYSERR_NOERROR)
????throw(“No?se?puede?abrir?el?dispositivo?de?entrada?de?audio“);
}
//Cierra?el?dispositivo?de?captura?de?Audio?y?el?fichero?WAV.
CAudioCap::~CAudioCap()
{
??//? UIDADOOOOO!!!!!!
??//?Esta?llamada?hay?que?hacerla?en?Windows?98?pero?NO?EN?WINDOWS?2000!!!!!!!!!
??//Marca?cualquier?Buffer?pendiente?como?“DONE“.
??//waveInReset(m_WaveIn);
??//Cierra?el?Dispositivo?de?Captura?de?Audio.
??waveInClose(m_WaveIn);
??free(m_Buffer);
??delete?m_WaveFile;
}
//El?driver?de?captura?llama?a?esta?funci髇?cuando?ha?completado?el?buffer?con?los?datos.
void?CALLBACK?CAudioCap::waveInProc(HWAVEIN?hwi?UINT?msg?DWORD?dwInstance?DWORD?Param1?DWORD?Param2)
{
??WAVEHDR???*WaveStruct;
??CWaveFile?*File;
??HWAVEIN???WaveIn;
??DATACALLBACK?*Datos;
??switch(msg)
????{
?????//Mensaje?enviado?por?el?Driver?cuando?ha?terminado?de?rellenar?el?Buffer.
?????//lParam?es?un?puntero?a?WAVEHDR.
?????//El?dwUser?apunta?a?los?datos?de?DATACALLBACK.
?????//El?miembro?dwBytesRecorded?indica?cuantos?bytes?se?han?grabado?en?el?Buffer.
?????case?MM_WIM_DATA:?//Se?toma?la?estructura?WAVEDHR.
???????????????????????WaveStruct=(WAVEHDR?*)Param1;
???????????????????????//Se?toma?el?nombre?del?fichero?y?el?handle?del?disp.?de?entrad.
???????????????????????Datos=(DATACALLBACK?*)WaveStruct->dwUser;
???????????????????????//Se?a馻den?los?datos?al?fichero?WAV.
???????????????????????Datos->WaveFile->AddSample((byte?*)WaveStruct->lpData);
???????????????????????//Env韆?otro?buffer?al?driver?de?captura.
???????????????????????//Se?reutiliza?el?mismo?Buffer.
???????????????????????waveInUnprepareHeader(Datos->WaveInWaveStructsizeof(WAVEHDR));
???????????????????????waveInPrepareHeader(Datos->WaveInWaveStructsizeof(WAVEHDR));
???????????????????????waveInAddBuffer(Datos->WaveInWaveStructsizeof(WAVEHDR));
??????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1532??2002-11-12?20:15??RecordTest\audevcod.h
?????文件???????4279??2011-08-23?11:28??RecordTest\AudioCap.cpp
?????文件????????979??2001-04-20?12:21??RecordTest\AudioCap.h
?????文件??????31995??2011-09-16?12:32??RecordTest\AudioPlayRec.cpp
?????文件???????5234??2011-09-16?14:16??RecordTest\AudioPlayRec.h
?????文件???????7657??2003-05-18?22:15??RecordTest\BladeMP3EncDLL.h
?????文件???????3214??2011-08-25?14:32??RecordTest\DShow.h
?????文件????????819??2006-01-15?02:29??RecordTest\IVolume.h
?????文件?????249856??2006-01-13?23:40??RecordTest\lame_enc.dll
?????文件???????9471??2011-10-18?09:29??RecordTest\Mixer.cpp
?????文件??????????0??2011-08-24?15:16??RecordTest\Mixer.cpp.bak
?????文件???????1204??2011-06-29?13:50??RecordTest\Mixer.h
?????文件??????????0??2011-08-24?15:16??RecordTest\Mixer.h.bak
?????文件?????430592??2008-11-16?18:23??RecordTest\MP3Enc.dll
?????文件???????5845??2008-10-19?17:45??RecordTest\MP3Enc.h
?????文件???????6502??2008-11-16?18:23??RecordTest\MP3Enc.lib
?????文件??????15667??2011-08-26?11:08??RecordTest\NewMixer.cpp
?????文件?????????21??2011-08-25?17:55??RecordTest\NewMixer.cpp.bak
?????文件????????877??2011-08-26?11:00??RecordTest\NewMixer.h
?????文件????????799??2011-08-25?17:54??RecordTest\NewMixer.h.bak
?????文件??????16623??2011-08-26?14:51??RecordTest\old\Mixer.cpp
?????文件???????1488??2011-08-26?11:35??RecordTest\old\Mixer.h
?????文件?????430592??2008-11-16?18:23??RecordTest\old\MP3Enc.dll
?????文件???????5845??2008-10-19?17:45??RecordTest\old\MP3Enc.h
?????文件???????6502??2008-11-16?18:23??RecordTest\old\MP3Enc.lib
?????文件??????12067??2011-08-24?16:37??RecordTest\old\Record.cpp
?????文件????????596??2011-08-24?16:50??RecordTest\old\Record.h
?????文件???????3651??2011-08-22?09:22??RecordTest\ReadMe.txt
?????文件???????9387??2011-11-29?16:17??RecordTest\Record.cpp
?????文件????????807??2011-11-29?16:17??RecordTest\Record.h
............此處省略36個文件信息
- 上一篇:校園導航系統 c++做的 !
- 下一篇:基于linux下的圖像縮小 c語言
評論
共有 條評論