|
本帖最后由 effendi 于 2010-9-10 21:39 编辑
之前发贴问过采样率问题,未果,后察觉问题出在tq2440的音频设备只能以O_WRONLY或者O_RDONLY方式打开,不能使用O_RDWR方式打开,所以上一贴中的代码不能打开设备。
代码很简单,稍微看一下就会明,需要注意的是生成的Audio.wav并非严格的.wav格式(无文件头)。- #include <sys/ioctl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/soundcard.h>
- #define BUF_SIZE 4096
- #define DEVICE_NAME "/dev/dsp"
- int audio_fd; //声卡
- FILE *file_fd; //文件
- int file_len; //文件长度
- unsigned char audio_buffer[BUF_SIZE];
- unsigned char *file_name_creat;
- void delay(long x)
- {
- unsigned long i;
- for(i=0; i<x; i++);
- }
- int main()
- {
- file_name_creat = "Audio.wav";
- /*打开音频设备,准备录音*/
- if ((audio_fd = open(DEVICE_NAME, O_RDONLY)) == -1)
- {
- printf("open error\n");
- return -1;
- }
- /*设置采样速率*/
- int speed = 48000; //(常规的有8000,11025,16000,22050,32000,44100,48000)
- if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1)
- {
- /* Fatal error */
- printf("SNDCTL_DSP_SPEED error\n");
- return -1;
- }
- printf("the wav speed is %d\n",speed);
- /**/
- int i=0;
- unsigned long loops_record = 500; //500*4KB=2MB
- file_fd = fopen(file_name_creat, "w");
- printf("recording...\n");
- for(i=0;i<loops_record;i++)
- {
- read(audio_fd,audio_buffer,4096);
- fwrite(audio_buffer, 4096, 1, file_fd);
- }
- printf("recording...over\n");
- /*关闭设备和文件*/
- fclose(file_fd);
- close(audio_fd);
- delay(100000);
- return 0;
- }
复制代码 以上录音代码已在2.6.30.4的内核测试运行成功,只是有一个疑问:为何用音频线将phone直接引到mic去录音仍会有沙沙声。
以下是4.3.3编好的程序。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|