问一个入门级的问题!

[复制链接]
2911|1
 楼主| leehq0772 发表于 2007-4-11 16:59 | 显示全部楼层 |阅读模式
我编了一个录音的小程序,在PC的linux下没有问题,在ZLG&nbsp;MagicARM2410试验开发平台的arm&nbsp;linux下运行就是不行,录不了音。<br />以下是代码:<br /><br /><blockquote><br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&lttime.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltsys/soundcard.h&gt<br /><br />int&nbsp;main(&nbsp;int&nbsp;argc,&nbsp;char&nbsp;*argv[]&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;format&nbsp;=&nbsp;AFMT_S16_NE;&nbsp;//&nbsp;AFMT_S16_NE&nbsp;AFMT_U8<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;channels&nbsp;=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;speed&nbsp;=&nbsp;44100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;buf_size&nbsp;=&nbsp;819200;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*buf;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;&quot;update&nbsp;date:%s&nbsp;%s
&quot;,&nbsp;__DATE__,&nbsp;__TIME__&nbsp;);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;=&nbsp;malloc(&nbsp;buf_size&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;buf&nbsp;==&nbsp;NULL&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;buf&nbsp;malloc&nbsp;error!
!&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;argc&nbsp;&gt&nbsp;1&nbsp;)&nbsp;//&nbsp;play<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;dd,&nbsp;fd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;bytes;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;=&nbsp;open(&nbsp;&quot;/dev/dsp&quot;,&nbsp;O_WRONLY&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;dd&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;device&nbsp;open&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SYNC,0)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SYNC)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SETFMT,&format)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SETFMT)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_CHANNELS,&channels)&nbsp;==&nbsp;-1)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_CHANNELS)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SPEED,&speed)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SPEED)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;=&nbsp;open(&nbsp;&quot;rec&quot;,&nbsp;O_RDONLY&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;fd&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;file&nbsp;open&nbsp;error!
&quot;,&nbsp;errno&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;&quot;start&nbsp;play&nbsp;...
&quot;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;(bytes=read(fd,buf,buf_size))&nbsp;&gt&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes&nbsp;=&nbsp;write(&nbsp;dd,&nbsp;buf,&nbsp;bytes&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;bytes&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;device&nbsp;play&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;bytes&nbsp;!=&nbsp;0&nbsp;)&nbsp;return&nbsp;&nbsp;printf(&nbsp;&quot;[%d]&nbsp;file&nbsp;read&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;//&nbsp;record<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;dd,&nbsp;fd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clock_t&nbsp;start_time;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;=&nbsp;open(&nbsp;&quot;/dev/dsp&quot;,&nbsp;O_RDONLY&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;dd&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;device&nbsp;open&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SYNC,0)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SYNC)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SETFMT,&format)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SETFMT)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_CHANNELS,&channels)&nbsp;==&nbsp;-1)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_CHANNELS)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ioctl(dd,SNDCTL_DSP_SPEED,&speed)&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;ioctl(SNDCTL_DSP_SPEED)&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;=&nbsp;open(&nbsp;&quot;rec&quot;,&nbsp;O_WRONLY|O_CREAT&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;fd&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;file&nbsp;open&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;&quot;start&nbsp;record&nbsp;...
&quot;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start_time&nbsp;=&nbsp;clock();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;clock()&nbsp;-&nbsp;start_time&nbsp;&lt&nbsp;CLOCKS_PER_SEC&nbsp;*&nbsp;5&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;bytes;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes&nbsp;=&nbsp;read(&nbsp;dd,&nbsp;buf,&nbsp;buf_size&nbsp;);&nbsp;//&nbsp;在ARM平台下这里始终返回0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;bytes&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;device&nbsp;record&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes&nbsp;=&nbsp;write(&nbsp;fd,&nbsp;buf,&nbsp;bytes&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;bytes&nbsp;==&nbsp;-1&nbsp;)&nbsp;return&nbsp;printf(&nbsp;&quot;[%d]&nbsp;file&nbsp;write&nbsp;error!
&quot;,&nbsp;errno&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(&nbsp;fd&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(&nbsp;dd&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;&quot;end.
&quot;&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /></blockquote><br /><br />调用read对声音设备操作始终返回0。<br /><br />我对麦克风讲话时也没听见耳机有任何声音,怀疑是麦克风没开或音量太小,哪位前辈来指点一下啊?<br />
阿南 发表于 2007-4-11 17:24 | 显示全部楼层

要先找到ZLG MagicARM2410硬件上对应的驱动,及操作方法

找ZLG技术支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部