二接着谈谈amr的录制和播放
如果是pc的话建议录制成wav文件然后转换成amr,手机可不能这么搞,文件太大了转换也麻烦,所以应该直接录制成amr。
Java手机的录制和播放:J2ME (MIDP 2.0, CLDC 1.0)
http://www.hcilab.org/documents/tutorials/AudioTest/
录制:
Player player; ...
player=Manager.createPlayer(“capture://audio?encoding=amr”);
player.realize();
RecordControl rc = (RecordControl)player.getControl("RecordControl"); ByteArrayOutputStream output = new ByteArrayOutputStream(); rc.setRecordStream(output); rc.startRecord(); player.start();
Thread.currentThread().sleep(5000); rc.commit();
播放:
ByteArrayInputStream recordedInputStream = new ByteArrayInputStream(recordedSoundArray); Player p2 = Manager.createPlayer(recordedInputStream,"audio/x-wav");
p2.prefetch();
p2.start();
Symbian手机的录制和播放:
主要是CMdaAudioRecorderUtility的使用方法的问题。
播放:
TFileName tFullFileName = GetFullFileName(aBarFileName); iCurrentFileName=tFullFileName; RLog::Log(aBarFileName); RLog::Log(tFullFileName); #ifdef __WINS__ TRAPD(err, iMdaAudioRecorderUtility->OpenFileL( tFullFileName, KMMFExControllerUID, KMMFExControllerUID, KMMFExDesFormatUID, KMMFFourCCCodeAMR )); #else TRAPD(err, iMdaAudioRecorderUtility->OpenFileL( tFullFileName )); #endif if(err) { RLog::Log(_L("OpenFile err"),err); User::Leave(err); }
CMdaAudioRecorderUtility* iMdaAudioRecorderUtility; iMdaAudioRecorderUtility= new ...
iMdaAudioRecorderUtility= new ...
iMdaAudioRecorderUtility->SetAudioDeviceMode(CMdaAudioRecorderUtility::ELocal); // Set maximum volume for playback iMdaAudioRecorderUtility->SetVolume(iMdaAudioRecorderUtility->MaxVolume()); // Set the playback position to the start of the file iMdaAudioRecorderUtility->SetPosition(TTimeIntervalMicroSeconds(0)); TRAPD(errp,iMdaAudioRecorderUtility->PlayL()); if(errp) { RLog::Log(_L("Play"),errp); }
录制:
if(iMdaAudioRecorderUtility->State()==CMdaAudioClipUtility::ERecording ||iMdaAudioRecorderUtility->State()==CMdaAudioClipUtility::EPlaying) return; RLog::Log(_L("RecordL 1")); if(iMdaAudioRecorderUtility->State()==CMdaAudioClipUtility::EOpen) iMdaAudioRecorderUtility->Close(); //TPtrC aFileName(KRecorderFile); TRAPD(errc,this->CleanAmrFileL(aBarFileName)); if(errc) { RLog::Log(_L("CleanAmrFileL:"),errc); User::Leave(errc); } else{ RLog::Log(_L("CleanAmrFileL:OK")); } TRAPD(erro,this->OpenRecordFileL(aBarFileName)); if(erro) { RLog::Log(_L("OpenRecordFile:"),erro); User::Leave(erro); } else{ RLog::Log(_L("OpenRfileOK")); } // Record from the device microphone iMdaAudioRecorderUtility->SetAudioDeviceMode(CMdaAudioRecorderUtility::ELocal); // Set maximum gain for recording iMdaAudioRecorderUtility->SetGain(iMdaAudioRecorderUtility->MaxGain()); // Delete current audio sample from beginning of file iMdaAudioRecorderUtility->SetPosition(TTimeIntervalMicroSeconds(0)); //iMdaAudioRecorderUtility->CropL(); TRAPD(err,iMdaAudioRecorderUtility->RecordL()); if(err){ RLog::Log(_L("RecordL Err"),err); } //iEngineStatus=ERECORDING;
未完待续
|