0

音声処理の申請をしています。音声録音にはAndroidAudioRecordクラスを使用しています。AudioRecordインスタンスはサービスに入れられます。read()クラスのメソッド を呼び出すために別のスレッドが使用されますAudioRecord(SOには十分な例があります)。読み取られたサンプルは、さらに処理するためにネイティブコードに転送され、キューに入れられます。ネイティブコードでは、1つのスレッドが処理を実行しています。問題は、このスレッドがプロセッサ時間を取得しないことです。アプリを終了したら、ネイティブリソースをクリーンアップするための関数を呼び出します。しかし、クリーニングのプロセス全体が終了していないことがあります(私は呼び出しを使用してそれを確立しました)。アプリを再度起動すると、ネイティブ処理が開始されます(新しいサンプルの読み取りはまだ開始されていません)。

読み取りスレッドがそれ自体のためだけにプロセッサを使用している可能性はありますか?ネイティブ(プロセッサ)スレッドに高い優先度を設定できますか?または、他の問題である可能性があります。

私も使ってみましAudioRecord.OnRecordPositionUpdateListeneronPeriodicNotificationが、成功しませんでした。

4

1 に答える 1

0

私は解決策を見つけました。移植したライブラリでエラーが発生しました。処理ブロックの1つがsleepメソッドを呼び出します。このライブラリは最初にウィンドウの下で使用され、スリープ時間はミリ秒単位でした。この移植後の時間は秒単位です。したがって、私のネイティブスレッドは50ミリ秒ではなく50秒間スリープしていました。

于 2013-02-27T16:05:04.663 に答える