@@ -158,12 +158,9 @@ open class VoiceChatViewModel<CustomContent: View>: NSObject, AVAudioRecorderDel
158158 audioPlayer. delegate = self
159159 audioPlayer. play ( )
160160
161- animationTimer = Timer . scheduledTimer ( withTimeInterval: 0.2 , repeats: true , block: { [ unowned self] _ in
162- guard self . audioPlayer != nil else { return }
163- self . audioPlayer. updateMeters ( )
164- let power = min ( 1 , max ( 0 , 1 - abs( Double ( self . audioPlayer. averagePower ( forChannel: 0 ) ) / 160 ) ) )
165- self . audioPower = power
166- } )
161+ // Scheduled timer interval cause wave view to not updated when scrolling as audio plays
162+ // Use GCD after with recursion until further cleaner solution can be found
163+ self . scheduleAudioPlayerPowerUpdate ( )
167164 }
168165
169166 open func cancelRecording( ) {
@@ -196,6 +193,16 @@ open class VoiceChatViewModel<CustomContent: View>: NSObject, AVAudioRecorderDel
196193 }
197194 }
198195
196+ func scheduleAudioPlayerPowerUpdate( ) {
197+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.2 ) {
198+ guard let audioPlayer = self . audioPlayer else { return }
199+ audioPlayer. updateMeters ( )
200+ let power = min ( 1 , max ( 0 , 1 - abs( Double ( audioPlayer. averagePower ( forChannel: 0 ) ) / 160 ) ) )
201+ self . audioPower = power
202+ self . scheduleAudioPlayerPowerUpdate ( )
203+ }
204+ }
205+
199206 open func resetValues( ) {
200207 audioPower = 0
201208 prevAudioPower = nil
0 commit comments