Linux下声卡编程(录/放音频文件)
来源:互联网 发布:mysql tar.gz 安装 编辑:程序博客网 时间:2024/06/07 20:11
from : http://www.linuxidc.com/Linux/2009-08/21427.htm
参考教材:<Linux编程技术详解>杜华编著
页码:P186
将音频文件写入声卡的设备文件中可以实现音频文件的播放。而使用read函数来读取声卡设备文件中的内容,则可以实现录音功能。下面的程序代码实现了在Linux系统下使用声卡设备的录音功能。
具体代码如下:
//p6.8.c声卡录音功能#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/ioctl.h>#include<stdlib.h>#include<stdio.h>#include<linux/soundcard.h>//录音时间#define LENGTH 3//采样频率#define RATE 8000//量化位数#define SIZE 16//声道数目http://ubuntuone.cn/#define CHANNELS 2//保存录音的音频数据unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8];int main(void){ //声音设备的文件描述符 int fd; int arg; //用于保存ioctl的返回值 int status; //打开声音设备 fd=open("/dev/dsp",O_RDWR); if(fd<0){ perror("Cannot open /dev/dsp device"); return 1; } //以下设置声卡参数 //设置采样时的量化位数 arg=SIZE; status=ioctl(fd,SOUND_PCM_WRITE_BITS,&arg); if(status==-1){ perror("Cannot set SOUND_PCM_WRITE_BITS"); return 1; } //设置采样声道数目 arg=CHANNELS; status=ioctl(fd,SOUND_PCM_WRITE_CHANNELS,&arg); if(status==-1){ perror("Cannot set SOUND_PCM_WRITE_CHANNELS"); return 1; } //设置采样频率 arg=RATE; status=ioctl(fd,SOUND_PCM_WRITE_RATE,&arg); if(status==-1){ perror("Cannot set SOUND_PCM_WRITE_RATE"); return 1; } //一直录音,直到按下“ Control-C”停止 while(1){ printf("Recording ...:\n"); status=read(fd,buf,sizeof(buf)); if(status==-1){ perror("read wrong number of bytes"); } printf("Play ...:\n"); status=write(fd,buf,sizeof(buf)); if(status != sizeof(buf)) perror("wrote wrong number of bytes"); //在继续录音前等待回放结束 status=ioctl(fd,SOUND_PCM_SYNC,0); if(status==-1) perror("Cannot set SOUND_PCM_SYNC"); } return 0; }
- Linux下声卡编程(录/放音频文件)
- Linux下声卡编程(录制音频文件)
- linux下声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程
- linux下声卡编程试探
- Linux下ALSA声卡编程
- Linux下ALSA声卡编程(1)
- Linux下ALSA声卡编程(1)
- rlwrap oracle
- Weka开发[11]—J48源代码介绍
- SD卡中FAT32文件格式快速入门(图文详细介绍)
- 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
- 附加日志Supplemental log
- Linux下声卡编程(录/放音频文件)
- swig-python使用和测试
- 430 比较器使用 简单教程
- 无线温度监测后台软件
- svn如何清除已保存的用户名密码?
- 关于oradim这个Oracle小工具的作用及简介
- as3 按钮灰显
- Android退出一个activity后取消掉其中的异步线程AsyncTask
- C++Primer第十章TextQuery