Как реализовать звуковые волны в Android с помощью ZEGOCLOUD SDK

Введение

В караоке-сцене часто возникает необходимость извлечь несколько потоков и отобразить говорящего пользователя. Нам нужно определить, говорит ли пользователь, громкость речи (звуковую волну) и отобразить ее на пользовательском интерфейсе.

SDK предоставляет следующие два метода для достижения этой функции:

Уровень звука относится к громкости потока. ZEGO Express SDK обеспечивает возможность захвата уровня звука потока в реальном времени и передает захваченные данные об уровне звука клиенту приложения через соответствующие обратные вызовы. Типичным примером использования этой функции является визуализация данных об уровне звука в пользовательском интерфейсе приложения для указания текущего активного динамика и его громкости. На следующем рисунке показан пример такого использования.

Под звуковым спектром понимается ряд значений, каждое из которых представляет собой уровень энергии аудиосигнала в определенной точке частотного диапазона. ZEGO Express SDK предоставляет возможность захвата данных аудиоспектра потока в реальном времени и доставки захваченных данных аудиоспектра клиенту приложения через соответствующие обратные вызовы. Типичным примером использования этой функции является создание и отображение визуализатора аудиоспектра в пользовательском интерфейсе приложения, особенно в приложениях для онлайн-караоке. На следующем рисунке показан пример визуализатора звукового спектра.

Предварительные условия

Прежде чем начать использовать уровень звука и звуковой спектр в своем проекте, выполните следующие шаги:

  • Создайте проект в ZEGOCLOUD Admin Console и получите AppID вашего проекта.
  • В проект интегрирован ZEGO Express SDK. Подробности см. в разделе Интеграция и внедрение.

Включение обратных вызовов уровня звука

Чтобы включить обратные вызовы уровня звука, вызовите метод startSoundLevelMonitor.

// mSDKEnging is an instance of ZegoExpressEngine
mSDKEnging.startSoundLevelMonitor();
Вход в полноэкранный режим Выйдите из полноэкранного режима

После завершения вышеописанного шага:

  • Когда вы начнете предварительный просмотр локального видео, вызвав метод startPreview или публикацию локального потока, вызвав метод startPublishingStream, SDK будет запускать обратный вызов onCapturedSoundLevelUpdate с интервалом в 100 мс для доставки данных об уровне звука локально захваченного аудио.
/**
    * The callback to deliver the sound level data of locally captured audio.
    *
    * The callback sends out a notification at an interval of 100 ms.
    * @param soundLevel: The sound level value of the locally captured audio, which is in the range [0.0, 100.0].
    */
public void onCapturedSoundLevelUpdate(double soundLevel){

}
Вход в полноэкранный режим Выход из полноэкранного режима
  • Когда вы начинаете воспроизводить удаленные потоки, вызывая метод startPlayingStream, SDK будет запускать обратный вызов onRemoteSoundLevelUpdate с интервалом в 100 мс для доставки данных об уровне звука удаленных потоков.
/**
    * The callback to deliver the sound level data of remote streams
    *
    * The callback sends out a notification at an interval of 100 ms.
    * @param soundLevels: The sound level data (key-value pairs) of the remote streams, of which the key is a stream ID, and the value is the sound level value of the corresponding stream. Each sound level value is in the range [0.0, 100.0].
    */
public void onRemoteSoundLevelUpdate(HashMap<String, Double> soundLevels){

}
Вход в полноэкранный режим Выход из полноэкранного режима

Включение обратных вызовов звукового спектра

Чтобы включить обратные вызовы звукового спектра, вызовите метод startAudioSpectrumMonitor.

// mSDKEnging is an instance of ZegoExpressEngine
mSDKEnging.startAudioSpectrumMonitor();
Вход в полноэкранный режим Выйдите из полноэкранного режима

После завершения вышеописанного шага:

  • Когда вы начнете предварительный просмотр локального видео, вызвав метод startPreview или публикацию локального потока, вызвав метод startPublishingStream, SDK будет запускать обратный вызовonCapturedAudioSpectrumUpdate` с интервалом в 100 мс для доставки данных аудиоспектра локально захваченного звука.

`

