首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian开发 >> 正文
amr编程汇总(2)
作者:windcao    文章来源:http://blog.csdn.net/windcao    更新时间:2006-5-19 13:59:39

二接着谈谈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;

      未完待续

 

相关文章:
遍历文件夹
S60 Python 编程指南——声音录制/播放,MIDI 播放
S60上不再支持CMdaAudioConvertUtility
在S60"指示符面板"上显示小图标的解决方法
Audio input streaming溢出,导致异常发生
Symbian中的游戏编程(一)
Symbian中日志文件的使用
如何在Series 60窗体上绘制标签
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号