Я сгенерировал тон на определенной частоте с помощью функции ниже в Kotlin.
private fun genTone(): ByteArray {
val sampleRate = 44100
val duration = 10
val sample = ByteArray(duration * sampleRate)
for (i in 0 until duration * sampleRate) {
sample[i] = (sin(i / (44100.toFloat() / frequencySeekBar.progress) * Math.PI) * 100).toByte()
}
return sample
}
Как видите, эта функция возвращает байтовый массив. Итак, я использовал AudioTrack для его воспроизведения, как показано ниже :
var sound = genTone()
audioTrack = AudioTrack(
AudioManager.STREAM_MUSIC,
44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, sound.size,
AudioTrack.MODE_STATIC
)
audioTrack.write(sound, 0, sound.size)
audioTrack.play()
Теперь моя проблема в том, как воспроизвести / остановить звук с помощью мультимедийной кнопки наушников?
Я прочитал некоторые темы и руководства для определения службы и использования MediaBrowserCompat и MediaControllerCompat для управления MediaPlayer. , Но я ничего не нашел для AudioTrack.
Спасибо за помощь.