SwiftWhisper
1.2.0
在Swift中使用耳语的最简单方法
轻松地将转录添加到您的应用程序或软件包中。由Whisper.cpp提供动力。
添加swiftwhisper作为Package.swift中的依赖性。旋转文件:
let package = Package (
...
dependencies : [
// Add the package to your dependencies
. package ( url : " https://github.com/exPHAT/SwiftWhisper.git " , branch : " master " ) ,
] ,
...
targets : [
// Add SwiftWhisper as a dependency on any target you want to use it in
. target ( name : " MyTarget " ,
dependencies : [ . byName ( name : " SwiftWhisper " ) ] )
]
...
) 添加https://github.com/exPHAT/SwiftWhisper.git在“ Swift Package Manager”选项卡中。
API文档。
import SwiftWhisper
let whisper = Whisper ( fromFileURL : /* Model file URL */ )
let segments = try await whisper . transcribe ( audioFrames : /* 16kHz PCM audio frames */ )
print ( " Transcribed audio: " , segments . map ( . text ) . joined ( ) ) 您可以通过实现WhisperDelegate并设置whisper.delegate = ...来订阅细分市场,转录进度和错误。
protocol WhisperDelegate {
// Progress updates as a percentage from 0-1
func whisper ( _ aWhisper : Whisper , didUpdateProgress progress : Double )
// Any time a new segments of text have been transcribed
func whisper ( _ aWhisper : Whisper , didProcessNewSegments segments : [ Segment ] , atIndex index : Int )
// Finished transcribing, includes all transcribed segments of text
func whisper ( _ aWhisper : Whisper , didCompleteWithSegments segments : [ Segment ] )
// Error with transcription
func whisper ( _ aWhisper : Whisper , didErrorWith error : Error )
} 您可以在此处找到预先训练的模型以供下载。
要使用Coreml,您需要将Coreml型号文件与后缀-encoder.mlmodelc一起使用与窃窃私语模型相同的名称(例如: tiny.bin也会坐在一个tiny-encoder.mlmodelc文件旁边)。除了附加模型文件之外,您还需要使用Whisper(fromFileURL:) initializer。您可以通过在转录过程中检查控制台输出来验证Coreml活跃。
将音频帧进入SwiftWhisper的最简单方法是使用电听器。以下示例将输入音频文件,转换和重新示例,并返回16kHz PCM浮子的数组。
import AudioKit
func convertAudioFileToPCMArray ( fileURL : URL , completionHandler : @escaping ( Result < [ Float ] , Error > ) -> Void ) {
var options = FormatConverter . Options ( )
options . format = . wav
options . sampleRate = 16000
options . bitDepth = 16
options . channels = 1
options . isInterleaved = false
let tempURL = URL ( fileURLWithPath : NSTemporaryDirectory ( ) ) . appendingPathComponent ( UUID ( ) . uuidString )
let converter = FormatConverter ( inputURL : fileURL , outputURL : tempURL , options : options )
converter . start { error in
if let error {
completionHandler ( . failure ( error ) )
return
}
let data = try ! Data ( contentsOf : tempURL ) // Handle error here
let floats = stride ( from : 44 , to : data . count , by : 2 ) . map {
return data [ $0 ..< $0 + 2 ] . withUnsafeBytes {
let short = Int16 ( littleEndian : $0 . load ( as : Int16 . self ) )
return max ( - 1.0 , min ( Float ( short ) / 32767.0 , 1.0 ) )
}
}
try ? FileManager . default . removeItem ( at : tempURL )
completionHandler ( . success ( floats ) )
}
}在编译应用程序以进行Debug构建配置时,您可能会发现转录速度的性能慢。这是因为除非设置构建Release ,否则编译器不会完全优化Swiftwhisper。
您可以通过安装使用.unsafeFlags(["-O3"])的SwiftWhisper版本来解决此问题。最简单的方法是在fast分支上使用最新的提交。另外,您可以配置您的方案以在Release配置中构建。
...
dependencies: [
// Using latest commit hash for `fast` branch:
. package ( url : " https://github.com/exPHAT/SwiftWhisper.git " , revision : " deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01 " ) ,
] ,
...