3

BlackBerryのサンプルコードを取得するための優れたリポジトリを知っている人はいますか?具体的には、オーディオの録音の仕組みを学ぶのに役立つサンプル、場合によってはそれをサンプリングしてオンザフライの信号処理を行うことさえできますか?

着信オーディオを読み取り、必要に応じてサンプルごとに読み取り、それを処理して目的の結果(この場合はビジュアライザー)を生成したいと思います。

4

3 に答える 3

11

RIM API には、オーディオとビデオのコンテンツを処理するためのJSR 135 Java Mobile Media APIが含まれています。
BB ナレッジ ベースの混乱について訂正します。唯一の方法は、サイト マップを再度変更しないことを期待して、閲覧することです。
それは開発者 - >リソース- >ナレッジベース- > Java APIの&サンプル- >オーディオ&ビデオです

録音

基本的に、オーディオを録音するのは簡単です:

  • 正しいオーディオ エンコーディングでプレーヤーを作成する
  • RecordControl を取得する
  • 録音開始
  • 録音を停止

リンク:
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());
         }
      }
   }

オーディオ ストリームの処理とサンプリング

録音の最後に、特定のオーディオ形式のデータで満たされた出力ストリームが得られます。したがって、それを処理またはサンプリングするには、このオーディオ ストリームをデコードする必要があります。

オンザフライ処理について話すと、それはより複雑になります。記録をコミットせずに、記録中に出力ストリームを読み取る必要があります。したがって、解決すべきいくつかの問題があります。

  • Recorder と Sampler の出力ストリームへの同期アクセス - スレッドの問題
  • 正しい量のオーディオ データを読み取ります - オーディオ形式のデコードを深く掘り下げて、マークアップ ルールを見つけます

以下も役に立つかもしれません:
java.net: Experiments in Streaming Content in Java ME by Vikram Goyal

于 2009-06-08T07:07:30.320 に答える
0

私もこれを理解しようと何年も費やしました。BlackBerry Component Pack( Webサイトから入手可能)をインストールすると、コンポーネントパック内にサンプルコードがあります。

私の場合、コンポーネントパックをEclipseにインストールすると、抽出されたサンプルコードが次の場所に見つかりました。

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

残念ながら、すべてのサンプルコードをインポートすると、コンパイルエラーが発生しました。これを回避するために、コンパイルエラーのあるパッケージの20%を削除しました。

次の問題は、シミュレーターを起動すると常に最初のサンプルコードパッケージ(私の場合はactivetextfieldsdemo)が起動し、興味のあるパッケージだけを実行できないことでした。その回避策は、前にアルファベット順にリストされたすべてのパッケージを削除することでした。私が欲しかったもの。

その他の落とし穴:
-Eclipseでプロジェクトを右クリックし、[BlackBerry用にアクティブ化]を選択します
-[BlackBerry]->[ビルド構成...]->[編集...]を選択し、新しいプロジェクトを選択してビルドします。
-Eclipseプロジェクトの「src」フォルダにBlackBerryソースコードを配置してください。配置しないと、ビルドの問題が発生する可能性があります。

于 2009-12-09T23:26:44.833 に答える
0

音声固有ではありませんが、この質問にはいくつかの優れた「はじめに」の参照があります。

Blackberryアプリケーションの作成

于 2009-05-28T04:13:04.697 に答える