录音C [英] Audio Recording C

查看:173
本文介绍了录音C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨!我想从麦克风录制音频.但我无法正确录制音频.我的程序在下面.谁能说我怎么了?
记录是具有音频数据的缓冲区.

 无效 saveRecord( *记录)
{
    文件* f;
     int  bitsPerSample =  16 ;
     int  subchunk1size =  16 ;
     int  numChannels =  1 ;
    //  int subchunk2size = size * numChannels; 
     int  subchunk2size = bufnum * numChannels;
     int  sampleRate =  44100 ;
     int  chunksize = 36 + subchunk2size;
     int  audioFormat =  1 ;
     int  byteRate = sampleRate * numChannels * bitsPerSample/8;
     int  blockAlign = numChannels * bitsPerSample/8;
    printf(" ,bufnum);
    f = fopen(" "  wb");
    fwrite("  1  4 ,f);
    fwrite((char *)& chunksize, 1  4 ,f);
    fwrite("  1  4 ,f);
    fwrite("  1  4 ,f);
    fwrite((char *)& subchunk1size, 1  4 ,f);
    fwrite((char *)& audioFormat, 1  2 ,f);
    fwrite((char *)& numChannels, 1  2 ,f);
    fwrite((char *)& sampleRate, 1  4 ,f);
    fwrite((char *)& byteRate, 1  4 ,f);
    fwrite((char *)& blockAlign, 1  2 ,f);
    fwrite((char *)& bitsPerSample, 1  2 ,f);
    fwrite("  1  4 ,f);
    fwrite((char *)& subchunk2size, 1  4 ,f);
    fwrite(( char  *)record, 1 ,bufnum,f);
    fclose(f);
} 

解决方案

int sampleRate = 44100;
fwrite((char*) &sampleRate, 1, 4, f);
 
int byteRate = sampleRate*numChannels*bitsPerSample/8;
fwrite((char*) &byteRate, 1, 4, f);
  
int subchunk2size = bufnum * numChannels;
fwrite((char*) &subchunk2size, 1, 4, f);



我认为问题与answer1相同,sizeof(int)= 2或4


当我更改它们时,您认为这会导致运行时错误;

 无效 saveRecord( *记录)
{
    文件* f;
     int  bitsPerSample =  16 ;
     int  subchunk1size =  16 ;
     int  numChannels =  1 ;
    //  int subchunk2size = size * numChannels; 
     int  subchunk2size = bufnum * numChannels;
     int  sampleRate =  44100 ;
     int  chunksize = 36 + subchunk2size;
     int  audioFormat =  1 ;
     int  byteRate = sampleRate * numChannels * bitsPerSample/8;
     int  blockAlign = numChannels * bitsPerSample/8;
    printf(" ,bufnum);
    f = fopen(" "  wb");
    fwrite("  1  4 ,f);
    fwrite((char *)& chunksize, 1  4 ,f);
    fwrite("  1  4 ,f);
    fwrite("  1  4 ,f);
    fwrite((char *)& subchunk1size, 1  4 ,f);
    fwrite((char *)& audioFormat, 1  4 ,f);
    fwrite((char *)& numChannels, 1  4 ,f);
    fwrite((char *)& sampleRate, 1  4 ,f);
    fwrite((char *)& byteRate, 1  4 ,f);
    fwrite((char *)& blockAlign, 1  4 ,f);
    fwrite((char *)& bitsPerSample, 1  2 ,f);
    fwrite("  1  4 ,f);
    fwrite((char *)& subchunk2size, 1  4 ,f);
    fwrite(( char  *)record, 1 ,bufnum,f);
    fclose(f);
} 


int bitsPerSample = 16;
fwrite((char *)&bitsPerSample,1,2,f);

//如果您认为sizeof(int)= 4个字节
//为什么您还只为"bitsPerSample"写了2个字节

请告诉我您的问题在哪里?

录音准备好后您无法播放缓冲区吗?

还是从缓冲区保存了"word.wav"后就无法在其他音频播放器中播放"word.wav"了?


hi! i want to record audio from microphone. but i couldnt record audio correctly. my program is below. can anyone say what is my wrong?
record is a buffer which is have audio data.

void saveRecord(short *record)
{
    FILE *f;
    int bitsPerSample = 16;
    int subchunk1size = 16;
    int numChannels = 1;
    //int subchunk2size = size *numChannels;
    int subchunk2size = bufnum * numChannels;
    int sampleRate = 44100;
    int chunksize = 36+subchunk2size;
    int audioFormat = 1;
    int byteRate = sampleRate*numChannels*bitsPerSample/8;
    int blockAlign = numChannels*bitsPerSample/8;
    printf("bufnum : %d", bufnum);
    f = fopen("word.wav", "wb");
    fwrite("RIFF",1, 4, f);
    fwrite((char*) &chunksize, 1, 4, f);
    fwrite("WAVE",1, 4, f);
    fwrite("fmt ",1, 4, f);
    fwrite((char*) &subchunk1size, 1, 4, f);
    fwrite((char*) &audioFormat, 1, 2, f);
    fwrite((char*) &numChannels, 1, 2, f);
    fwrite((char*) &sampleRate, 1, 4, f);
    fwrite((char*) &byteRate, 1, 4, f);
    fwrite((char*) &blockAlign, 1, 2, f);
    fwrite((char*) &bitsPerSample, 1, 2, f);
    fwrite("data", 1, 4, f);
    fwrite((char*) &subchunk2size, 1, 4, f);
    fwrite((char *)record, 1, bufnum, f);
    fclose(f);
}

解决方案

int sampleRate = 44100;
fwrite((char*) &sampleRate, 1, 4, f);
 
int byteRate = sampleRate*numChannels*bitsPerSample/8;
fwrite((char*) &byteRate, 1, 4, f);
  
int subchunk2size = bufnum * numChannels;
fwrite((char*) &subchunk2size, 1, 4, f);



I think problem it is same with answer1 , sizeof(int) = 2 or 4


when i changed them what you suggest it results run time error;

void saveRecord(short *record)
{
    FILE *f;
    int bitsPerSample = 16;
    int subchunk1size = 16;
    int numChannels = 1;
    //int subchunk2size = size *numChannels;
    int subchunk2size = bufnum * numChannels;
    int sampleRate = 44100;
    int chunksize = 36+subchunk2size;
    int audioFormat = 1;
    int byteRate = sampleRate*numChannels*bitsPerSample/8;
    int blockAlign = numChannels*bitsPerSample/8;
    printf("bufnum : %d", bufnum);
    f = fopen("word.wav", "wb");
    fwrite("RIFF",1, 4, f);
    fwrite((char*) &chunksize, 1, 4, f);
    fwrite("WAVE",1, 4, f);
    fwrite("fmt ",1, 4, f);
    fwrite((char*) &subchunk1size, 1, 4, f);
    fwrite((char*) &audioFormat, 1, 4, f);
    fwrite((char*) &numChannels, 1, 4, f);
    fwrite((char*) &sampleRate, 1, 4, f);
    fwrite((char*) &byteRate, 1, 4, f);
    fwrite((char*) &blockAlign, 1, 4, f);
    fwrite((char*) &bitsPerSample, 1, 2, f);
    fwrite("data", 1, 4, f);
    fwrite((char*) &subchunk2size, 1, 4, f);
    fwrite((char *)record,1, bufnum, f);
    fclose(f);
}


int bitsPerSample = 16;
fwrite((char*) &bitsPerSample, 1, 2, f);

//if you think sizeof(int) = 4 bytes
//why you still only wrote 2 bytes for "bitsPerSample"

and please tell me more where is your problem?

you couldnt play the buffer after the recording is ready?

or you cann''t play your "word.wav" in other Audio-player after you saved "word.wav" from buffer?


这篇关于录音C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