私のAndroidアプリでは、スマートフォンのマイクからいくつかの音声を取り込んで、ただちにマイクのように遅れなく再生したいと思います。私は現在、AudioRecord
とAudioTrack
のクラス(私が読んだもの)を使用することを考えていますが、どのように進めるべきかについてはあまりよく分かりません。即時音声入力&出力Android
私はスタックオーバーフローに関するその他の質問をチェックしましたが、私は何をしたいのか正確に答えていません。そして、ほとんどは2012年からです。
これらのクラスを使用して、同時にオーディオを入出力するにはどうすればよいですか?
私はMediaRecorder API
を見ましたが、私が読んだところでは、オーディオをファイルに保存する必要がありますが、これは望ましくありません。私の要求を満たすためにそれを二本にすることはできますか?または、私はちょうどを使用してより良いですか?
おかげ
EDIT:
final Thread record = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()) {
MediaRecorder microphone = new MediaRecorder();
microphone.setAudioSource(MediaRecorder.AudioSource.MIC);
microphone.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
microphone.setOutputFile(filename);
microphone.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
microphone.prepare();
} catch (IOException e) {
e.printStackTrace();
}
microphone.start();
}
}
});
final Thread play = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()) {
player = new MediaPlayer();
try {
player.setDataSource(filename);
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
を私はIllegal State Exception | Start failed: -38
を取得しています:ここで
を@Pradip Pramanickが示唆されているように以下の私の更新されたコードです。しかし、私はmicrophone.start
の後にmicrophone.prepare
と呼んでいます...何が問題だと思われますか?マイクを使っている他のバックグラウンドアプリがあるかもしれないと言った他のスレッドを検索しました。私は自分のデバイスを検索しました:Moto X Play(第3世代)は見つかりませんでした。 (私は「OK Google」の音声認識をオフにしていたが、エラーは続いていた)。
ERRORログ:ここ
は、最新のエラーを示すログ-猫です:IO例外がplayer.setDataSource(filename)
であるように思わ
01-31 09:37:21.064 344-3339/? E/MediaPlayerService: offset error
01-31 09:37:21.065 1835-1922/com.synerflow.testapp E/MediaPlayer: Unable to create media player
01-31 09:37:21.065 1835-1922/com.synerflow.testapp I/Player: player.prepare() has failed
01-31 09:37:21.065 1835-1922/com.synerflow.testapp W/System.err: java.io.IOException: setDataSourceFD failed.: status=0x80000000
、ファイル名の変数は文字列です。Environment.getExternalStorageDirectory().getAbsolutePath() + "\voice.3gp"
なぜこのようにしたいのですか? –
@ ste-fuちょっと試してみてください。あなたはこれを行う方法を知っていますか? – SynerFlow
このようなストリームを転送できるだけである必要がありますhttp://stackoverflow.com/questions/5381969/android-how-to-record-mp3-radio-audio-stream/5384161#5384161たぶん、小さなバッファもあります。なぜ本当に疑問に思っています。もしあなたがそうしたら、あなたはオーディオフィードバックにかなり苦しんでしまうでしょうか。 –