如果你搜一下Nokia或NewLC论坛,会有很多问关于如何录制amr声音文件
的帖子。呵呵,关于这个问题,可是困扰了我很久的了,一不小心,今
天就搞定了,如此甚是欢心,现把一些心得写出来,与大家分享!
首先让我们了解一下Nokia手机上常用的声音文件格式,一般的Nokia手
机都会支持wav,midi,pcm,amr这几种文件格式。其中wav波形文件一
般比较大,由于手机资源有限,它的使用范围不是很广。而midi和amr的
存储格式则比较小,应用比较广泛;Nokia默认的录制的声音文件保存为
amr格式。
需要熟悉的几个类:CMdaAudioPlayerUtility,
CMdaAudioRecorderUtility和CMdaAudioConvertUtility。
以前有人说录制成amr文件需要先流成pcm格式,然后对得到的pcm数据进
行转换后存盘;但最简单的方法还是直接录制成amr文件。
哦,说了一堆乱七八糟的东西,忘了说心得了,其实也很简单。直接使
用CMdaAudioRecorderUtility::OpenFileL()方法录制成amr文件是可以
实现的,但在调用iMdaAudioRecorderUtility->OpenFileL(aFile);之前
,需要加上CEikonEnv::Static()->FsSession().Replace(aFile,aFile)
来确保aFile文件是存在的,并且现在里面没有数据。然后就是不要调用
SDK例子里的iMdaAudioRecorderUtility->SetPosition(
TTimeIntervalMicroSeconds( 0 ) )和iMdaAudioRecorderUtility-
>CropL()。呵呵,简单吧!
下面是源代码:
//===================================
void CMyAudioRecorder::ConstructL(const TDesC& aFile)
{
// Create a file audio recorder utility instance
iMdaAudioRecorderUtility = CMdaAudioRecorderUtility::NewL(
*this );
// this is very important here
CEikonEnv::Static()->FsSession().Replace(aFile,aFile);
iMdaAudioRecorderUtility->OpenFileL(aFile);
}
//-------------
void CMyAudioRecorder::RecordL()
{
// Create a file audio recorder utility instance
iMdaAudioRecorderUtility = CMdaAudioRecorderUtility::NewL(
*this );
// this is very important here
CEikonEnv::Static()->FsSession().Replace(aFile,aFile);
iMdaAudioRecorderUtility->OpenFileL(aFile);
// Record from the device microphone
iMdaAudioRecorderUtility->SetAudioDeviceMode(
CMdaAudioRecorderUtility::ELocal );
// Set maximum gain for recording
iMdaAudioRecorderUtility->SetGain(
iMdaAudioRecorderUtility->MaxGain() );
// 下面两句是不能留的!
//iMdaAudioRecorderUtility->SetPosition(
TTimeIntervalMicroSeconds( 0 ) );
//iMdaAudioRecorderUtility->CropL();
//start recorder
iMdaAudioRecorderUtility->RecordL();
}
//转贴或引用以上内容请注明出处!