問題タブ [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.
android - opensl es : オーディオ コールバック パターン
私は、openSL ES オーディオ ドライバーが非常に不規則なコールバック パターンを示すいくつかの Android プラットフォーム (>= 4.1.1) で作業しています。
私の予想では、10ms ごとにコールバックを返すようにオーディオ ドライバーを設定すると、約 10ms ごとにコールバックが返される (数ミリ秒かかる) と予想されていました。理想的には、コールバック パターンは次のようになります。
t = 0ms : スピーカー コールバック
t = 1ms : マイクのコールバック
t = 10ms : スピーカー コールバック
t = 11ms : マイクのコールバック
t = 20ms : スピーカー コールバック
t = 21ms : マイクのコールバック
t = 30ms : スピーカー コールバック
t = 31ms : マイクのコールバック
マイク コールバックは、受信したマイク データを受け取り、それをリング バッファーに書き込みます。次に、「シグナル」を別のスレッドに送信して、ウェイクアップし、マイク データを処理します。マイク データの処理により、10ms のスピーカー データが生成されます。そのスピーカー データは、スピーカー コールバックが読み取るスピーカー リング バッファーに書き込まれます。
コールバック パターンが、スピーカーとマイクのコールバックが交互に行われる上記のようなものであれば、すべてうまくいきます。
ただし、コールバック パターンが不規則な場合は、問題が発生し始めます。例 : マイク コールバックのバーストは、スピーカー リング バッファーのサイズを屋根を通して駆動します。なんらかの理由で、スピーカー コールバックの同じ種類のバーストが得られない場合、スピーカー パスで突然大きな遅延が発生します。
もう 1 つの問題は、スピーカーのコールバックが急増した場合です。その場合、スピーカーのリング バッファーのサンプルが不足するため、代わりに無音パケットを返す必要があります。
この種の問題に対する標準的な解決策があるかどうか疑問に思っていますか? 思いつきません。
次のリンクは、コールバック パターンの例です。
http://wikisend.com/download/143908/timestamps.txt
ここで、「1」はマイクのコールバック、「2」はスピーカーのコールバックです。
android - 「位置に SL_PLAYEVENT_HEADATNEWPOS がありませんでした」というメッセージ
OpenSL ES を使用して音楽プレーヤーを作成しました。ライブラリから警告メッセージが1つ出てくる以外は問題なく動作しlibOpenSLES
ます。これがメッセージです。
メディアトラックを探しているときに来ます。警告なしでシークできる場合もあれば、ログにメッセージが表示される場合もあります。
実装は非常に簡単です。初期化時に、シーク コントロールを取得します。
その後、ユーザーがトラック位置を変更すると、次のようにSetPosition
メソッドを呼び出します。
どちらの呼び出しも成功の結果を返し、位置の変更も常に機能します。唯一の問題は、上記の警告メッセージです。
このメッセージが表示される理由とそれを回避する方法はありますか?
アップデート:
賞金の半分は自動的に割り当てられましたが、質問にはまだ答えがありません。問題の原因と回避方法はわかりません。
android - OpenSL を使用したすべての Android デバイスでの 8KHz サンプリング レートでの音声通信
VOIP アプリを作成する必要があり、OpenSL ES を使用しています。すべての Android デバイスで 8KHz のサンプリング レートで pcm オーディオ データをキャプチャして再生する必要があります。しかし、サンプリング レート 8KHz でオーディオをキャプチャして同時に再生すると (音声通信)、ノイズが発生し、Samsung Galaxy S3、S4 などの一部のデバイスではオーディオが歪んでしまいます。特定の優先サンプリング レートがあることはわかっています。デバイスごとに、歪みなしで8KHzのサンプリングレートのみで動作する回避策または方法があることを知りたいですか?
バッファサイズを増やしたり、他の多くのことを試みましたが、最適で一般的な解決策を見つけることができませんでした. エンコーダーとデコーダー用に 8KHz でサンプリングされたオーディオ データが必要です。再サンプリング オーディオ データをエンコーダまたはデコーダに渡す前に考え直しましたが、それは私が探している解決策ではありません。
CSipSimple が OpenSL を使用していることがわかり、そのコードのいくつかも調べました。しかし、それでも解決策を見つけることができず、どこに集中すればよいか分からなかったのかもしれません。私はここで立ち往生しています!
android - 画面ロック/ウェイク中に Android オーディオの吃音が発生する
私はオーディオ再生を中心とした Android アプリに取り組んでおり、特定のデバイス、OS バージョン、またはデバイスのネイティブ バッファ サイズに固有の可能性があると思われる不規則な動作 (オーディオの吃音やしゃっくり) が発生しています。
私の実装について - 低レイテンシーが必要なので、オーディオを OpenSL ES コールバックで処理し、128 サンプルのかなり小さいバッファー サイズを使用してバッファーをエンキューしています。コールバック中に mp3 のデコードを行っていますが、リング バッファーのサイズでは、コールバック サイクルごとにデコードする必要はありません。
リモート テスト サービスを使用して、さまざまなデバイスや OS バージョンでのオーディオ再生品質を測定しています。ここに、私が見つけた不一致の例をいくつか示します。
- Android 4.4搭載のSamsung Galaxy S4 - オーディオ再生の問題なし
- Android 4.3 搭載の Samsung Galaxy S4 - デバイスのロック/ロック解除時にオーディオのドロップアウト/スタッターが発生する
- Android 4.1.2 搭載の Samsung Galaxy Note 2 - 問題なし
- Android 4.3 搭載の Samsung Galaxy Note 2 - 再生中にオーディオがドロップアウトし、画面のロック/ロック解除時に途切れます。
個人的には、4.1.2 を搭載した Galaxy S3 と 4.4 を搭載した Nexus 5 を使用していますが、これらの問題が発生したことはありません。また、これらの問題が発生しない古い 2.3.7 デバイスもいくつか持っています (2010 Droid Incredible、LG Optimus Elite)。
これは古いジンジャーブレッド デバイスでも問題なく実行できるため、プロセッサを使いすぎていないと確信しています。
私の質問:
- ベース SDK を 4.2 に上げると、ハードウェアからネイティブ バッファー サイズを検出し、バッファー キューのコールバック中にその倍数を使用できます。これは、特に画面ロック中に吃音やドロップアウトが問題になる場合に大きな違いをもたらすでしょうか?
- Android 4.3 の既知のバグで、特に画面ロック アクション中にオーディオの再生に問題はありますか? これはおそらくサムスンの問題ですか?
- この問題を回避するためにパフォーマンスを向上させる他の方法はありますか? アプリには OpenSL ES が絶対に必要です。
ありがとう。
java - OpenSL ES AudioPlayerで再生するためにファイルをJNIに渡す方法は?
(Native-Audio NDK サンプルに従って) AudioPlayer を作成しようとしていますが、再生するファイルが動的にダウンロードされるため、AssetManager を使用せずにアセットとしてパッケージ化されていません。
そこで、Java から JNI に FileDescriptor を渡して、以下のサンプル JNI コードのような状況で (AssetManager を使用せずに) 使用できるかどうか疑問に思っていました。
残念ながら Java 側では、FileDescriptor はクラスであり、SLDataLocator_AndroidFD で使用される int (SLuint32) ではありません。
以下のコンストラクタ:
どんな助けでも大歓迎です!
android - OpenSL ES Android:「オブジェクトが多すぎます」 SL_RESULT_MEMORY_FAILURE
Android の OpenSL ES に問題があります。OpenSL を使用して効果音を再生しています。現在、サウンドを再生するたびに新しいプレーヤーを作成しています。(これがそれほど効率的でないことはわかっていますが、当面は「十分」です。)
しばらく再生すると、次のエラーが発生し始めます。
私は自分の作成/破棄パターンを追跡しており、いつでも未処理のオブジェクトが 4 つを超えることはなく、システム制限の 32 をはるかに下回っています。もちろん、これは破棄が適切に機能していることを前提としています。
今の私の唯一の推測は、プレイヤー オブジェクトをクリーンアップするときに何か間違ったことをしているということです。考えられる問題の 1 つは、Destroy がプレーヤーのコールバックのコンテキストで呼び出されることが多いことです (基本的には、プレーヤーの再生が終了した後にプレーヤーを破棄します)。ただし、これが問題であることを示唆する参照は見つかりません。プレイヤー オブジェクトを「破棄」する以外に、他に行うべきクリーンアップ手順はありますか? インターフェイスも何らかの方法でクリーンアップする必要がありますか?
- 追加した -
さらにテストを重ねた結果、30 番目のプレーヤーが作成された後も一貫して発生します (エンジンとミックスもあり、合計で 32 オブジェクトになります)。したがって、オブジェクトを適切に破棄する必要はありません。コードは次のとおりです。何が問題なのか知りたいです。
audio - Android OpenSL の例は libOpenSLES.so をロードしませんか?
このチュートリアルhttp://audioprograming.wordpress.com/2012/03/03/android-audio-streaming-with-opensl-es-and-の助けを借りて、Android で OpenSL ライブラリを使用する Android NDK アプリケーションを正常に構築しました。 ndk/
opensl_io.h には、次のように記述されています。
これが私のデバイスにライブラリ/system/lib/libOpenSLES.so
がロードされるという影響があるかどうか疑問に思っていました。
Android.mk に記載されているため、ある時点でライブラリをロードする必要があると思いました
そして、ndk doc/system/lib/libOpenSLES.so
は、これは、他のものは使用されないことを意味することを私に伝えています-lOpenSLES
そのため、そのファイルに FileWatcher を持つスーパーユーザー権限を持つアプリを作成しました。
ただし、私の OpenSL の例を使用すると、ライブラリはまったく変更されていないようです。
などの他のライブラリについて/system/lib/libstdc++.so
は、それらがロードされていることを FileWatcher で確認できます。
だから私の質問は:なぜ/system/lib/libOpenSLES.so
使われていないのですか?
android - Android での OpenSL ES の再生速度
私は現在、音楽のテンポを遅くする必要があるアプリを開発しています。オンラインで検索しましたが、Android でこれを行うための唯一の実際のオプションは OpenSL ES です。基本から始めているので、オーディオファイルを再生しましたが、何らかの理由でテンポを変更できません。次のエラーが表示されます
機能がサポートされているかどうかを確認しましたが、ドキュメントにはサポートされていると記載されているので、コードに間違いがあるのでしょうか? 今まで C++ を使用したことがないので、助けていただければ幸いです。私のコードは次のとおりです
どんな助けでも大歓迎です。ありがとう
android - Android Kit Kat での Qualcomm MSM8960 Audio Api へのアクセスと設定
Android Kit Kat の Qualcomm MSM 8960 に関していくつか質問があります。
openSL を使用してネイティブ コードでオーディオを録音/レンダリングし、モードを Java から IN_CALL に設定すると、Qualcomm MSM8960 エコー キャンセラーが実行されているようです。しかし、モードをIN_COMMUNICATIONにすると、エコーキャンセラが動いていないようです。私の質問は: ネイティブ コードで Qualcomm HW AGC、AEC、およびノイズ サプレッサーを呼び出す正しい方法は何ですか?
Qualcomm MSM 8960 オーディオ サブシステムをネイティブ コードで (openSL や Java オーディオ インターフェイスをバイパスして) 直接構成することは技術的に可能ですか? コードをできるだけ HW に近づけたいと考えています。
リンク: https://android.googlesource.com/platform/hardware/qcom/audio/+/android-4.4.2_r2/hal/msm8960/