Exoplayer: пользовательский аудиопроцессор - эквалайзерAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Exoplayer: пользовательский аудиопроцессор - эквалайзер

Сообщение Anonymous »

Я работаю над медиаплеером на основе Exoplayer для Android, и я пытаюсь написать свой собственный эквалайзер. , и я считаю, что лучшее место для манипулирования образцами для применения изменений в равенстве, - это пользовательский аудиопроцессор .

Я использовал канал MapingAudioprocessor В качестве отправной точки и клонировал то, что я думаю, являются соответствующими аспектами: < /p>

Код: Выделить всё

class EqualizerAudioProcessor : BaseAudioProcessor() {

private lateinit var outputChannels: IntArray

override fun configure(sampleRateHz: Int, channelCount: Int, encoding: Int): Boolean {
outputChannels = IntArray(channelCount)
for (i in 0 until channelCount) {
outputChannels[i] = i
}
return true
}

override fun isActive(): Boolean {
return true
}

override fun getOutputChannelCount(): Int {
return outputChannels.size
}

override fun queueInput(inputBuffer: ByteBuffer) {
var position = inputBuffer.position()
val limit = inputBuffer.limit()
val frameCount = (limit - position) / (2 * channelCount)
val outputSize = frameCount * outputChannels.size * 2
val buffer = replaceOutputBuffer(outputSize)
while (position < limit) {
for (element in outputChannels) {
var sample = inputBuffer.getShort(position + 2 * element)
// Todo: Manipulate sample
buffer.putShort(sample)
}
position += channelCount * 2
}
inputBuffer.position(limit)
buffer.flip()
}

override fun onReset() {

}
}
Кажется, что если я включу этот аудиопроцессор , воспроизведение не произойдет (кажется, застряло в «приостановленном состоянии», как будто Образцы не передаются, и, что интересно, queueInput () не вызывается. P> Я надеюсь, что кто -то поможет мне понять, если я ошибаюсь здесь, и как это работать. как так: < /p>

private fun initPlayer(context: Context): ExoPlayer {

val audioProcessor = EqualizerAudioProcessor()

val renderersFactory = object : DefaultRenderersFactory(context) {
override fun buildAudioProcessors(): Array {
return arrayOf(audioProcessor)
}
}

val player: SimpleExoPlayer = ExoPlayerFactory.newSimpleInstance(
context,
renderersFactory,
DefaultTrackSelector(),
DefaultLoadControl()
)

player.addListener(object : Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
callback?.onPlayStateChanged(playWhenReady)
}
})

return player
}
< /code>

заранее спасибо < /p>

Подробнее здесь: https://stackoverflow.com/questions/588 ... -equalizer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»