diff --git a/Sources/SwiftWhisper/Whisper.swift b/Sources/SwiftWhisper/Whisper.swift index 520c8b9..360b16a 100644 --- a/Sources/SwiftWhisper/Whisper.swift +++ b/Sources/SwiftWhisper/Whisper.swift @@ -40,6 +40,7 @@ public class Whisper { self.unmanagedSelf = unmanagedSelf params.new_segment_callback_user_data = unmanagedSelf.toOpaque() params.encoder_begin_callback_user_data = unmanagedSelf.toOpaque() + params.progress_callback_user_data = unmanagedSelf.toOpaque() // swiftlint:disable line_length params.new_segment_callback = { (ctx: OpaquePointer?, _: OpaquePointer?, newSegmentCount: Int32, userData: UnsafeMutableRawPointer?) in @@ -66,17 +67,6 @@ public class Whisper { )) } - if let frameCount = whisper.frameCount, - let lastSegmentTime = newSegments.last?.endTime { - - let fileLength = Double(frameCount * 1000) / Double(WHISPER_SAMPLE_RATE) - let progress = Double(lastSegmentTime) / Double(fileLength) - - DispatchQueue.main.async { - delegate.whisper(whisper, didUpdateProgress: progress) - } - } - DispatchQueue.main.async { delegate.whisper(whisper, didProcessNewSegments: newSegments, atIndex: Int(startIndex)) } @@ -92,6 +82,15 @@ public class Whisper { return true } + + params.progress_callback = { (_: OpaquePointer?, _: OpaquePointer?, progress: Int32, userData: UnsafeMutableRawPointer?) in + guard let userData else { return } + let whisper = Unmanaged.fromOpaque(userData).takeUnretainedValue() + + DispatchQueue.main.async { + whisper.delegate?.whisper(whisper, didUpdateProgress: Double(progress) / 100) + } + } } private func cleanupCallbacks() { diff --git a/whisper.cpp b/whisper.cpp index 42c6855..95b02d7 160000 --- a/whisper.cpp +++ b/whisper.cpp @@ -1 +1 @@ -Subproject commit 42c6855103e514c6534bb0b52a56af4a7c978b89 +Subproject commit 95b02d76b04d18e4ce37ed8353a1f0797f1717ea