問題タブ [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 に答える
1591 参照

crash - OpenSL ES RegisterCallback がクラッシュを引き起こす

プロジェクトに OpenSL を使用する必要があります (Soundpool を試しましたが、まったくうまくいきません)。ただし、サウンドを複数回再生した後(連続35回程度)、アプリがシャットダウンします(おそらくオーバーフローのためだと思います)。

問題を解決するためにバッファ/メモリを解放しようとしました(そして、神のために、このOpenSLを使用して行う方法がわかりません)。そのため、ファイルの再生が終了したら解放することにしました。OpenSL ES は、RegisterCallback役立つ機能を提供してくれます。私の場合(URIファイルを使用)、新しい問題が発生し、RegisterCallbackアプリが再びクラッシュしました。行き詰まっています。

これが私のコードです。助けてください。の直後にクラッシュしました//register callback for uri

0 投票する
0 に答える
249 参照

android - グローバル出力ミックスに AUX エフェクトをアタッチする方法は?

OpenSL を介してリバーブとエンベロープ リバーブ効果をグローバル出力ミックスにアタッチするにはどうすればよいですか?

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

perl - バックティック Perl を使用した SSL 出力のキャプチャ

私はこれを単純に見ているかもしれませんが、やりたいことが可能かどうかはわかりませんが、これにより、さまざまなファイルを読み込んだり読み込んだりする必要がなくなり、多くの時間を節約できます。

私がやろうとしているのは、バックティックを使用して、文字列の特定の部分を暗号化する OpenSLL exe の出力を受け取ることです。次に、出力を使用して別のファイルに追加します。OpenSLL は自動的にテキスト ファイルに出力します。

例えば:

その後になります

これは、暗号化されたテキストを読み込んで解析し、出力を新しいファイルに追加することで実行できることを知っていますが、これを100行または1000行で実行しようとしているので、余分なものになるため、これを避けたいと思っていました処理。

私のアイデアをご覧いただければ幸いです。

0 投票する
3 に答える
1678 参照

android - AndroidでのOpenSLESの代替

キュープレーヤーでpcmデータをfloatとして再生するために必要なAndroid用のアプリを作成しています。私が見る限り、それは不可能です。説明は言う:

SL_DATAFORMAT_PCMは、アプリケーションがデータの表現を符号付き整数、符号なし整数、または浮動小数点として指定することを許可しません。Androidの実装では、8ビットデータは符号なし整数であり、16ビットは符号付き整数であると想定しています。さらに、実際の単位はミリHzであるため、フィールドsamplesPerSecは誤った名称です。これらの問題は、次のOpenSL ESバージョンで対処される予定です。これにより、アプリケーションが表現を明示的に指定し、フィールド名を修正できる新しい拡張PCMデータ形式が導入されます。これは新しいデータ形式であり、現在のPCMデータ形式は引き続き使用可能であるため(非推奨ですが)、コードをすぐに変更する必要はありません。

opensl es(1.0.1)を介してこの作業を取得する機会はありますか、それともandroidndkのopenslesに代わるものはありますか?

0 投票する
0 に答える
788 参照

android - Android AlertDialog は、表示されてから数秒後にアプリケーションをフリーズします - 原因は OpenSL 関連のようです

わかりました「すべて」を試して、検索したものをすべて読んでみました。質問は非常に単純ですが、何が問題なのか理解できません。

私は NDK (CPP のネイティブ コード) を使用しています。

私は、いくつかの非常に単純なレンダリングが行われた OpenGL GLSurfaceView を持つ非常に単純なアクティビティを持っています。ある時点で、2 つのボタンで単純な AlertDialog を開くことができるようにしたいと考えています。

今、私は多くの異なるアプローチを試しましたが、基本的にすべて「メッセージは、メッセージをポーリングするだけの Java スレッドに投稿され、それを受信すると、実行されるメイン UI スレッドに Handler を持つメッセージを投稿します」という考えに陥ります。 AlertDialog を作成するメッセージ ハンドラー".

次のコードフラグメントのように、GLSurfaceView の onTouchEvent() 関数内の Handler にメッセージを投稿することにより、テスト用に「すべて Java から」実行するなど、他のいくつかのアプローチを試しました。

メッセージを受信するハンドラーは次のことを行います。

AlertDialog が表示され、すべて正常に動作しているように見えますが、数秒後にすべてがフリーズし、エラー メッセージは表示されず、何も表示されませんが、.step() が呼び出されなくなったため、GLSurfaceView() でのレンダリングも停止します。いかなる種類のエラーメッセージも表示せずにフリーズして停止し、ほぼ永久にそこにとどまり、時折「アプリケーションが応答しません」になります。

この種の動作は Nexus 7 タブレットで発生するようですが、私が持っている別のタブレットでは発生しませんが、4 回目または 5 回目にダイアログを起動/閉じます。

私が理解できた唯一のことは、ある時点であらゆる種類のタッチの受信を停止したように見える、および/または「ウィンドウがない」、および/またはウィンドウが消えたように見える、実際に何が起こっているのか理解できません。

大規模なテストの後に見つけたばかりの情報をいくつか追加しています。

古典的な基本的な OpenGL の例を取得した後、単純に三角形を描画してすべてのコードを元に戻すだけですべてが機能することがわかったので、振り出しに戻って自分のコードで同じことを再試行し、#ifdef を入れ始めました。 「クラッシュポイント」が見つかるまで、さまざまな場所でコードを切り刻みました。

しばらくしてこれを見つけたところ、原因はそのコードにはまったくないように思えますが、バックグラウンドで作業しているオーディオに何か関係があるようです。

これは、OpenSL に基づく非常に単純なプレーヤーであり、サンプルが混在する循環バッファーをループで継続的に再生する 1 つのプレーヤー オブジェクトです。

AUDIO_DATA_CHUNK_SIZE は 128 です。これは、サンプルが混在する循環バッファーをループ再生するように設計されており、常に再生されます (サンプルレート 11.025 Khz )。

Alertdialog が起動しているときにサウンドの再生を無効にすると、すべて問題なく動作します。

ある時点でこれが起こっているのを見ることができる以外は、実際に何が起こっているのかわかりません:

何らかの方法でオーディオの再生が入力に干渉しているようです。

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

android - Android NDK、OpenSL ES - バッファがいっぱいになったときを知る

バッファキューに記録するためにバッファをエンキューすると、そのバッファが実際にいついっぱいになったかを知る方法があるので、それを使用できますか?

同様に、バッファがいつ再生されたかを知る方法はありますか?

文脈のために:「native-audio」と呼ばれるNDKの例をいじっています。再生には SLAndroidSimpleBufferQueueItf を使用し、ストリームの記録にはこのようなキューも使用する必要があるとコメントしています。どこかで読んだことを覚えているので、録音コールバックの次の呼び出しでバッファがいっぱいになる(または、再生中のコールバックで再生される)ことは保証されていないので、今私は疑問に思っています.バッファーは使用されていますか? 何らかの方法があるに違いありません。^^

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

android - openslessとandroidndkを使用してリアルタイムでオーディオを再生する

私がやりたいのは、音声を録音し、録音したオーディオにエフェクトを追加するように処理してから、openslを使用してできるだけ速く再生することです。このようなことについてネット上で情報を見つけるのに苦労しているので、実際にいくつか質問があります。

androidのネイティブオーディオサンプルと、openslを使い始めたandroid ndkで始まる本を見てきましたが、録音をよく理解するのにあまり役立ちませんでした。

1)最初に、録音されたオーディオをすぐに再生するには、録音スレッドがバッファーに書き込んでいるときに、オーディオを再生するスレッドからバッファーを読み取ることができますか?2つの異なるスレッドによってメモリ内のオブジェクトに同時にアクセスするというアイデアは問題を引き起こす可能性があるため、誰かがこのアイデアに夢中になることはわかっていますが、記録スレッドが常にメモリに書き込むようになっている場合は、オーディオスレッドを再生すると、それは可能でしょうか?

