問題タブ [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 を使用した Android でのネイティブ オーディオ録音
低レイテンシを提供するために、私のプロジェクトで OpenSL ES for Android を使用しようとしていますが、NDK サンプルの NativeAudio は短いスナップショットを記録するためだけに設計されていることがわかりました。
長時間のオーディオを録音する方法のサンプルはどこにありますか? 前もって感謝します。
android - OpenSL、Android ndkで同時に異なるサウンドクリップを再生しますか?
ネイティブ android ndk と OpenSL ES を使用して複数のサウンドを同時に再生したいと考えています。ndk のネイティブ オーディオの例を見てみましたが、おそらく同時に異なるオーディオ クリップを再生できるように一般化する方法を理解できませんでした。過去 50 回ほど Google で検索してオンラインで見つけた例のほとんどは、サードパーティ ライブラリなどの追加コードに依存しているように見えますが、Java で記述されています (私はまたは、複数のサウンドを一度に処理するように設計されていないようです。
これにアプローチする方法に違いがある場合は、再生したいサウンドごとに、再生する準備ができている未加工の pcm データ (リトル エンディアン) がメモリに既にあり、それぞれのサンプリング レートを知っています。サンプルあたりのビット数 (8 または 16)、およびチャネル数 (1 または 2)。
どなたでもご協力いただければ幸いです。前もって感謝します。
android - AndroidでOpenSLを使用してオーディオレイテンシを測定するには?
Androidでのオーディオの録音と再生にはOpenSLを使用しています。最適なオーディオ構成 (バッファ、サンプル レート) を見つけるために、レイテンシを測定する方法を教えてください。
前もって感謝します!
android - Android OpenSL ES + MediaPlayer : VOICE ストリームを使用すると、デバイス間で非常に一貫性のない動作が発生する
Android の OpenSL ES 実装を使用したリアルタイム通信アプリケーション (SIP ライク、Skype ライクなど) を作成しようとしています。
問題は、通信を介して WAV オーディオ ファイルを再生する必要があることです (Java の MediaPlayer でこれを行っています)。
もちろん、OpenSL ES が実行されていない場合、mediaplayer は問題なく動作します。しかし、そうなると、すべての地獄が解き放たれます.結果はデバイス間で非常に一貫性がありません.
- Nexus 7 (4.2.2) の場合: wav は正常に再生されます
- Nexus 4 (4.2.2) および Galaxy S3 (4.1.2) の場合: wav は非常に低く再生されます (音量を最大に設定しても)
- Galaxy S4 (4.2.2) の場合: wav は非常に大きく飽和して再生されます (音量を最小に設定しても)
その問題を示すサンプル プロジェクトを作成しました。エンジンを始動する前にサウンド (ピーエット ボタン) を再生すると、動作します。後で再生する場合は、デバイスによって異なります。
ここに私の観察があります:
- OpenSL ES では、プレーヤーまたはレコーダーのみが機能する場合、すべてが期待どおりに機能します。バグを発生させるのは、プレーヤーとレコーダーの組み合わせです (MainActivity.java で、StartPlayer() [l.47] または StartRecorder() [l.48] をコメントするだけで確認できます)。
- プレーヤーのエンキュー (Audio.cpp で、コメント (*playerBufferQueue)->エンキュー [l.78-80]) を無効にすると、すべてが期待どおりに機能します。
- 音声ストリームで再生するように OpenSL ES を設定しない場合 (Audio.cpp で、コメント (*playerConfig)->SetConfiguration [l.146-187])、すべてが期待どおりに機能します。
もちろん、私が必要とするので、上記のものは解決策ではありません...
- OpenSL ES からの音声通信としての録音
- 音声ストリームで OpenSL ES から再生
- メディア ストリームの MediaPlayer から再生する
...すべて同時に。
最後に、Galaxy S4 では、ネットワークから受信したフレームをキューに入れると、OpenSL ES がそれを大音量で飽和させて再生するため、アプリケーションが使用できないことを指摘しておく必要があります。したがって、問題は MediaPlayer Java 側にあるとは思いません。
android - Androidでオーディオを再生する絶対最速の方法は何ですか?
「最速」とは、最小のレイテンシーを意味します。
私が知っている2つの方法は次のとおりです。
- android.media.AudioTrack を使用する
- NDK/C++ で OpenSL ES を使用する
2つのうち、どちらが速いですか? 他の選択肢がある場合は、私に教えてください。
詳細: 私のアプリケーションは、ネイティブ ハードウェアのフォーマットに傾向があるサウンドを再生すると仮定します。たとえば、ネイティブ再生サンプル レートが 44.1KHz の場合、44.1K サウンドをフィードします。ネイティブのサンプル レートが 48KHz の場合は、48KHz のサウンドをフィードします。システム ミキサーやリサンプラーは必要ありません。