QQ2440录音放音问题
小弟想在QQ2440板上做一个语音采集与压缩程序,现在用一段测试代码在我的主机上可以正常录音放音,但重新编译后转到板上就不行了,测试代码如下:/** record.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 5 /* 存储秒数 */
#define RATE 48000 /* 采样频率 */
#define SIZE 16 /* 量化位数 */
#define CHANNELS 1/* 声道数目 */
/* 用于保存数字音频数据的内存缓冲区 */
unsigned char buf;
int main()
{
int fd; /* 声音设备的文件描述符 */
int arg; /* 用于ioctl调用的参数 */
int status; /* 系统调用的返回值 */
/* 打开声音设备 */
fd = open("/dev/dsp", O_RDWR); //O_RDONLY,O_WRONLY,O_RDWR
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_READ_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_READ_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_READ_RATE ioctl failed");
/* 循环,直到按下Control-C */
//while (1)
int i = 0;
for (i=0; i<1; i++)
{
#if 0 //test ok
int fdwav;
fdwav = open("stereo_48_16.wav", O_RDONLY);
if (fdwav < 0)
{
perror("open of wav failed");
exit(1);
}
status = read(fdwav, buf, sizeof(buf));
if (status != sizeof(buf))
perror("read wrong number of bytes");
printf("music testing...\n");
status = write(fd, buf, sizeof(buf));
if (status != sizeof(buf))
perror("wrote wrong number of bytes");
#endif
//#if 0
printf("Say something: \n");
status = read(fd, buf, sizeof(buf)); /* 录音 */
if (status != sizeof(buf))
perror("read wrong number of bytes");
else
printf("Said! \n");
//#endif
//#if 0
printf("You said:\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("SOUND_PCM_SYNC ioctl failed");
//#endif
}
close(fd);
return 0;
}在板子上运行是出现以下信息:
read wrong number of bytes: Illegal seek
dma2:loadbuffer:timeout loading buffer
在板子上可以正常播放stereo_48_16.wav(一段音乐),但是mp3就不行了
初来乍到,请大侠多多指教
板子内核是linux2.6.13
页:
[1]