問題タブ [android-audiorecord]
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 - Android: AudioRecord クラスの問題: コールバックが呼び出されない
私の Android Java アプリケーションは、オーディオ データを RAM に記録して処理する必要があります。これが、「MediaRecorder」ではなく「AudioRecord」クラスを使用する理由です(ファイルにのみ記録します)。
今までは、オーディオ データの "read()" によるビジー ループ ポーリングを使用していました。これはこれまでのところ機能していますが、CPU を固定しすぎています。2 つのポーリングの間に、100% の CPU 使用率を回避するためにスレッドをスリープ状態にしました。ただし、スリープの時間が保証されておらず、オーディオ スニペットが失われないようにセキュリティ時間を差し引く必要があるため、これは実際にはクリーンなソリューションではありません。これは CPU 最適化ではありません。並列実行スレッドには、できるだけ多くの空き CPU サイクルが必要です。
「OnRecordPositionUpdateListener」を使用して録音を実装しました。これは非常に有望であり、SDK ドキュメントによると正しい方法に見えます。すべてが機能しているように見えます (オーディオ デバイスを開く、データを read() するなど) が、Listner が呼び出されることはありません。
理由を知っている人はいますか?
情報: エミュレーターではなく、実際のデバイスで作業しています。Busy Loop を使用した録音は、基本的に機能します (ただし、満足はできません)。Callback Listener だけが呼び出されることはありません。
ここに私のソースコードからのスニペットがあります:
android - Androidで8ビットエンコーディングでAudioRecordを使用する
AudioRecordと16ビットエンコーディングを使用して電話のマイクから録音するアプリケーションを作成し、録音を再生することができます。互換性の理由から、8ビットエンコーディングを使用する必要がありますが、そのエンコーディングを使用して同じプログラムを実行しようとすると、無効なオーディオ形式が取得され続けます。私のコードは:
誰もが問題が何であるか知っていますか?ドキュメントによると、AudioRecordは8ビットエンコーディングが可能です。
android - AudioRecordはMotorolaマイルストーンでは機能しません
この問題は、Motorolaマイルストーンでのみ発生します。コード:
私が持っているエラー情報(デバッグのためのマイルストーンを自分で持っていないので、今のところこれ以上見つけることができません):
明らかに、この問題を抱えているのは私だけではありません。私が見つけたいくつかの非常によく似たスレッド(解決策なし):
http://groups.google.com/group/android-developers/browse_thread/thread/6dd24aeb484b2e40 http://web.archive.org/web/20100824043744/http://androidcommunity.com:80/forums/f2/problem -using-audiorecord-in-motorola-milestone-30935 / http://community.developer.motorola.com/t5/Android-App-Development-for/Problem-using-AudioRecord-on-Milestone-device/mp/3889 http://www.fring.com/forums/showthread.php?t=16194 http://groups.google.com/group/android-developers/browse_thread/thread/63be273ba59c635e/1c4a010fd470d328
android - HTC 以外のデバイスでの AudioRecord の問題
AudioRecord の使用に問題があります。
splmeterプロジェクトから派生したコードの一部を使用した例:
これは、HTC Dream と HTC Magic ではログの警告やエラーなしで完全に機能しますが、エミュレーターと Nexus One デバイスでは問題が発生します。
Nexus では、有用なデータが返されることはありません。リモートの友人にテストを行ってもらっているため、他の有用な情報を提供することはできません。
エミュレーター (Android 1.5、2.1、および 2.2) では、AudioFlinger から奇妙なエラーが発生し、AudioRecordThread でバッファー オーバーフローが発生します。また、UI の応答性が大幅に低下します (記録は UI とは別のスレッドで行われますが)。
私が間違っていることは明らかですか?Nexus One ハードウェアについて何か特別なことをする必要はありますか?
編集
問題を部分的に解決しました... AudioRecordのドキュメントには次のように書かれています:
AudioRecord オブジェクトを正常に作成するために必要な最小バッファ サイズを返します。このサイズは、負荷がかかった状態でのスムーズな録音を保証するものではないことに注意してください。AudioRecord インスタンスが新しいデータについてポーリングされると予想される頻度に従って、より高い値を選択する必要があります。
だから私はバッファの長さを
そして今、エミュレーターはうまく動作します。
しかし
ハードウェアはそうではありません。エミュレーターはその呼び出しから 640 の値を返しますが (1 秒あたり 12.5 ポーリングを行う)、8khz に基づいて、HTC ハードウェアは 4096 を返します! つまり、1 秒あたり約 2 回のポーリングと、0.5 秒の音声遅延です。さらに、Nexus One で同じ呼び出しを行うと、8192 が返されます。つまり、完全な 1 秒の遅延です。
それで終わったらいいのですが、HTCデバイスとすべてのエミュレーターが動作するようになったにもかかわらず、nexus oneはまだオーディオを返しません(まだ自分自身を持っていないので、適切なデバッグ情報を取得できません)。 (一部が他よりも遅れている場合でも)。
ここで何かひどく間違ったことをしていますか?
android - AndroidAudioRecordの初期化に失敗します
Android用のAudioRecordの使用に問題があります。私はそれについてオンラインで見つけることができる限り多くを読みました、しかし私は良い初期化を得ることができないようです。私はAndroid2.2エミュレーター、1.5エミュレーター、そして私の電話、Froyoを実行しているHTCIncredibleを試しました。エミュレーターと私の電話は初期化に失敗します。
8000、11025、44100のサンプリングレート、CHANNEL_IN_MONO/STEREOとCHANNEL_CONFIGURATION_MONO/STEREOのフォーマット、8ビットと16ビットのエンコーディング(8ビットでgetMinBufferSizeが失敗する)、MICとDEFAULTのAudioSourceを試しました。get状態(初期化に失敗)を実行した後、すべての結果、変数テストは0になります。
私が読んだすべてのことから、これはオブジェクトを正しく初期化するはずだと思われます。HTCデバイスには8192を超えるものが必要だと聞いていたので、buflenの乗数を試して512(関数の結果)から102400の範囲にしました。
問題をテストするために、問題をできるだけ簡単に再現する新しい小さなプロジェクトを作成しました。必要な定数をローカルintに引き出し、コンストラクターを実行してgetStateメソッドにアクセスし、機能するかどうかを確認します。
android - AndroidAudioRecordの初期化は毎回失敗します
私の問題は簡単に説明できます。AudioRecordオブジェクトを作成しようとしていますが、初期化に失敗します(つまり、コンストラクターの後、getStateは0を返し、失敗を示します)。私はこれをEclipseからOS2.2.1を実行しているMotoDroid1で実行しています。私のAndroidManifest.xmlは、AFAIKであり、適切な権限RECORD_AUDIOを使用しています(これを確認する方法がわかりません)。
AudioRecordを作成するには、次のようにします。
audioRecorder.getState()は0を返します(つまり、STATE_UNINITIALIZED)
このAPIを使用した完全な例は見つかりませんでした。私は、Androidの初心者なので、解決策は単純なものかもしれません。なぜ失敗するのかを知るために何ができますか?
何人かの人々が同様の質問をしましたが、彼らが承認した修正が私を助けていないので、彼らは私とは異なる問題を抱えていたに違いありません。最も注目すべきはこれです。しかし、承認された解決策は当惑していて、とにかく私にはうまくいきませんでした。また、モノラルとステレオの両方、および8ビットと16ビットのさまざまなビットレート(8000、16000、11025、44100)を試しました。初期化に成功したため、組み合わせは返されません。
android - Android AudioRecord での AudioHardwareALSA エラー
私が書いている単純なAudioRecordアプリを開始しています。それはこれらの束から始まります:
そしてこれ:
これはどういう意味ですか?必要に応じてソース コードを投稿できますが、これらのエラーが何を参照している可能性があるか、およびそのような状況でバッファ オーバーフローが発生する理由についての基本的な回答を探しています。ありがとう。
android - AudioRecordクラスの読み取りメソッドの問題
public int read(byte [] audioData、int offsetInBytes、int sizeInBytes)。
このメソッドは、オーディオハードウェアからオーディオデータを読み取り、バッファに記録します。
そのパラメータは次のとおりです。audioData録音されたオーディオデータが書き込まれる配列。データが書き込まれるaudioDataのoffsetInBytesインデックスはバイト単位で表されます。sizeInBytes要求されたバイト数。
読み取られたバイト数、またはオブジェクトが適切に初期化されていない場合はERROR_INVALID_OPERATIONを返し、パラメーターが有効なデータとインデックスに解決されない場合はERROR_BAD_VALUEを返します。バイト数はsizeInBytesを超えません。
私はこのメソッドを次のようにコードで記述しました:int num; byte [] buf = new byte [160]; num = record.read(buf、0、160);
問題は、データが利用できない場合でも、常に160(つまり、読み取られるように要求されたバイト)を返すことです。どうしたの?助けて。前もって感謝します。
java - AudioRecordでオーディオを録音するときの停止ボタン
現時点では、このサイトのコード (リンク テキスト) がうまく機能しています。サイトの例では、10 秒間録音を開始し、すぐにオーディオを逆再生します。ボタンが押されたときに記録を開始するようにコードを変更しましたが、10 秒間記録してからそのファイルを保存することしかできません。ボタンを押して録音を開始し、別のボタンを押して録音を停止できるようにしたい。スレッド オブジェクトの wait() メソッドへの割り込みである可能性があると考えていますが、これを実装する方法がわかりません。私のコードは次のとおりです。
かなりの量のコードがあるので、関連すると思われるビットのみを投稿しました。さらに必要な場合は、お尋ねください。
ありがとう。
java - 録音せずにAndroidでマイクをサンプリングしてライブの振幅/レベルを取得する方法は?
Androidでマイクの振幅レベルを次のように取得しようとしていました:
残念ながら、これは常に 0 しか返しません。
これが機能するには、実際に録音を開始する必要があるようです。あれは正しいですか?
その場合、500 ミリ秒記録し、振幅を取得し、記録を停止して繰り返す必要がありますか?
最後に、ファイルに記録する必要がありますか? このオーディオ ファイルを保存する必要はありません。録音せずに、現在のライブ マイク入力の最後の呼び出し以降の現在の振幅または最大振幅を取得することはできませんか?
どんな助けでも大歓迎です、ありがとう。