【问题标题】:Blackberry Audio Recording Sample Code黑莓录音示例代码
【发布时间】:2009-05-28 04:02:35
【问题描述】:

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

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

【问题讨论】:

  • 为什么是 Java 标签?我认为这个问题与 Blackberry SDK 特别相关,虽然它是用 Java 编写的,但不一定适用于任何通用语言概念。

标签: audio blackberry java-me mmapi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Writing Blackberry Applications

    【讨论】:

    • 虽然有用,但我确实在寻找有关音频 API 的具体示例。为 GUI 东西找到 BlackBerry 文档并不难,但这种低级的东西有点难找。谢谢你的回答。
    • 是的...我自己也在玩 BB 开发。令人沮丧的是,除了“标准”应用之外,几乎没有任何支持和文档。
    • 是的,这很令人沮丧!似乎很少有人真正喜欢为 BB 开发,而 BB 自己真的很想向您收取 75 美元/小时的费用来与只搜索他们自己的支持论坛的代表交谈......
    【解决方案3】:

    我也花了很长时间试图弄清楚这一点。安装 BlackBerry 组件包(from their website 提供)后,您可以在组件包中找到示例代码。

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

    C:\程序 Files\Eclipse\eclipse3.4\plugins\net.rim.eide.componentpack4.5.0_4.5.0.16\components\samples

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

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

    其他问题:
    - 右键单击​​ Eclipse 中的项目并选择为 BlackBerry 激活
    - 选择 BlackBerry -> Build Configurations... -> Edit... 并选择您的新项目以便构建。
    - 确保将 BlackBerry 源代码放在 Eclipse 项目中的“src”文件夹下,否则可能会遇到构建问题。

    【讨论】:

    • 哇,这些问题令人沮丧……感谢您的意见! ++你
    • 我的 BlackBerry 组件包链接现已失效,因此我已将其更新到较新的网站。不过,出于这个原因,我对这个答案投了两次反对票对我来说似乎有点苛刻!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多