1- /*
2- * Copyright 2025 LiveKit
3- *
4- * Licensed under the Apache License, Version 2.0 (the "License");
5- * you may not use this file except in compliance with the License.
6- * You may obtain a copy of the License at
7- *
8- * http://www.apache.org/licenses/LICENSE-2.0
9- *
10- * Unless required by applicable law or agreed to in writing, software
11- * distributed under the License is distributed on an "AS IS" BASIS,
12- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13- * See the License for the specific language governing permissions and
14- * limitations under the License.
15- */
16-
171import AVFAudio
182import AVFoundation
193import React
204import livekit_react_native_webrtc
215
22- enum LKEvents {
6+ struct LKEvents {
237 static let kEventVolumeProcessed = " LK_VOLUME_PROCESSED "
248 static let kEventMultibandProcessed = " LK_MULTIBAND_PROCESSED "
259 static let kEventAudioData = " LK_AUDIO_DATA "
2610}
2711
2812@objc ( LivekitReactNativeModule)
2913public class LivekitReactNativeModule : RCTEventEmitter {
14+
3015 // This cannot be initialized in init as self.bridge is given afterwards.
31- private var _audioRendererManager : AudioRendererManager ?
16+ private var _audioRendererManager : AudioRendererManager ? = nil
3217 public var audioRendererManager : AudioRendererManager {
3318 if _audioRendererManager == nil {
34- _audioRendererManager = AudioRendererManager ( bridge: bridge)
19+ _audioRendererManager = AudioRendererManager ( bridge: self . bridge)
3520 }
3621
3722 return _audioRendererManager!
3823 }
3924
4025 @objc
41- override public init ( ) {
26+ public override init ( ) {
4227 super. init ( )
4328 let config = RTCAudioSessionConfiguration ( )
4429 config. category = AVAudioSession . Category. playAndRecord. rawValue
@@ -50,7 +35,7 @@ public class LivekitReactNativeModule: RCTEventEmitter {
5035
5136 @objc
5237 override public static func requiresMainQueueSetup( ) -> Bool {
53- false
38+ return false
5439 }
5540
5641 @objc
@@ -133,7 +118,7 @@ public class LivekitReactNativeModule: RCTEventEmitter {
133118 }
134119
135120 @objc ( getAudioOutputsWithResolver: withRejecter: )
136- public func getAudioOutputs( resolve: RCTPromiseResolveBlock , reject _ : RCTPromiseRejectBlock ) {
121+ public func getAudioOutputs( resolve: RCTPromiseResolveBlock , reject: RCTPromiseRejectBlock ) {
137122 resolve ( [ " default " , " force_speaker " ] )
138123 }
139124
@@ -170,15 +155,15 @@ public class LivekitReactNativeModule: RCTEventEmitter {
170155 session. unlockForConfiguration ( )
171156 }
172157
173- if let appleAudioCategory {
158+ if let appleAudioCategory = appleAudioCategory {
174159 config. category = AudioUtils . audioSessionCategoryFromString ( appleAudioCategory) . rawValue
175160 }
176161
177- if let appleAudioCategoryOptions {
162+ if let appleAudioCategoryOptions = appleAudioCategoryOptions {
178163 config. categoryOptions = AudioUtils . audioSessionCategoryOptionsFromStrings ( appleAudioCategoryOptions)
179164 }
180165
181- if let appleAudioMode {
166+ if let appleAudioMode = appleAudioMode {
182167 config. mode = AudioUtils . audioSessionModeFromString ( appleAudioMode) . rawValue
183168 }
184169
@@ -189,40 +174,41 @@ public class LivekitReactNativeModule: RCTEventEmitter {
189174 reject ( " setAppleAudioConfiguration " , " Error setting category: \( error. localizedDescription) " , error)
190175 return
191176 }
177+
192178 }
193179
194180 @objc ( createAudioSinkListener: trackId: )
195181 public func createAudioSinkListener( _ pcId: NSNumber , trackId: String ) -> String {
196182 let renderer = AudioSinkRenderer ( eventEmitter: self )
197- let reactTag = audioRendererManager. registerRenderer ( renderer)
183+ let reactTag = self . audioRendererManager. registerRenderer ( renderer)
198184 renderer. reactTag = reactTag
199- audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
185+ self . audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
200186
201187 return reactTag
202188 }
203189
204190 @objc ( deleteAudioSinkListener: pcId: trackId: )
205191 public func deleteAudioSinkListener( _ reactTag: String , pcId: NSNumber , trackId: String ) -> Any ? {
206- audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
207- audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
192+ self . audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
193+ self . audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
208194
209195 return nil
210196 }
211197
212198 @objc ( createVolumeProcessor: trackId: )
213199 public func createVolumeProcessor( _ pcId: NSNumber , trackId: String ) -> String {
214200 let renderer = VolumeAudioRenderer ( intervalMs: 40.0 , eventEmitter: self )
215- let reactTag = audioRendererManager. registerRenderer ( renderer)
201+ let reactTag = self . audioRendererManager. registerRenderer ( renderer)
216202 renderer. reactTag = reactTag
217- audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
203+ self . audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
218204
219205 return reactTag
220206 }
221207
222208 @objc ( deleteVolumeProcessor: pcId: trackId: )
223209 public func deleteVolumeProcessor( _ reactTag: String , pcId: NSNumber , trackId: String ) -> Any ? {
224- audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
225- audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
210+ self . audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
211+ self . audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
226212
227213 return nil
228214 }
@@ -241,17 +227,17 @@ public class LivekitReactNativeModule: RCTEventEmitter {
241227 intervalMs: intervalMs,
242228 eventEmitter: self
243229 )
244- let reactTag = audioRendererManager. registerRenderer ( renderer)
230+ let reactTag = self . audioRendererManager. registerRenderer ( renderer)
245231 renderer. reactTag = reactTag
246- audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
232+ self . audioRendererManager. attach ( renderer: renderer, pcId: pcId, trackId: trackId)
247233
248234 return reactTag
249235 }
250236
251237 @objc ( deleteMultibandVolumeProcessor: pcId: trackId: )
252238 public func deleteMultibandVolumeProcessor( _ reactTag: String , pcId: NSNumber , trackId: String ) -> Any ? {
253- audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
254- audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
239+ self . audioRendererManager. detach ( rendererByTag: reactTag, pcId: pcId, trackId: trackId)
240+ self . audioRendererManager. unregisterRenderer ( forReactTag: reactTag)
255241
256242 return nil
257243 }
@@ -265,7 +251,7 @@ public class LivekitReactNativeModule: RCTEventEmitter {
265251 }
266252
267253 override public func supportedEvents( ) -> [ String ] ! {
268- [
254+ return [
269255 LKEvents . kEventVolumeProcessed,
270256 LKEvents . kEventMultibandProcessed,
271257 LKEvents . kEventAudioData,
0 commit comments