免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2260 | 回复: 6
打印 上一主题 下一主题

QQ2440录音放音问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-20 21:40 |只看该作者 |倒序浏览
小弟想在QQ2440板上做一个语音采集与压缩程序,现在用一段测试代码在我的主机上可以正常录音放音,但重新编译后转到板上就不行了,测试代码如下:
  1. /** record.c **/

  2. #include <unistd.h>
  3. #include <fcntl.h>
  4. #include <sys/types.h>
  5. #include <sys/ioctl.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <linux/soundcard.h>

  9. #define LENGTH 5    /* 存储秒数 */
  10. #define RATE 48000   /* 采样频率 */
  11. #define SIZE 16     /* 量化位数 */
  12. #define CHANNELS 1  /* 声道数目 */

  13. /* 用于保存数字音频数据的内存缓冲区 */
  14. unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8];

  15. int main()
  16. {
  17.         int fd;        /* 声音设备的文件描述符 */
  18.         int arg;        /* 用于ioctl调用的参数 */
  19.         int status;   /* 系统调用的返回值 */

  20.         /* 打开声音设备 */
  21.         fd = open("/dev/dsp", O_RDWR); //O_RDONLY,O_WRONLY,O_RDWR
  22.         if (fd < 0)
  23.         {
  24.                 perror("open of /dev/dsp failed");
  25.                 exit(1);
  26.         }

  27.         /* 设置采样时的量化位数 */
  28.         arg = SIZE;
  29.         status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
  30.         if (status == -1)
  31.                 perror("SOUND_PCM_READ_BITS ioctl failed");
  32.         if (arg != SIZE)
  33.                 perror("unable to set sample size");

  34.         /* 设置采样时的声道数目 */
  35.         arg = CHANNELS;
  36.         status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
  37.         if (status == -1)
  38.                 perror("SOUND_PCM_READ_CHANNELS ioctl failed");
  39.         if (arg != CHANNELS)
  40.                 perror("unable to set number of channels");

  41.         /* 设置采样时的采样频率 */
  42.         arg = RATE;
  43.         status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
  44.         if (status == -1)
  45.                 perror("SOUND_PCM_READ_RATE ioctl failed");

  46.         int i = 0;        
  47.         for (i=0; i<1; i++)
  48.         {               
  49.                 //#if 0                        
  50.                 printf("Say something: \n");
  51.                 status = read(fd, buf, sizeof(buf)); /* 录音 */
  52.                 if (status != sizeof(buf))
  53.                         perror("read wrong number of bytes");
  54.                 else
  55.                         printf("Said! \n");
  56.                 //#endif


  57.                 //#if 0
  58.                 printf("You said:\n");
  59.                 status = write(fd, buf, sizeof(buf)); /* 回放 */
  60.                 if (status != sizeof(buf))
  61.                         perror("wrote wrong number of bytes");
  62.                
  63.                 /* 在继续录音前等待回放结束 */
  64.                 status = ioctl(fd, SOUND_PCM_SYNC, 0);
  65.                 if (status == -1)
  66.                         perror("SOUND_PCM_SYNC ioctl failed");
  67.                 //#endif

  68.         }

  69.         close(fd);
  70.         
  71.         return 0;
  72. }
复制代码


在板子上运行是出现以下出错信息:
read wrong number of bytes: Illegal seek
dma2:loadbuffer:timeout loading buffer
...

该板使用可以正常放音,但不知道使用上面的代码为什么能正常运行
初来乍到,请大侠多多指教
板子内核是linux2.6.13

论坛徽章:
0
2 [报告]
发表于 2009-04-21 00:47 |只看该作者
急切想知道系统输出这句是出了什么问题 read wrong number of bytes: Illegal seek
大家帮帮忙,谢了

论坛徽章:
0
3 [报告]
发表于 2009-04-21 12:33 |只看该作者
QQ2440使用了一片 I2S 接口的菲利普解码芯片UDA1341
怎么没人答呢...

论坛徽章:
0
4 [报告]
发表于 2009-04-21 15:59 |只看该作者
你pc的是ac97的 codec. 48k
uda1341这种,估计是44100的。

论坛徽章:
0
5 [报告]
发表于 2009-04-22 00:29 |只看该作者
44100试过了,也不行
据这几天了解,是录音驱动的问题
有大侠遇到这方面的问题吗?

论坛徽章:
0
6 [报告]
发表于 2009-04-23 14:40 |只看该作者
原帖由 sky_ysk 于 2009-4-22 00:29 发表
44100试过了,也不行
据这几天了解,是录音驱动的问题
有大侠遇到这方面的问题吗?


有可能,她的官方网站有最新的kernel和rootfs,你去下了安装,里面有自带的录放音程序,不过是编译好的qt的。

论坛徽章:
0
7 [报告]
发表于 2009-06-28 12:14 |只看该作者
在驱动read中有一个对开辟DMA区域的一个判断语句。将它注掉就可以了!因为那条语句造成死循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP