Cara termudah untuk menggunakan bisikan di Swift
Mudah menambahkan transkripsi ke aplikasi atau paket Anda. Didukung oleh Whisper.cpp.
Tambahkan Swiftwhisper sebagai ketergantungan dalam file Package.swift Anda.
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 " ) ] )
]
...
) Tambahkan https://github.com/exPHAT/SwiftWhisper.git di tab "Swift Package Manager".
Dokumentasi 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 ( ) ) Anda dapat berlangganan segmen, kemajuan transkripsi, dan kesalahan dengan mengimplementasikan WhisperDelegate dan mengatur 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 )
} Anda dapat menemukan model pra-terlatih di sini untuk diunduh.
Untuk menggunakan COREML, Anda harus memasukkan file model COREML dengan sufiks -encoder.mlmodelc dengan nama yang sama dengan model Whisper (Contoh: tiny.bin juga akan duduk di samping file tiny-encoder.mlmodelc ). Selain file model additonal, Anda juga perlu menggunakan Whisper(fromFileURL:) Initializer. Anda dapat memverifikasi COREML aktif dengan memeriksa output konsol selama transkripsi.
Cara termudah untuk memasukkan bingkai audio ke Swiftwhisper adalah dengan menggunakan Audiokit. Contoh berikut mengambil file audio input, mengonversi dan meresampingkannya, dan mengembalikan array 16kHz pcm float.
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 ) )
}
} Anda mungkin menemukan kinerja transkripsi lambat saat menyusun aplikasi Anda untuk konfigurasi Debug Build. Ini karena kompiler tidak sepenuhnya mengoptimalkan Swiftwhisper kecuali konfigurasi build diatur untuk Release .
Anda dapat menyiasati ini dengan memasang versi Swiftwhisper yang menggunakan .unsafeFlags(["-O3"]) untuk memaksa optimasi maksimal. Cara termudah untuk melakukan ini adalah dengan menggunakan komit terbaru di cabang fast . Atau, Anda dapat mengonfigurasi skema Anda untuk membangun konfigurasi Release .
...
dependencies: [
// Using latest commit hash for `fast` branch:
. package ( url : " https://github.com/exPHAT/SwiftWhisper.git " , revision : " deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01 " ) ,
] ,
...