2)または、リアルタイムで再生するには、2つまたは3つの非常に小さいバッファーを含むバッファーキューと、1つがいっぱいになるたびに呼び出されるコールバックを使用し、次のバッファーが録音によっていっぱいになる間にそのバッファーを再生しますか?オーディオスレッド?しかし、私は読んでいて、誰かがコールバックが常に呼び出されるとは限らないと言いました(これについて私が見つけた最も役立つリンクは:https ://groups.google.com/forum/#!msg / android-ndk / hLSygQrmcPI / qtwB76JNa_EJ ) 。また、録音されたオーディオと再生されたオーディオの時間差は、バッファのサイズに、コールバックが次のバッファを使用して録音を開始することを録音オブジェクトに通知するのにかかる時間を加えたものになることを意味します。レコーダーが録音を停止してから再開するまでにはギャップがあると思います。

3)androidの記録バッファキューは、理解に問題がある場所でもあります。オーディオを録音するためにAndroidのバッファキューを使用する必要がありますか?または、バッファキューを使用せずにバッファに直接記録することは可能ですか?の明確な方法がSLAndroidSimpleBufferQueueItf実際には機能していないように見えるため、これに問題があります。どうやらそれはバグです。バッファがすでにデータでいっぱいになっていると、バッファを介して記録できないようです。clearメソッドが機能していないように見えるので、キュー内のどのバッファーに記録するかをレコーダーに指示するにはどうすればよいですか?

