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

我想读取传入的音频,如果需要的话可以逐个采样,然后对其进行处理以产生所需的结果,在本例中是可视化工具。

有帮助吗?

解决方案

RIM API 包含 JSR 135 Java 移动媒体 API 用于处理音频和视频内容。
您纠正了 BB 知识库上的混乱情况。唯一的办法就是浏览它,希望他们不会再更改站点地图。
它是 开发者->资源->知识库->Java API 和示例->音频视频

声音录制

基本上,录制音频很简单:

  • 创建具有正确音频编码的播放器
  • 获取记录控件
  • 开始录音
  • 停止录音

链接:
RIM 4.6.0 API 参考:包 javax.microedition.media
如何 - 在 BlackBerry 智能手机上录制音频
如何 - 在应用程序中播放音频
操作方法 - 支持将音频流式传输到媒体应用程序
如何 - 指定音频路​​径路由
如何 - 从媒体应用程序获取媒体播放时间
什么是 - 支持的音频格式
什么是 - 媒体应用程序错误代码

录音样本

声明具有 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:Java ME 中的流内容实验,作者:Vikram Goyal

scroll top