-
大小: 653KB文件类型: .rar金币: 1下载: 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语言
评论
共有 条评论