黑莓录音示例代码

时间:2009-05-28 04:02:35

标签: audio blackberry java-me mmapi

有没有人知道一个好的存储库来获取BlackBerry的示例代码?具体来说,这些样本将帮助我学习录制音频的机制,甚至可能对其进行采样并对其进行一些动态信号处理?

我想读取传入的音频,如果需要的话,逐个样本,然后处理它以产生所需的结果,在这种情况下是一个可视化器。

3 个答案:

答案 0 :(得分:11)

RIM API包含JSR 135 Java Mobile Media API,用于处理音频&视频内容。
你纠正了BB知识库中的混乱。唯一的方法是浏览它,希望他们不会再次更改站点地图 这是Developers->Resources - > Knowledge Base - > Java API's&Samples - > Audio&Video

录音

基本上录制音频很简单:

  • 使用正确的音频编码创建播放器
  • 获取RecordControl
  • 开始录制
  • 停止录制

链接:
RIM 4.6.0 API ref: Package javax.microedition.media
How To - Record Audio on a BlackBerry smartphone
How To - Play audio in an application
How To - Support streaming audio to the media application
How To - Specify Audio Path Routing
How To - Obtain the media playback time from a media application
What Is - Supported audio formats
What Is - Media application error codes

录音样本

声明了带有Player,RecordControl和资源的线程:

final class VoiceNotesRecorderThread extends Thread{
   private Player _player;
   private RecordControl _rcontrol;
   private ByteArrayOutputStream _output;
   private byte _data[];

   VoiceNotesRecorderThread() {}

   private int getSize(){
       return (_output != null ? _output.size() : 0);
   }

   private byte[] getVoiceNote(){
      return _data;
   }
}

在Thread.run()上开始录音:

   public void run() {
      try {
          // Create a Player that captures live audio.
          _player = Manager.createPlayer("capture://audio");
          _player.realize();    
          // Get the RecordControl, set the record stream,
          _rcontrol = (RecordControl)_player.getControl("RecordControl");    
          //Create a ByteArrayOutputStream to capture the audio stream.
          _output = new ByteArrayOutputStream();
          _rcontrol.setRecordStream(_output);
          _rcontrol.startRecord();
          _player.start();    
      } catch (final Exception e) {
         UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
               Dialog.inform(e.toString());
            }
         });
      }
   }

在thread.stop()上停止录制:

   public void stop() {
      try {
           //Stop recording, capture data from the OutputStream,
           //close the OutputStream and player.
           _rcontrol.commit();
           _data = _output.toByteArray();
           _output.close();
           _player.close();    
      } catch (Exception e) {
         synchronized (UiApplication.getEventLock()) {
            Dialog.inform(e.toString());
         }
      }
   }

处理和采样音频流

在录制结束时,您将获得以特定音频格式填充数据的输出流。因此,要处理或采样它,您必须解码此音频流。

谈论飞行处理,这将更复杂。您必须在录制期间读取输出流而不记录提交。因此需要解决几个问题:

  • 同步访问记录器和采样器的输出流 - 线程问题
  • 读取正确数量的音频数据 - 深入了解音频格式解码以找出标记规则

也可能有用:
java.net: Experiments in Streaming Content in Java ME by Vikram Goyal

答案 1 :(得分:0)

虽然不是特定于音频,但这个问题确实有一些很好的“入门”参考。

Writing Blackberry Applications

答案 2 :(得分:0)

我花了很多年时间试图解决这个问题。安装BlackBerry Component Packs(可用from their website)后,您可以在组件包中找到示例代码。

就我而言,一旦我将组件包安装到Eclipse中,我就在这个位置找到了提取的示例代码:

  

C:\程序   文件\的Eclipse \ eclipse3.4 \插件\ net.rim.eide.componentpack4.5.0_4.5.0.16 \部件\样品

不幸的是,当我导入所有示例代码时,我遇到了一堆编译错误。为了解决这个问题,我刚刚删除了包含编译错误的20%的软件包。

我的下一个问题是启动模拟器总是启动第一个示例代码包(在我的情况下是activetextfieldsdemo),我无法让它只运行我感兴趣的包。解决方法是删除所有包按照我想要的字母顺序排列。

其他问题:
- 右键单击​​Eclipse中的项目,然后选择Activate for BlackBerry
- 选择BlackBerry - >构建配置... - >编辑...并选择您的新项目,使其构建 - 确保将BlackBerry源代码放在Eclipse项目的“src”文件夹下,否则可能会遇到构建问题。