使用waveIn进行录音
来源:互联网 发布:淘宝放错类目 编辑:程序博客网 时间:2024/05/16 21:20
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
#include <mmsystem.h>
static const int HDRCOUNT = 10;
int main(int argc, char* argv[])
{
int i;
WAVEHDR *pWaveHdr[HDRCOUNT];
WAVEFORMATEX waveformat;
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=48000;
waveformat.nAvgBytesPerSec=48000;
waveformat.nBlockAlign=1;
waveformat.wBitsPerSample=8; //指定录音格式
waveformat.cbSize=0;
HWAVEIN hWaveIn;
int error=waveInOpen(&hWaveIn,WAVE_MAPPER, &waveformat, (DWORD)NULL,0L,CALLBACK_NULL);
if (error != MMSYSERR_NOERROR){
printf("Exit8\n");
return -1;
}
for (i = 0; i < HDRCOUNT; i++){
pWaveHdr[i]= (WAVEHDR*)malloc( 24*1024 + sizeof(WAVEHDR) );
if (pWaveHdr[i] == NULL){
return -1;
}
ZeroMemory( pWaveHdr[i], sizeof(WAVEHDR) );
pWaveHdr[i]->dwBufferLength = 24*1024;
pWaveHdr[i]->lpData = (LPSTR)(pWaveHdr[i] + 1);
error=waveInPrepareHeader(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit7\n");
return -1;
}
error=waveInAddBuffer(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit6\n");
return -1;
}
}
error=waveInStart(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit5\n");
return -1;
}
int nhdr = 0;
FILE *fp = fopen("hello.wav", "wb");
fwrite("RIFF", 1, 4, fp);
unsigned int dwDataLength = 1024*1024;
unsigned int waveformatSize = sizeof WAVEFORMATEX;
unsigned int Sec=(1024*1024 + waveformatSize);
fwrite(&Sec,sizeof(Sec), 1, fp);
fwrite("WAVE",4, 1, fp);
fwrite("fmt ", 1, 4, fp);
fwrite(&waveformatSize, sizeof(waveformatSize), 1, fp);
fwrite(&waveformat.wFormatTag,sizeof(waveformat.wFormatTag), 1, fp);
fwrite(&waveformat.nChannels,sizeof(waveformat.nChannels), 1, fp);
fwrite(&waveformat.nSamplesPerSec,sizeof(waveformat.nSamplesPerSec), 1, fp);
fwrite(&waveformat.nAvgBytesPerSec,sizeof(waveformat.nAvgBytesPerSec), 1, fp);
fwrite(&waveformat.nBlockAlign,sizeof(waveformat.nBlockAlign), 1, fp);
fwrite(&waveformat.wBitsPerSample,sizeof(waveformat.wBitsPerSample), 1, fp);
fwrite(&waveformat.cbSize,sizeof(waveformat.cbSize), 1, fp);
fwrite("data",4, 1, fp);
fwrite(&dwDataLength,sizeof(dwDataLength), 1, fp);
for(;;){
printf("goto sleep\n");
Sleep(500);
while (pWaveHdr[nhdr]->dwFlags & WHDR_DONE){
printf("do some output: %d!\n", nhdr);
int offset, writed=0;
int length = pWaveHdr[nhdr]->dwBytesRecorded;
for (offset = 0; writed >= 0 && offset < length; offset += writed){
writed = fwrite(pWaveHdr[nhdr]->lpData+offset, 1, length-offset, fp);
printf("write: %d\n", writed);
}
error = waveInAddBuffer(hWaveIn, pWaveHdr[nhdr], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit4dd\n");
return -1;
}
nhdr = (nhdr+1)%HDRCOUNT;
}
}
fclose(fp);
error=waveInStop(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit3\n");
return -1;
}
error=waveInReset(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit2\n");
return -1;
}
for (i = 0; i < HDRCOUNT; i++){
error=waveInUnprepareHeader(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit1\n");
return -1;
}
free(pWaveHdr[i]);
}
error=waveInClose(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit0\n");
return -1;
}
return 0;
#include <stdlib.h>
#include <windows.h>
#include <mmsystem.h>
static const int HDRCOUNT = 10;
int main(int argc, char* argv[])
{
int i;
WAVEHDR *pWaveHdr[HDRCOUNT];
WAVEFORMATEX waveformat;
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=48000;
waveformat.nAvgBytesPerSec=48000;
waveformat.nBlockAlign=1;
waveformat.wBitsPerSample=8; //指定录音格式
waveformat.cbSize=0;
HWAVEIN hWaveIn;
int error=waveInOpen(&hWaveIn,WAVE_MAPPER, &waveformat, (DWORD)NULL,0L,CALLBACK_NULL);
if (error != MMSYSERR_NOERROR){
printf("Exit8\n");
return -1;
}
for (i = 0; i < HDRCOUNT; i++){
pWaveHdr[i]= (WAVEHDR*)malloc( 24*1024 + sizeof(WAVEHDR) );
if (pWaveHdr[i] == NULL){
return -1;
}
ZeroMemory( pWaveHdr[i], sizeof(WAVEHDR) );
pWaveHdr[i]->dwBufferLength = 24*1024;
pWaveHdr[i]->lpData = (LPSTR)(pWaveHdr[i] + 1);
error=waveInPrepareHeader(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit7\n");
return -1;
}
error=waveInAddBuffer(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit6\n");
return -1;
}
}
error=waveInStart(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit5\n");
return -1;
}
int nhdr = 0;
FILE *fp = fopen("hello.wav", "wb");
fwrite("RIFF", 1, 4, fp);
unsigned int dwDataLength = 1024*1024;
unsigned int waveformatSize = sizeof WAVEFORMATEX;
unsigned int Sec=(1024*1024 + waveformatSize);
fwrite(&Sec,sizeof(Sec), 1, fp);
fwrite("WAVE",4, 1, fp);
fwrite("fmt ", 1, 4, fp);
fwrite(&waveformatSize, sizeof(waveformatSize), 1, fp);
fwrite(&waveformat.wFormatTag,sizeof(waveformat.wFormatTag), 1, fp);
fwrite(&waveformat.nChannels,sizeof(waveformat.nChannels), 1, fp);
fwrite(&waveformat.nSamplesPerSec,sizeof(waveformat.nSamplesPerSec), 1, fp);
fwrite(&waveformat.nAvgBytesPerSec,sizeof(waveformat.nAvgBytesPerSec), 1, fp);
fwrite(&waveformat.nBlockAlign,sizeof(waveformat.nBlockAlign), 1, fp);
fwrite(&waveformat.wBitsPerSample,sizeof(waveformat.wBitsPerSample), 1, fp);
fwrite(&waveformat.cbSize,sizeof(waveformat.cbSize), 1, fp);
fwrite("data",4, 1, fp);
fwrite(&dwDataLength,sizeof(dwDataLength), 1, fp);
for(;;){
printf("goto sleep\n");
Sleep(500);
while (pWaveHdr[nhdr]->dwFlags & WHDR_DONE){
printf("do some output: %d!\n", nhdr);
int offset, writed=0;
int length = pWaveHdr[nhdr]->dwBytesRecorded;
for (offset = 0; writed >= 0 && offset < length; offset += writed){
writed = fwrite(pWaveHdr[nhdr]->lpData+offset, 1, length-offset, fp);
printf("write: %d\n", writed);
}
error = waveInAddBuffer(hWaveIn, pWaveHdr[nhdr], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit4dd\n");
return -1;
}
nhdr = (nhdr+1)%HDRCOUNT;
}
}
fclose(fp);
error=waveInStop(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit3\n");
return -1;
}
error=waveInReset(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit2\n");
return -1;
}
for (i = 0; i < HDRCOUNT; i++){
error=waveInUnprepareHeader(hWaveIn, pWaveHdr[i], sizeof(WAVEHDR));
if (error != MMSYSERR_NOERROR){
printf("Exit1\n");
return -1;
}
free(pWaveHdr[i]);
}
error=waveInClose(hWaveIn);
if (error != MMSYSERR_NOERROR){
printf("Exit0\n");
return -1;
}
return 0;
}
http://blog.chinaunix.net/uid-736168-id-376030.html
0 0
- 使用waveIn进行录音
- 使用waveIn进行录音
- wavein录音程序
- 解决Win7下使用waveIn系列函数录音时插拔麦克风时的死锁问题
- 解决Win7下使用waveIn系列函数录音时插拔麦克风时的死锁问题
- 使用MediaRecorder进行录音
- wavein
- Android 使用mediaRecorder进行录音
- 实时采集并显示录音波形WaveIn.cs
- 利用waveIn完成简单录音(录成wav)
- Android开发使用MediaRecorder进行录音
- Qt--使用RtAudio进行录音以及播放
- IOS7使用Audio Queue同时进行录音和播放
- 使用MediaRecorder进行录音的步骤(初稿)
- 使用Unity原生方法进行录音即使播放基于UGUI
- android 利用MediaRecorder()进行录音
- 调用麦克风列阵进行录音
- 使用unity的Microphone接口进行录音时遇到的相关问题
- BZOJ 2963 麻将 DFS+动态规划
- 字符处理工具之tr
- android的开发基础之--------创建广播接收者的两种方式
- caption标签,为表格添加标题和摘要
- TortoiseSVN设置比较工具为BeyondCompare
- 使用waveIn进行录音
- wavein
- Spark Streaming:大规模流式数据处理的新贵
- 使用<a>标签,链接到另一个页面
- 宅男靠游戏买豪宅,梦想之家在手下诞生
- mailto在网页中链接Email地址
- 为什么互联网大佬中马化腾挨骂最多?
- [图解]Android下Invalid layout of java.lang.String at value的解决
- 认识<img>标签,为网页插入图片