大家给看看这个程序
- C/C++ code
#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 22050 /* 采样频率 */#define SIZE 8 /* 量化位数 */#define CHANNELS 1 /* 声道数目 *//* 用于保存数字音频数据的内存缓冲区 */unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8];int openDsp(int rd){ int fd; /* 声音设备的文件描述符 */ int arg; /* 用于ioctl调用的参数 */ int status; /* 系统调用的返回值 */ /* 打开声音设备 */ if(rd==0) fd= open("/dev/dsp",O_RDONLY); else fd= open("/dev/dsp",O_WRONLY); if (fd < 0) { perror("open of /dev/dsp failed"); exit(1); } /* 设置采样时的量化位数 */ arg = SIZE; status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_BITS ioctl failed"); if (arg != SIZE) perror("unable to set sample size"); /* 设置采样时的量化位数 */ arg = SIZE; status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_BITS ioctl failed"); if (arg != SIZE) perror("unable to set sample size"); /* 设置采样时的声道数目 */ arg = CHANNELS; status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_CHANNELS ioctl failed"); if (arg != CHANNELS) perror("unable to set number of channels"); /* 设置采样时的采样频率 */ arg = RATE; status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); if (status == -1) perror("SOUND_PCM_WRITE_WRITE ioctl failed"); return fd;}int main(){ int status; /* 循环,直到按下Control-C */ while (1) { memset(buf,0,sizeof(buf)); int fdread=openDsp(0); printf("Say something:\n"); status = read(fdread, buf, sizeof(buf)); /* 录音 */ if (status != sizeof(buf)) perror("read wrong number of bytes"); status=close(fdread); if(status==-1){ perror("close Read Dsp wrong"); exit(1); } int fdwrite=openDsp(1); printf("You said:\n"); status = write(fdwrite, buf, sizeof(buf)); /* 回放 */ if (status != sizeof(buf)) perror("wrote wrong number of bytes"); /* 在继续录音前等待回放结束 */ status = ioctl(fdwrite, SOUND_PCM_SYNC, 0); if (status == -1) perror("SOUND_PCM_SYNC ioctl failed"); status=close(fdwrite); if(status==-1){ perror("rclose Write Dsp wrong"); exit(1); } } return 0;}程序没有错误,但为什么录音之后方步出来呢,是怎么回事?
我用的ubuntu系统
[解决办法]
放不出来,有报错吗?如果有的话,帖出错误来!
[解决办法]
虽然很浅,但我还是想问,你确定你的录音设备是好的吗?在测试这个程序前你用其他软件测试过硬件吗?
很久以前,我在调试一热敏打印机驱动程序时,咋都打不出来,程序也没错,耗了一天,最后发现。。。
串口线掉了一针脚