【发布时间】:2021-11-16 21:26:18
【问题描述】:
我有一个 Android 应用,其中有一些原始音频字节存储在一个变量中。
如果我使用 AudioTrack 播放此音频数据,则只有在我使用 AudioTrack.MODE_STREAM 时才有效:
byte[] recordedAudioAsBytes;
public void playButtonPressed(View v) {
// this verifies that audio data exists as expected
for (int i=0; i<recordedAudioAsBytes.length; i++) {
Log.i("ABC", "byte[" + i + "] = " + recordedAudioAsBytes[i]);
}
// STREAM MODE ACTUALLY WORKS!!
/*
AudioTrack player = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLERATE, CHANNELS,
ENCODING, MY_CHOSEN_BUFFER_SIZE, AudioTrack.MODE_STREAM);
player.play();
player.write(recordedAudioAsBytes, 0, recordedAudioAsBytes.length);
*/
// STATIC MODE DOES NOT WORK
AudioTrack player = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLERATE, PLAYBACK_CHANNELS,
ENCODING, MY_CHOSEN_BUFFER_SIZE, AudioTrack.MODE_STATIC);
player.write(recordedAudioAsBytes, 0, recordedAudioAsBytes.length);
player.play();
}
如果我使用 AudioTrack.MODE_STATIC,输出会出现故障——它只会发出令人讨厌的爆裂声,而且听起来很短,几乎听不到任何声音。
那是为什么呢? STATIC_MODE 是否要求音频数据有标头?
我能想到的就这些了。
如果您想查看所有代码,请查看this question。
【问题讨论】:
标签: android audio encoding pcm audiotrack