您好, 访客   登录/注册

手机语音录制器的设计

来源:用户上传      作者:

  摘要:基于Symbian系统,采用MVCaEngine的模式及PcM和AMR两种格式,在智能手机上开发音频流录音机,实现正常的音频数据以文件的格式存储于手机中。
  关键词:Symbian;音频流;录音机
  中图分类号:TN929.53
  文献标识码:B
  文章编号:1009-9166(2009)026(C)-0056-01
  
  引言:Symbian操作系统的前身是EPOC(Electronic Pieceof Cheese),其原意为“使用电子产品时可以像吃乳酪一样简单”,这就是它在设计时所坚持的理念。
  Symbian提供了灵活的UI,用来适应不同的用户需求。目前基j:symbian的用户界面有很多,主要是Series 60/80/90以及UIQ,这其中从功能上来说UIQ作为强大,同时这也是更加贴近智能手机范畴的系统。这种u睹B可以理解为Symbian之上的Shell,它对symbian的界面进行不同的“包装”,同时增加了一些常用的应用程序。
  智能手机作为新兴设备正在日趋流行,手机软件的开发技术也日趋成熟,该方向有着日益增长的客户群,也有着日益增长的客户需求。通过对受限设备(指目前的智能终端对OS的支持度)的软件开发,可以更好的锻炼程序员的程序设计功底,培养良好的编程习惯和好的程序设计方法。同时也为智能手机适应未来市场,做一些前瞻性的研发。
  
  一、音频处理
  
  1、录制音频
  利用音频输入流实用工具CmdaAudio-InputStream,它提供从声音输入设备流出音频的能力,音频数据必须为PCM16格式,可以指定取样速率和信道数。先通过Open()函数打开音频流,通过setAudioProper-ties()设置取样速率和信道数。并通过传递给观察器的MaiscOpenCom-plete()函数的错误码报告打开操作是否成功。如果流成功打开,利用ReadL()函数传递一个或多个音频缓冲;每次填充缓冲时,调用观察器MaiscBufferCopied()函数,将使用音频缓冲的引用与一个错误码一起传递给客户应用程序。如录音被实用工具stop()函数调用所中断,则对未使用的缓冲,会有一个MaiscBufferCopied()调用,并且错误代码为KerrAbort。当录音完成时,并且用完了填充音频数据的缓冲,则实用工具调用MaiscRecordComplete()函数,错误码为KErrOverrflow。出现这种溢出错误是由于应用程序实用ReadL()提供空缓存的速度不够快。
  
  2、播放音频
  利用音频输入流实用工具CmdaAudio-OutputStream,它提供将音频流输出到输出设备的功能。和输入流化一样音频数据的格式同样必须是PCM16,也可以调整音频输出的音量和平衡。先通过Open()函数打开音频流,并通过传递给观察器的MaoscOpenComplete()函数的错误码报告打开操作是否成功。如果流成功打开,利用WriteL()函数将音频缓冲传递给流化实用工具。当声音设备实用完缓冲时,调用观察器MaoscBufferCopied()函数,将使用音频缓冲的引用与一个错误码一起传递给客户应用程序。如成功复制了该缓冲,则错误代码为KErrNone。如缓冲复制到音频流之前调用了实用工具Stop()函数,则对未使用的缓冲,会有一个MaoscBufferCopied()调用,并且错误代码为KErrAbort。当停止向流化工具提供数据,并且队列缓冲用完时,声音设备将下溢。客户程序应用程序会通过观察器MaoscplayComplete()函数调用及错误码KErrUnderflow得到通知。
  
  3、音频存取
  本设计只作为原型,保存文件的文件名和路径均使用hardcode写死在代码内不允许客户自定义。断手机剩余存储容量的大小是否比缓冲区总容量大,如小于则提示控件不足,如大于,则继续执行。定义文件,文件的名字和路径均在安装程序时存在于手机内。遍历所有占用的缓冲区将数据拷贝到文件内。
  
  二、控件设计
  
  1、控件显示
  在设计中,引用了四个控件iLable,iButtonl,iButton2,iButton3,iLable用来在屏幕上方显示文字提示,诸如:“录音中”,“播放中”,“已停止”,“音频流被占用无法播放”等消息,3个Button用来作为播放,录音,停止的快捷键。iLable从CEikLabel类继承而来,iButton从CEikCommandButtOn类继承而来,均是系统控件。Tint CountComponentControls()用来计算有哪些系统控件。CCoeContml*ComponentCont-rol(Tintaindex)用来返回需要显示的系统的控件。
  
  2、按键响应
  按键响应可在UI中处理也可在View中处理,本程序定义了在uI中响应系统菜单的响应,而在View中响应普通的按键响应。通过该函数来处理菜单消息。
  通过函数来处理按键消息。一个按键分为三个状态ButtonUp,ButtonDown,和按键的特点(比如重复和长按等)。利用这个特点该程序可以延伸为对讲机式的录音模式。
  结束语:在程序的开发过程中,由于是在受限的移动终端设备上开发程序,所以要考虑的因素较多。通过应用手机上内存空间的分配及释放,形成了开发程序要有良好的“节约”意识;通过揣摩其他手机的应用程序,想到了开发程序应时刻把良好的客户体验放在第一位,输掉了用户,程序的开发就像征着失败;通过设计程序界面的搭配与布局,感觉到了部分图形与处理的深奥;通过选择音频格式,体会到了利用最小的资源达到最佳的使用效果。该录音器程序以实用性为主导不仅实现了正常的录音与保存功能,拥有较美观的界面并且新加入了几个实用性的功能,比如通话时的一键录音,与通话时加入背景音乐功能。通过对基于symbian OS的手机音频录制器过了相关的一些功能测试,系统功能达到了原先规定的目标,基于symbian OS的手机音频录制器的成功开发,受到了一些技术前辈们的肯定,也为今后的进一步研发奠定了一个较好的基础。


转载注明来源:https://www.xzbu.com/9/view-941504.htm