Как получить информацию о буфере и звуке для эквалайзера с помощью MediaBrowser, MediaController, MediaSession и Exoplayer? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение, которое может воспроизводить плейлисты на основе документов Google о том, как создавать и аудио приложения https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app

Я хотел бы добавить эквалайзер, например этот https://github.com/Yalantis/Horizon, но я не могу найти, как получить необходимую информацию, я никогда раньше не работал со звуком, поэтому я немного потерялся.

Согласно документам, я должен сначала: "инициализировать Объект Horizon с параметрами, относящимися к вашему звуку: "

    mHorizon = Horizon(
        glSurfaceView, ResourcesCompat.getColor(resources, R.color.grey2),
        RECORDER_SAMPLE_RATE, RECORDER_CHANNELS, RECORDER_ENCODING_BIT //Where to get these 3 constants?
    )

А затем:" для обновления метода Horizon call updateView с фрагментом звуковых данных для продолжения: "

    val buffer = ByteArray(//Where to get the bytes?)
    mHorizon!!.updateView(buffer)

Как я мог получить эти данные? Я просмотрел документацию android, но ничего не нашел.

1 Ответ

0 голосов
/ 20 мая 2020

Вам нужно добавить настраиваемый RendererFactory в Exoplayer, чтобы получать байты звука. См. Код ниже:

   val rendererFactory = RendererFactory(this, object : TeeAudioProcessor.AudioBufferSink {

            override fun flush(sampleRateHz: Int, channelCount: Int, encoding: Int) {
            }

            override fun handleBuffer(buffer: ByteBuffer) {
                //pass bytes to the your function
            }

        })
   exoPlayer = ExoPlayerFactory.newSimpleInstance(this, rendererFactory,DefaultTrackSelector())

Вы получите байты в ByteBuffer, чтобы преобразовать его в ByteArray, используйте код ниже:

  try{
    val arr = ByteArray(buffer.remaining())
    buffer[arr] //pass this array to the required function
   }
  catch(exception:Exception)
  {
   // handle exception here
  }
...