dor*_*bsz 2 android audiotrack android-5.0-lollipop android-5.1.1-lollipop
在获得带有 Lollipop 的 Android 设备后,我注意到我们为 Kitkat(和以前的版本)工作的 AudioTrack 代码完全停止工作,完全相同的代码适用于 Lollipop 之前的设备,所以我想知道我在做什么新版本做错了。AudioTrack以下是(由属性引用mTrack)的初始化方式:
protected void onCreate(Bundle savedInstanceState) {
int bufferSize = AudioTrack.getMinBufferSize(AUDIO_SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, AUDIO_SAMPLE_RATE,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize,
AudioTrack.MODE_STREAM);
}
Run Code Online (Sandbox Code Playgroud)
以下是缓冲区的填充方式:
public void onPlayAudio(byte[] audioBuffer) {
if (mTrack.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
mTrack.play();
}
if (audioBuffer != null) {
mTrack.write(audioBuffer, 0, audioBuffer.length);
}
}
Run Code Online (Sandbox Code Playgroud)
同样,这在 Lollipop 之前的设备上运行良好。Logcat 上没有错误,一切似乎都正常,但声音不出来(是的,我检查了音量,它一直开到最大)。所以我想知道我是否缺少更新或者我做错了什么。
我注意到AudioFormat.CHANNEL_CONFIGURATION_STEREO已被弃用,但尝试建议AudioFormat.CHANNEL_OUT_STEREO似乎并不能解决问题。
任何帮助将不胜感激。
谷歌改变API。尝试这个:
val audioTrack: AudioTrack
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioTrack(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build(),
AudioFormat.Builder()
.setSampleRate(FREQUENCY)
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setChannelMask(AudioFormat.CHANNEL_OUT_MONO).build(),
SOUND_BUFFER_SIZE,
AudioTrack.MODE_STREAM,
AudioManager.AUDIO_SESSION_ID_GENERATE)
} else {
//support for Android KitKat
AudioTrack(AudioManager.STREAM_MUSIC,
FREQUENCY,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
SOUND_BUFFER_SIZE,
AudioTrack.MODE_STREAM)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |