David Liu

audio touch ups

@@ -32,7 +32,9 @@ class LiveKit { @@ -32,7 +32,9 @@ class LiveKit {
32 if (localParticipant != null) { 32 if (localParticipant != null) {
33 val factory = component.peerConnectionFactory() 33 val factory = component.peerConnectionFactory()
34 if (options.sendAudio) { 34 if (options.sendAudio) {
35 - localParticipant.publishAudioTrack(createLocalAudioTrack(factory)) 35 + val audioTrack = createLocalAudioTrack(factory)
  36 + localParticipant.publishAudioTrack(audioTrack)
  37 + audioTrack.enabled = true
36 } 38 }
37 if (options.sendVideo) { 39 if (options.sendVideo) {
38 val videoTrack = createLocalVideoTrack( 40 val videoTrack = createLocalVideoTrack(
@@ -77,6 +77,13 @@ class RTCModule { @@ -77,6 +77,13 @@ class RTCModule {
77 } 77 }
78 78
79 return JavaAudioDeviceModule.builder(appContext) 79 return JavaAudioDeviceModule.builder(appContext)
  80 + .setSamplesReadyCallback(object : JavaAudioDeviceModule.SamplesReadyCallback {
  81 + override fun onWebRtcAudioRecordSamplesReady(samples: JavaAudioDeviceModule.AudioSamples?) {
  82 + Timber.v { "samples: $samples" }
  83 + }
  84 + })
  85 + .setUseHardwareAcousticEchoCanceler(true)
  86 + .setUseHardwareNoiseSuppressor(true)
80 .setAudioRecordErrorCallback(audioRecordErrorCallback) 87 .setAudioRecordErrorCallback(audioRecordErrorCallback)
81 .setAudioTrackErrorCallback(audioTrackErrorCallback) 88 .setAudioTrackErrorCallback(audioTrackErrorCallback)
82 .setAudioRecordStateCallback(audioRecordStateCallback) 89 .setAudioRecordStateCallback(audioRecordStateCallback)
@@ -2,12 +2,19 @@ package io.livekit.android.room.track @@ -2,12 +2,19 @@ package io.livekit.android.room.track
2 2
3 import org.webrtc.MediaConstraints 3 import org.webrtc.MediaConstraints
4 import org.webrtc.PeerConnectionFactory 4 import org.webrtc.PeerConnectionFactory
  5 +import java.util.*
5 6
6 class LocalAudioTrack( 7 class LocalAudioTrack(
7 name: String, 8 name: String,
8 audioOptions: AudioOptions? = null, 9 audioOptions: AudioOptions? = null,
9 rtcTrack: org.webrtc.AudioTrack 10 rtcTrack: org.webrtc.AudioTrack
10 ) : AudioTrack(name, rtcTrack) { 11 ) : AudioTrack(name, rtcTrack) {
  12 + var enabled: Boolean
  13 + get() = rtcTrack.enabled()
  14 + set(value) {
  15 + rtcTrack.setEnabled(value)
  16 + }
  17 +
11 var sid: Sid? = null 18 var sid: Sid? = null
12 internal set 19 internal set
13 var audioOptions = audioOptions 20 var audioOptions = audioOptions
@@ -22,8 +29,7 @@ class LocalAudioTrack( @@ -22,8 +29,7 @@ class LocalAudioTrack(
22 29
23 val audioSource = factory.createAudioSource(audioConstraints) 30 val audioSource = factory.createAudioSource(audioConstraints)
24 val rtcAudioTrack = 31 val rtcAudioTrack =
25 - factory.createAudioTrack("phone_audio_track_id", audioSource)  
26 - rtcAudioTrack.setEnabled(true) 32 + factory.createAudioTrack(UUID.randomUUID().toString(), audioSource)
27 33
28 return LocalAudioTrack(name = name, rtcTrack = rtcAudioTrack) 34 return LocalAudioTrack(name = name, rtcTrack = rtcAudioTrack)
29 } 35 }
@@ -74,7 +74,8 @@ class CallActivity : AppCompatActivity() { @@ -74,7 +74,8 @@ class CallActivity : AppCompatActivity() {
74 } 74 }
75 val result = audioManager.requestAudioFocus( 75 val result = audioManager.requestAudioFocus(
76 { }, 76 { },
77 - AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN 77 + AudioManager.STREAM_VOICE_CALL,
  78 + AudioManager.AUDIOFOCUS_GAIN,
78 ) 79 )
79 if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 80 if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
80 Timber.v { "Audio focus request granted for VOICE_CALL streams" } 81 Timber.v { "Audio focus request granted for VOICE_CALL streams" }