Трансляция только необработанных аудиоданных без использования микрофона или динамика - PullRequest
0 голосов
/ 04 января 2019

Я могу транслировать аудио только с помощью микрофона и динамика, и если я использую метод setExternalAudioSource, то трансляция сталкивается с сильным нежелательным шумом. Я просто хочу транслировать только необработанные аудиоданные без использования микрофона, динамика и нежелательных шумов.

 private val PERMISSION_REQ_ID_RECORD_AUDIO = 22
private var mRtcEngine: RtcEngine? = null// Tutorial Step 1
private val mRtcEventHandler = object : IRtcEngineEventHandler() { // Tutorial Step 1

    override fun onUserOffline(uid: Int, reason: Int) { // Tutorial Step 4
        //runOnUiThread { onRemoteUserLeft(uid, reason) }
    }

    override fun onUserMuteAudio(uid: Int, muted: Boolean) { // Tutorial Step 6
        // runOnUiThread { onRemoteUserVoiceMuted(uid, muted) }
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    if (checkSelfPermission(Manifest.permission.RECORD_AUDIO, PERMISSION_REQ_ID_RECORD_AUDIO)) {
        createRtcChannel()
    }

}

fun checkSelfPermission(permission: String, requestCode: Int): Boolean {
    if (ContextCompat.checkSelfPermission(this,
                    permission) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this,
                arrayOf(permission),
                requestCode)
        return false
    }
    return true
}

private fun createRtcChannel() {
    initializeAgoraEngine()     // Tutorial Step 1
    joinChannel()
}

private fun initializeAgoraEngine() {
    try {
        mRtcEngine = RtcEngine.create(this, getString(R.string.agora_app_id), mRtcEventHandler)
        //set the channel as live broadcast mode
        mRtcEngine?.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING)
        mRtcEngine?.setClientRole(Constants.CLIENT_ROLE_BROADCASTER)
    } catch (e: Exception) {

    }
}

private fun joinChannel() {
    mRtcEngine?.joinChannel(null, "voiceDemoChannel1", "Extra Optional Data", 0) // if you do not specify the uid, we will generate the uid for you

    val payload = IOUtils.toByteArray(assets.openFd("ringtone.mp3").createInputStream())

    mRtcEngine?.setExternalAudioSource(
            true,      
            8000,     
            1     );

    mRtcEngine?.pushExternalAudioFrame(
            payload,
            1000
    )

}

Возможно ли это с помощью агоры или есть альтернатива?

1 Ответ

0 голосов
/ 05 января 2019

Причины могут вызвать шум:

  1. Ваши исходные аудио сэмплы PCM шумят сами по себе
  2. Ошибка двигателя
  3. Неверная частота дискретизации

Для первого вы можете проверить ваши образцы PCM напрямую. Для 2-го, поскольку уже используется много людей, это редко, чтобы быть правдой. Поэтому я бы посоветовал вам проверить частоту дискретизации, если вы уверены, что ваши исходные образцы PCM хороши.

Кроме того, вы можете настроить параметр APM перед подключением к каналу, чтобы включить улучшение звука для внешнего источника, с помощью

setParameters("{\"che.audio.override_apm\":true}")
...