Der einfachste Weg, Flüstern in Swift zu verwenden
Fügen Sie Ihrer App oder Ihrem Paket einfach Transkription hinzu. Angetrieben von flüster.cpp.
Fügen Sie Swiftwhisper als Abhängigkeit in Ihr Package.swift hinzu.
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 " ) ] )
]
...
) Fügen Sie https://github.com/exPHAT/SwiftWhisper.git auf der Registerkarte "Swift Paket Manager" hinzu.
API -Dokumentation.
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 ( ) ) Sie können Segmente, Transkriptionsfortschritte und Fehler abonnieren, indem Sie WhisperDelegate implementieren und flüstert 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 )
} Sie finden die vorgeborenen Modelle hier zum Download.
Um COREML zu verwenden, müssen Sie eine COREML -Modelldatei mit dem Suffix -encoder.mlmodelc unter demselben Namen wie das Whisper -Modell einfügen (Beispiel: tiny.bin würde auch neben einer tiny-encoder.mlmodelc -Datei sitzen). Zusätzlich zur Additonal -Modelldatei müssen Sie auch das Whisper(fromFileURL:) Initializer verwenden. Sie können überprüfen, ob Coreml aktiv ist, indem Sie die Konsolenausgabe während der Transkription überprüfen.
Der einfachste Weg, Audio -Frames in Swiftwhisper zu bringen, besteht darin, Audiokit zu verwenden. Das folgende Beispiel enthält eine Eingangs -Audio -Datei, konvertiert und resamiert sie neu und gibt ein Array von 16 -kHz -PCM -Schwimmer zurück.
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 ) )
}
} Möglicherweise finden Sie die Leistung der Transkription langsam, wenn Sie Ihre App für die Debug -Build -Konfiguration zusammenstellen. Dies liegt daran, dass der Compiler Swiftwhisper nicht vollständig optimiert, es sei denn, die Build -Konfiguration ist auf Release eingestellt.
Sie können dies umgehen, indem Sie eine Version von Swiftwhisper installieren, die .unsafeFlags(["-O3"]) verwendet, um die maximale Optimierung zu erzwingen. Der einfachste Weg, dies zu tun, besteht darin, den neuesten Commit in The fast Branch zu nutzen. Alternativ können Sie Ihr Schema so konfigurieren, dass sie in der Release -Konfiguration erstellt werden.
...
dependencies: [
// Using latest commit hash for `fast` branch:
. package ( url : " https://github.com/exPHAT/SwiftWhisper.git " , revision : " deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01 " ) ,
] ,
...