/**
    * The callback to deliver the audio spectrum data of locally captured audio
    *
    * The callback sends out a notification at an interval of 100 ms.
    * @param audioSpectrum: An array of audio spectrum values of the locally captured audio. Each audio spectrum value is in the range [0, 2^30].
    */
public void onCapturedAudioSpectrumUpdate(float[] audioSpectrum){

}
Вход в полноэкранный режим Выход из полноэкранного режима

`

  • Когда вы начинаете воспроизводить удаленные потоки, вызывая метод startPlayingStream, SDK будет запускать обратный вызов onRemoteAudioSpectrumUpdate с интервалом в 100 мс для доставки данных аудиоспектра удаленных потоков.

`

/**
    * The callback to deliver the audio spectrum data of remote streams
    *
    * The callback sends out a notification at an interval of 100 ms.
    * @param audioSpectrums: The audio spectrum data (key-value pairs) of remote streams, of which the key is a stream ID, and the value is an array of audio spectrum values of the corresponding stream. Each audio spectrum value is in the range [0, 2^30].
    */
public void onRemoteAudioSpectrumUpdate(HashMap<String, float[]> audioSpectrums){

}
Вход в полноэкранный режим Выход из полноэкранного режима

`

Получение данных из обратных вызовов

SDK предоставляет данные об уровне звука и аудиоспектре удаленных потоков в виде пар ключ-значение в HashMap. В каждой паре ключ-значение ключом является идентификатор потока удаленного потока, опубликованного другим пользователем в той же комнате, а значением — значение уровня звука или массив значений аудиоспектра этого потока.

Вы можете сначала получить и сохранить список удаленных потоков, опубликованных другими пользователями в текущей комнате, с помощью обратного вызова onRoomStreamUpdate, а затем использовать каждый идентификатор потока в списке в качестве индекса для получения значения уровня звука или данных аудиоспектра этого потока из HashMap.

В следующих примерах показано, как получить данные уровня звука и аудиоспектра из обратных вызовов. О том, как отобразить данные в пользовательском интерфейсе приложения, см. пример кода, упомянутый в разделе 2 выше.

`

class MyEventHandler extends IZegoEventHandler
{
    @override
    public void onCapturedSoundLevelUpdate(double soundLevel) {
        // Obtain the sound level data of locally captured audio and render it to specific UI controls.
    }
    @override
    public void onRemoteSoundLevelUpdate(HashMap<String, Double> soundLevels) {
        // Obtain the sound level data of remote streams and render it to specific UI controls.
    }
    @override
    public void onCapturedAudioSpectrumUpdate(double[] audioSpectrum) {
        // Obtain the audio spectrum data of locally captured audio and render it to specific UI controls.
    }
    @override
    public void onRemoteAudioSpectrumUpdate(HashMap<String, double[]> audioSpectrums) {
        // Obtain the audio spectrum data (key-value pairs) of the remote streams and render it to specific UI controls.
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

`

Отключение обратных вызовов уровня звука

Чтобы отключить обратные вызовы уровня звука, вызовите метод stopSoundLevelMonitor.

`

// mSDKEnging is an instance of ZegoExpressEngine
mSDKEnging.stopSoundLevelMonitor();
Вход в полноэкранный режим Выход из полноэкранного режима

`

После выполнения этого шага SDK перестанет запускать обратные вызовы onCapturedSoundLevelUpdate и onRemoteSoundLevelUpdate.

Отключите обратные вызовы звукового спектра

Чтобы отключить обратные вызовы аудиоспектра, вызовите метод stopAudioSpectrumMonitor.

`

// mSDKEnging is an instance of ZegoExpressEngine
mSDKEnging.stopAudioSpectrumMonitor();
Вход в полноэкранный режим Выход из полноэкранного режима

`

После выполнения этого шага SDK перестанет запускать обратные вызовы onCapturedAudioSpectrumUpdate и onRemoteAudioSpectrumUpdate.

Оцените статью
Procodings.ru
Добавить комментарий