主题 : mini2440 录音放音问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
楼主  发表于: 2009-04-28 12:32

 mini2440 录音放音问题

    前两天,按照论坛里的帖子,解决了2.6.13内核上的录音问题。
  但录放音还有些问题:
1、初始化声卡的时候,可以设置采样率、声道数,但无法设置声音采样位数。怎么解决?
2、mini2440上录音时,用的是板载的mic,在录音的时候,耳机不是静音,即录音的时候耳机同时有回响。我想在录音的时候,耳机不要有回响。怎么解决?
3、一样的程序,我在PC的ubuntu上能录能放音,但移到mini2440上时,能录音,但不能放音,而且也没有报错,像进入死循环的感觉。挺奇怪的。怎么解决?
  
   有经验或者有兴趣的指教一下,讨论讨论。
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
1楼  发表于: 2009-04-29 16:27

 回 1楼(powerpan) 的帖子

如果是放音的配置不对的话,为什么madplayer能播放mp3.
直接用cat  test.wav > /dev/dsp 也有杂音输出,表明放音正常吧?
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
2楼  发表于: 2009-05-14 15:39
int OpenDsp(int nSampleRate,int nChannels,int fmt)

{

    

    int mix_fd,status,arg;

    //在pc上

    dsp_fd = open("/dev/dsp" , O_RDWR);  /*open dsp*/

    if(dsp_fd < 0)

    {

        printf("OPEN_DSP_FAILED!\n");

      return  OPEN_DSP_FAILED;

    }

    arg = nSampleRate;

    status = ioctl(dsp_fd,SOUND_PCM_WRITE_RATE,&arg); /*set samplerate*/

    if(status < 0)

    {

      close(dsp_fd);

      printf("SAMPLERATE_STATUS!\n");

      return SAMPLERATE_STATUS;

    }

    if(arg != nSampleRate)

    {

      close(dsp_fd);

      printf("SET_SAMPLERATE_FAILED!\n");

      return SET_SAMPLERATE_FAILED;

    }

    arg = nChannels;  /*set channels*/  

    status = ioctl(dsp_fd, SOUND_PCM_WRITE_CHANNELS, &arg);

    if(status < 0)

    {

      close(dsp_fd);

      printf("CHANNELS_STATUS!\n");

      return CHANNELS_STATUS;

    }

    if( arg != nChannels)

    {

      close(dsp_fd);

      printf("SET_CHANNELS_FAILED!\n");

      return SET_CHANNELS_FAILED;

    }



    arg = fmt; //set bit fmt

    status = ioctl(dsp_fd, SOUND_PCM_WRITE_BITS, &arg);

    if(status < 0)

    {

      close(dsp_fd);

      printf("FMT_STATUS!\n");

      return FMT_STATUS;

    }

    if(arg != fmt)

    {

      close(dsp_fd);

      printf("SET_FMT_FAILED!\n");

      return SET_FMT_FAILED;

    }

    

    

    /*到此设置好了DSP的各个参数*/            

    

    return 0;

    }