sky_ysk 发表于 2009-4-17 15:29:12

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]
查看完整版本: QQ2440录音放音问题