أسهل طريقة لاستخدام الهمس في سريع
إضافة نسخ بسهولة إلى تطبيقك أو الحزمة. مدعوم من 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:) المهيئة. يمكنك التحقق من COREML نشط عن طريق التحقق من إخراج وحدة التحكم أثناء النسخ.
أسهل طريقة للحصول على إطارات صوتية في SwiftWhisper هي استخدام Audiokit. يأخذ المثال التالي ملف صوت إدخال ، ويقوم بتحويله وإعادة تصميمه ، ويعيد مجموعة من عوامات PCM 16 كيلو هرتز.
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 . وذلك لأن المترجم لا يحسن بالكامل SwiftWhisper ما لم يتم تعيين تكوين الإنشاء على Release .
يمكنك الالتفاف على هذا من خلال تثبيت إصدار من SwiftWhisper الذي يستخدم .unsafeFlags(["-O3"]) لفرض الحد الأقصى للتحسين. أسهل طريقة للقيام بذلك هي استخدام أحدث الالتزام على الفرع fast . بدلاً من ذلك ، يمكنك تكوين مخططك للبناء في تكوين Release .
...
dependencies: [
// Using latest commit hash for `fast` branch:
. package ( url : " https://github.com/exPHAT/SwiftWhisper.git " , revision : " deb1cb6a27256c7b01f5d3d2e7dc1dcc330b5d01 " ) ,
] ,
...