- 论坛徽章:
- 8
|
发个音频采集小程序,在LINUXPC机上,可以运行,可惜我没有MIC,不知道实际效果的。
转载自[永远的UNIX]
#include <sys/soundcard.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
/* id:讀取音頻文件描述符;fd:寫入的文件描述符。i,j為臨時變量*/
int id,fd,i,j;
/* 存儲音頻數據的緩沖區,可以調整*/
char testbuf[4096];
/* 打開聲卡設備,失敗則退出*/
if ( ( id = open ( "/dev/audio", O_RDWR ) ) < 0 ) {
fprintf (stderr, " Can't open sound device!\n" ;
exit ( -1 ) ;
}
/* 打開輸出文件,失敗則退出*/
if ( ( fd = open ("test.wav",O_RDWR))<0){
fprintf ( stderr, " Can't open output file!\n" ;
exit (-1 );
}
/* 設置適當的參數,使得聲音設備工作正常*/
/* 詳細情況請參考Linux關聲卡編程的文檔*/
i=0;
ioctl (id,SNDCTL_DSP_RESET,(char *)&i) ;
ioctl (id,SNDCTL_DSP_SYNC,(char *)&i);
i=1;
ioctl (id,SNDCTL_DSP_NONBLOCK,(char *)&i);
i=8000;
ioctl (id,SNDCTL_DSP_SPEED,(char *)&i);
i=1;
ioctl (id,SNDCTL_DSP_CHANNELS,(char *)&i);
i=8;
ioctl (id,SNDCTL_DSP_SETFMT,(char *)&i);
i=3;
ioctl (id,SNDCTL_DSP_SETTRIGGER,(char *)&i);
i=3;
ioctl (id,SNDCTL_DSP_SETFRAGMENT,(char *)&i);
i=1;
ioctl (id,SNDCTL_DSP_PROFILE,(char *)&i);
/* 讀取一定數量的音頻數據,並將之寫到輸出文件中去*/
for ( j=0; j<10 {
i=read(id,testbuf,4096);
if(i>0){
write(fd,filebuf,i);
j++;
}
}
/* 關閉輸入、輸出文件*/
close(fd);
close(id);
} |
|