これは質問することがたくさんあることを知っています、そして私が試したすべてを言ったわけではありませんが、誰かがこれについてある程度の経験を持っていて、私と再生に問題がある他の人のためにいくつかの光を当てることができることを望んでいましたopenslを使用したリアルタイムのオーディオ。

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

android - opensl のオーディオ プレーヤーは 2 つのデータ シンクに出力できますか?

オーディオ プレーヤーが 2 つのデータ シンクに出力する方法はありますか?

より具体的には、データソースをuriとして設定したオーディオプレーヤーを使用して、ネットからmp3をバッファおよび出力ミックスにストリーミングしようとしています。現在、オーディオ プレーヤーのシンクを出力ミックスのみに設定しているため、このファイルをストリーミングして、プリフェッチで十分なデータがあると判断されたときに再生できますが、同時にこのストリーミング データをバッファに入れたいと考えています。時間。

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

android - URIからオーディオをストリーミングするとき、openslのオーディオプレーヤーバッファはどこにありますか?

opensl を使用して uri からオーディオ ファイルをストリーミングしようとしています。すぐに再生したいだけでなく、プレーヤーがファイルの再生を終了した後にストリーミング データにアクセスしたい。

ストリーミングされたオーディオの再生中にシークを使用できるため、データがメモリのどこかにあることはわかっています。また、プレーヤーがストリーミングされたオーディオ ファイルの再生を終了したら、プレーヤーを停止します。これにより、プレーヤーの位置が「0」に戻り、オーディオの再生を再開できます。

このデータにアクセスする必要がありますが、どこにありますか? どういうわけかそれへのポインタを取得できますか?

0 投票する
3 に答える
2671 参照

android - AndroidでOpenSLESを使用したソケット通信によるMP3オーディオのストリーミング

アクセスポイント経由でWiFiを使用してAndroid携帯から別のAndroid携帯にMP3をストリーミングしようとしています。問題は、OpenSL ESがソースとしてPCMオーディオバッファのみをサポートしているように見えることです(URIを使用していない場合)。送信する前に「マスター」側で潜在的に巨大なファイルをデコードするのではなく、「クライアント」にMP3をPCMにデコードさせたいと思います。これは、単にファイル全体を送信してからデコードするのではなく、ファイルストリームとして発生する必要があることに注意してください。OpenSL ESを使用してこれを実現する方法はありますか?オーディオトラック?かなり一般的なリクエストのようです。