这个例子的下载地址:
这个例子同步播放和记录语音,通过话筒说的话再通过扬声器放出来,在电话的一端产生话音的反馈环路。话音经过实时的编码或者解码后再被处理,这种编码格式是音频硬件支持的格式。
这个例子支持s60 2nd sp2、sp3和s60 3nd。
一、重要文件和类:
inc/fullduplexenginebase.h
src/fullduplexengine.cpp
src/inpustreamthread.cpp
Symbian APIs: CMMFDevSound
MDevSoundObserver
Example classes: CFullDuplexEngine
CInputStreamThread
二、运行例子
(一)当程序启动后,首先显示“Init complete”。通过菜单项就能启动和停止语音流,在屏幕上同步显示当前状态和可能的错误信息。
支持的编解码器:
- AMR-NB (default after initialization)
- G.711
- G.729
- iLBC
(二)通过选项菜单“Options->Codec”能选择编解码器,需要注意的是有些设备不支持AMR-NB编码。
(三)利用两个CMMFDevSound实例,来实现全双工操作,一个实例是输入(录音),另一个是输出(播放)。一个线程处理输入语音流,主线程处理输出语音流,DevSound 对象读写一个语音缓冲区,这个缓冲区能被这两个线程访问。尽管全双工语音流不需要多线程来实现,但这两个线程还是通过信号灯实现语音流的同步。
三、有关说明
(一)在开始说话后如果有其它的任务运行,导致缓冲区变大,会造成语音中断或者在说话和听到话音之间的延迟。
(二)设置“custom preference / priority”的值能使设备支持全双工操作,但是,在s60 3nd中,使用非缺省的值需要MultimediaDD能力,而一个程序具备MultimediaDD能力需要ACS Publisher ID和制造商的支持,更多的信息请访问www.symbiansigned.com 和www.forum.nokia.com/testing。
(三)我们不能控制音频输出的过程,在s60 2nd的手机中,音频直接输送到耳麦,在s60 3nd的手机中,音频直接输送到扬声器,没有公开的API能用来控制这种行为。
(四)这个例子仅能在手机上运行,因为模拟器不支持全双工音频。