アンドロイド - 私はMediaRecord / MediaPlayerの代わりのaudiorecordの/トラックでこれを行うことができますか?
-
19-09-2019 - |
質問
私は現在、AndroidデバイスとまっすぐAndroidデバイスのイヤーピースをそれを果たしているAudioTrackへのパイプのマイクからの音声を記録するためにaudiorecordのを使用します。
私は同じですが、私はメディアのクラスではなく、オーディオクラスで提供されていますAMR-NBのエンコーディングを使用する必要が代わりとしてのMediaPlayerとMediaRecorderクラスで行うことができます思ったんだけど。
MediaRecorderとMediaPlayerのと私の問題は、私は、ファイルに記録し、そのファイルをプレイしているようにそれが思われることでしょうか?
これは、私がメディアクラスとイヤーピースするマイクからの音声をストリーミングするために、とにかくあり、何をしたいのかではないでしょうか?
オーディオクラスを使用して私のコードは、以下の通りですそれはMediaPlayerのとMediaRecorderと同じ何かをすることは可能でしょうか?
public class Record extends Thread
{
static final int bufferSize = 200000;
final short[] buffer = new short[bufferSize];
short[] readBuffer = new short[bufferSize];
public void run() {
isRecording = true;
android.os.Process.setThreadPriority
(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize,
AudioTrack.MODE_STREAM);
Log.d("AUDIO", "sample rate = : " + arec.getSampleRate());
atrack.setPlaybackRate(11025);
byte[] buffer = new byte[buffersize];
arec.startRecording();
atrack.play();
while(isRecording) {
arec.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
}
}
}
解決
いいえ、ありません。この時点で、それはバイトストリーム入力がサポートされていないMediaPlayer
のよく知られた制限です。あなたはまだ、ファイルまたはURIの入力ソースを必要と思います。
所属していません StackOverflow