問題タブ [opensl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1914 参照

android - OpenSLESを使用する場合の「使用可能なトラック名はこれ以上ありません」

私はOpenSLESを使用しており、Androidアプリには複数のチャネルが必要なので、複数のプレーヤーオブジェクトを作成します(さらに、再生する必要のあるmp3ファイルごとに1つのプレーヤーオブジェクト)。これは1つのアプリケーションでは正常に機能しますが、作成した別のアプリを実行すると、サウンドの再生に失敗し、ログファイルに次のように表示されます。

さて、これは私が自由なオブジェクトを使い果たしていることを意味し、いくつかのオブジェクトを解放する必要があることを読みました。

ただし、 http://mobilepearls.com/labs/native-android-api/opensles/によると

OpenSL ES for Androidは、アプリケーションごとに1つのエンジン、および最大32のオブジェクトをサポートします

それで、アプリケーションごとに32個のオブジェクトですか、それともグローバルに32個のオブジェクトですか?もしそうなら、アプリが非アクティブになるたびに(onPause / onStop)、Player-objectsをDestroy()(および再作成)する必要がありますか?

0 投票する
2 に答える
1786 参照

android - Samsung Galaxy SII (GT-I9100) で OpenSL ES がランダムにクラッシュする

AndroidでOpenSL ESを使用しています。それはかなりうまくいくようです。

ただし、しばらくすると、Samsung Galaxy SII (GT-I9100) でアプリがクラッシュします。他の電話 (ZTE Blade、Galaxy Nexus、HTC evo 3D) はこの方法ではクラッシュしないようです。

logcat のログは次のとおりです。

このクラッシュがいつ発生するかはわかりませんが、mp3 ファイルの再生を開始した直後である可能性があります。一方、BufferQueue からコールバック関数が頻繁に実行されていることに気付きました。また、クラッシュの前に「INFO_FORMAT_CHANGED」が頻繁に表示されるように見えることにも気付きました (ただし、関連があるかどうかはわかりません)。

しかし、前述のように、クラッシュはまれにしか発生しません。私は主にこれをデバッグする方法に興味があります。たとえば、スタックに何があるかを知る方法はありますか? addr2line-command を使用しようとしましたが、電話から取得したこれらの .so ファイルは何らかの形でスクランブルされており、読み取ることができません。

0 投票する
2 に答える
1953 参照

android - OpenSL ES Android を使用して複数の効果音を同時に再生する

プロジェクトで音楽とサウンドを再生するために OpenSL ES を使用しています。ネイティブ オーディオ サンプルを最初に使用しました。バックグラウンド ミュージックと 1 つのサウンドを再生するには問題ありませんが、同時に 2 つ以上のサウンドを再生しようとすると、サウンド バッファーが再生のためにキューに入れられるため、サウンドが同時に再生されません。以前のすべてのバッファが再生されます。

次に、少し調査した後、それを修正する2つの方法を見つけました

  1. サウンドを再生するには、複数のオーディオ プレーヤー (したがって、バッファ キュー) を使用します。
  2. サウンド エフェクト バッファを 1 つのバッファにまとめてから、キューに入れます。

私の質問は次 のとおりです。最善のアプローチは何だと思いますか? 私が無視したより良い方法はありますか?

前もって感謝します。

0 投票する
1 に答える
3774 参照

android - OpenSL ES(Android用)のオーディオアセットから直接バイトバッファーを取得することは可能ですか?

OpenSL ES FileDescriptorオブジェクトを使用してオーディオアセットからバイトバッファーを取得したいので、SLインターフェイスを使用してファイルを再生/停止/シークする代わりに、SimpleBufferQueueに繰り返しエンキューできます。

サンプルバイトを直接管理したい主な理由は3つあります。

  1. OpenSLは、AudioTrackレイヤーを使用して、プレーヤーオブジェクトの再生/停止などを行います。これは、不要なオーバーヘッドをもたらすだけでなく、いくつかのバグもあり、プレーヤーの迅速な開始/停止は多くの問題を引き起こします。
  2. カスタムDSPエフェクトを使用するには、バイトバッファを直接操作する必要があります。
  3. 再生するクリップは小さく、ファイルI/Oのオーバーヘッドを回避するためにすべてメモリにロードできます。さらに、自分のバッファーをキューに入れると、AudioTrackを停止、一時停止、再生するのではなく、出力シンクに0を書き込み、再生中にサンプルバイトに切り替えるだけでレイテンシーを減らすことができます。

さて、正当化が完了しました-これが私が試したことです-基本的に、入力トラックと出力トラック、およびサンプルを保持するためのバイト配列を含むSample構造体があります。入力は私のFileDescriptorプレーヤーであり、出力はSimpleBufferQueueオブジェクトです。これが私の構造です:

ファイルプレーヤーfdPlayerObjectを初期化し、バイトバッファのメモリをmallocした後

私はそのBufferQueueインターフェースを取得しています

次に、出力プレーヤーをインスタンス化します。

サンプルを再生したいときは、以下を使用しています。

ただし、これによりアプリがフリーズしてシャットダウンします。ここは何かがおかしい。 また、ファイル記述子のBufferQueueから毎回サンプルを取得したくないと思います。代わりに、それをバイト配列に永続的に格納し、いつでも出力にエンキューしたいと思います。

0 投票する
4 に答える
2757 参照

android - OpenSL の RecorderObject は、Android で音量を設定または構成するためのインターフェイスを実装していません

SLDeviceVolumeItfAndroid で のインターフェイスを取得しようとしましたRecorderObjectが、エラーが発生しました。SL_RESULT_FEATURE_UNSUPPORTED.

OpenSL ES の Android 実装が の音量設定をサポートしていないことを読みましたAudioRecorder。本当?

はいの場合、回避策はありますか? マイクゲインが非常に高いため、Galaxy Nexus でうまく動作しない VOIP アプリケーションがあります。

また、 を新しいオーディオ ソースSL_IID_ANDROIDCONFIGURATIONに設定しようとしましたが、ここでもエラー 12 (サポートされていません) が発生します。streamTypeVOICE_COMMUNINCATION

レコーダーオブジェクトが作成されましたが、SL_IID_ANDROIDCONFIGURATIONインターフェイスを取得できません。Galaxy Nexus (ICS)、HTC sense (ICS)、Motorola Blur (Gingerbread) で試してみました。NDK バージョン 6 を使用しています。

0 投票する
1 に答える
1756 参照

android-ndk - OpenSL ES を使用した Android NDK テストアプリ

私は NDK アプリケーション (コンソールから実行しています) を開発し、Android 4.0.3 を使用して TI AM37x ハードウェアで実行しています。このアプリケーションは OpenSL API を使用しており、ハードウェアで SDCard から曲を再生しようとしています。同じパスが NDK サンプル コード (URI 再生) で動作していますが、アプリから音声を聞くことができません。誰にもアイデアはありますか?私のコードフローは次のようになります:

0 投票する
1 に答える
710 参照

android-ndk - Android ndk でのアンダーラン通知

NDK (オープン SLES を使用) を使用して、Android でストリーミング ベースのオーディオ アプリケーションを作成しようとしています。基本的なストリーミング設定が機能しています。Android でアンダーラン (またはオーバーラン) がどのように処理されるかを知る必要がありますか? エラー コールバックはどのように実装されますか? AudioPlayer がデータに飢えている期間を取得するにはどうすればよいですか?

前もって感謝します。

0 投票する
2 に答える
51725 参照

android - Android で AudioTrack の代わりに OpenSL ES を使用する理由は何ですか?

現在、AudioTrack を使用して、ネイティブ レイヤーから再生するオーディオ データを渡しています。

Java の AudioTrack の代わりに、ネイティブ レイヤーで OpenSL ES を使用できるようです。AudioTrack とは対照的に、OpenSL ES にはどのような利点があると考えられますか?

0 投票する
1 に答える
1090 参照

android-emulator - OpenSL ES が Android エミュレーターでオーディオを再生できない

amrnb を PCM にデコードし、正しい pcm バッファーを Enqueue バッファーに入れます (PCM データは正しいと確信しています) が、音が聞こえません。そして、バッファをフィードするとき、ログ出力:

私のコードは以下で、私の質問は次のとおりです。

  1. OpenSL ES を使用すると何か問題がありますか?
  2. OpenSL ES は実機でしか動作しないというのは本当ですか?

サンプルコード:

0 投票する
1 に答える
1301 参照

android - AudioRecorder オブジェクトの入力ソースを指定するにはどうすればよいですか?

AudioRecordJava (クラスを使用) から OpenSL を使用してネイティブ ライブラリに オーディオ キャプチャ ループを移植しています。

この理由は、プロファイリング後、キャプチャ ループが OpenSL で約 2% 少ない CPU をテスト電話で消費しているためです。それは重要な利益です!

Java AudioRecord クラスのコンストラクターは、複数の値 (など)sourceに構成できるパラメーターを受け取ります。MIC, CAMCORDER, VOICE_DOWNLINK

これまでのところ、OpenSL のソース パラメーターに相当するもの (存在する場合) を見つけることができませんでした。

AudioRecorder オブジェクトにこの Source パラメータを指定する方法があるかどうかは誰にもわかりませんか?

乾杯!