16 12
发新话题
打印

【求助】关于read函数

【求助】关于read函数

使用话筒录音一秒种,采样频率8000Hz,系统支持双声道,所以共有约16000点数据
1 j% o, d0 N; K& }, t2 @用read函数分4次,每次读取4000点,将这16000点数据读入程序开辟的缓冲区中,可是读取速度很慢,大约共需12秒,不知是何原因" l' q- Y9 `+ m8 z
请问如何改进
/ u/ T8 F, X8 }( t# A, _: J & V! S6 w  J) ~+ D! j- u
多谢指教      

TOP

不清楚你说的啥,代码?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

是从文件读到内存,还是从设备?      

TOP

应该是从文件读到内存; 另外,我今天下午在运行程序时发现声音根本不能从话筒读入,因为插上话筒后,耳机中能听到讲话声,但缓冲区中的数据仍为未插话筒时的值.所以我想是不是也有可能驱动程序写错了(程序是从网上找的一个适合与多操作系统的,我又改了一下)8 K: h& B! p+ C: c' B5 b
这是程序:
; X$ X" [" v- W( p( o6 bfd = open(DEV_AUDIO, O_RDONLY);! T& ^' P6 ~% b9 S5 R- `- g
ioctl(fd, SNDCTL_DSP_RESET, NULL);9 f; ^. w+ A. Y# i1 w$ a. u$ j$ m
/* Set the input source; the default is the microphone. */        7 Y1 k6 ]9 P8 Q3 ^  M
        fd_mixer = open("/dev/mixer", O_WRONLY); / |- K: x9 a: ]% n% M
/* Set the input source; the default is the microphone. */       
& }2 I) h: @. u( f# F        fd_mixer = open("/dev/mixer", O_WRONLY); - ^7 C2 `- j: P& ?
ioctl(fd_mixer, SOUND_MIXER_WRITE_RECSRC, &dev_mask);
1 s$ w2 [' v/ Y: }/ {$ o! o# |6 rioctl(fd_mixer, SOUND_MIXER_READ_RECSRC, &dev_mask);/ q2 l. `9 _1 z9 R( Q7 h( ?
                close(fd_mixer);8 Y9 m+ c' o, \! M. C
ioctl(fd, SNDCTL_DSP_SPEED, & sampleRate);* Y: {0 s0 Q% g( I" P, e" ^
ioctl(fd,SOUND_MIXER_READ_RECMASK,&dev_mask);" \7 V* g1 n# i' B' [/ O9 `9 u
ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &dev_mask);
- q' N; I, S* a4 ~1 F7 L, L# Rioctl(fd, SOUND_MIXER_READ_RECSRC, &dev_mask);
+ v+ v* U" S; B+ A6 J8 x       read函数调用:
+ }: Z+ x' s8 J* s6 L, R: V0 Cread(fd, &((char *) buffer)[1 + TEST ], numberOfSamples - TEST ) ; : x+ S2 N  o3 Y# \( N
不知上面代码有无问题,请帮我看一下,万谢!      

TOP

前提确实是你的驱动是否有问题……( c9 s! p7 g# p7 Z1 x9 e
能用系统程序录音吗?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

代码给的有些含糊,但愿下面这篇文章能对你有帮助
. d' N  Y) b1 s: y% s+ \( a+ l! Qhttp://www-128.ibm.com/developer ... cn-newsletter-linux      

TOP

多谢!
, D. }6 L  i# @; c+ e* B+ d  另外我想问一下,一个双精度浮点形的变量,经运算后输出,发现结果为'nan',是不是在计算时出现错误(比如除数为0),无法得出结果,系统就赋了一个默认值来表示出错?      

TOP

关注一下啊      

TOP

紧急求助:5 v0 m1 y+ S- _: H, k5 d
使用话筒录音的程序似乎有问题:今天下午我用DUCK_ZERO提供的IBM网站上的驱动程序,调用"/dev/dsp"文件发现向话筒讲话时,缓冲区读入的数据全为128,也就是说声音根本没录进去,而播放是正常的,设置了录音设备为话筒后还是不奏效,不知道是什么原因.另外,将同样的录音程序复制到别的程序中时,同样是设置采样率,发现返回的采样率竟然为1000HZ5 S! F& X7 |" Y5 `+ O% c9 _3 K
因为我现在在做嵌入式竞赛的一个语音识别项目,时间很紧急,马上要交作品,所以恳请大家帮忙 谢谢~      

TOP

会不会是操作系统的问题?      

TOP

 16 12
发新话题