يساعدك التراكب الصوتي على تحويل صوت المستخدم إلى نص ، مما يوفر تجربة مستخدم مصقولة أثناء التعامل مع الأذونات اللازمة لك.
ويستخدم داخليًا SFSpeechRecognizer
الأصلي لإجراء تحويل الكلام إلى نص.
يمكنك استنساخ المشروع التجريبي وتشغيله عن طريق pod install
ثم تشغيل المشروع
يعد Swift Package Manager أداة لإدارة توزيع كود Swift. إنه متكامل مع نظام بناء Swift لأتمتة عملية تنزيل التبعيات وتجميعها وربطها.
لاستخدام SwiftPM، يجب عليك استخدام Xcode 11+ لفتح مشروعك. انقر فوق File
-> Swift Packages
-> Add Package Dependency
، وأدخل عنوان URL الخاص بمستودع InstantSearch VoiceOverlay.
إذا كنت مؤلف إطار عمل وتستخدم VoiceOverlay باعتباره تابعًا، فقم بتحديث ملف Package.swift
الخاص بك:
let package = Package (
// 1.1.0 ..< 2.0.0
dependencies : [
. package ( url : " https://github.com/algolia/voice-overlay-ios " , from : " 1.1.0 " )
] ,
// ...
)
InstantSearchVoiceOverlay
متاح من خلال CocoaPods. لتثبيته، أضف السطر التالي إلى ملف Podfile الخاص بك:
pod 'InstantSearchVoiceOverlay' , '~> 1.1.0'
قرطاج هو مدير تبعية بسيط ولامركزي للكاكاو.
لتثبيت InstantSearchVoiceOverlay، أضف السطر التالي إلى ملف Cartfile الخاص بك:
github "algolia/voice-overlay-ios" ~> 1.1 . 0
Info.plist
، قم بإضافة هاتين الخاصيتين مع الوصفPrivacy - Microphone Usage Description
مع وصف مثل: Need the mic for audio to text
Privacy - Speech Recognition Usage Description
بعض الأوصاف مثل: Need the speech recognition capabilities for searching tags
import InstantSearchVoiceOverlay
class ViewController : UIViewController {
let voiceOverlayController = VoiceOverlayController ( )
@ objc func voiceButtonTapped ( ) {
voiceOverlayController . start ( on : self , textHandler : { ( text , final ) in
print ( " voice output: ( String ( describing : text ) ) " )
print ( " voice output: is it final? ( String ( describing : final ) ) " )
} , errorHandler : { ( error ) in
print ( " voice output: error ( String ( describing : error ) ) " )
} )
}
يمكنك تخصيص تراكب الصوت الخاص بك عن طريق تعديل خاصية settings
الخاصة بـ voiceOverlayController:
/// Specifies whether the overlay directly starts recording (true),
/// or if it requires the user to click the mic (false). Defaults to true.
voiceOverlayController . settings . autoStart = true
/// Specifies whether the overlay stops recording after the user stops talking for `autoStopTimeout`
/// seconds (true), or if it requires the user to click the mic (false). Defaults to true.
voiceOverlayController . settings . autoStop = true
/// When autoStop is set to true, autoStopTimeout determines the amount of
/// silence time of the user that causes the recording to stop. Defaults to 2.
voiceOverlayController . settings . autoStopTimeout = 2
/// The layout and style of all screens of the voice overlay.
voiceOverlayController . settings . layout . < someScreen > . < someConstant >
// Use XCode autocomplete to see all possible screens and constants that are customisable.
// Examples:
/// The voice suggestions that appear in bullet points
voiceOverlayController . settings . layout . inputScreen . subtitleBulletList = [ " Suggestion1 " , " Sug2 " ]
/// Change the title of the input screen when the recording is ongoing.
voiceOverlayController . settings . layout . inputScreen . titleListening = " my custom title "
/// Change the background color of the permission screen.
voiceOverlayController . settings . layout . permissionScreen . backgroundColor = UIColor . red
/// And many more...
يمكنك تغيير اللغة أو SpeechController عند تهيئة voiceOverlayController كما يلي:
lazy var voiceOverlayController : VoiceOverlayController = {
let recordableHandler = {
return SpeechController ( locale : Locale ( identifier : " en_US " ) )
}
return VoiceOverlayController ( speechControllerHandler : recordableHandler )
} ( )
يمكنك إنشاء فئة SpeechController المخصصة الخاصة بك عن طريق تنفيذ البروتوكول Recordable
.
لاحظ أنه في Swift 4، يمكنك استخدام Locale.current.languageCode
للحصول على اللغة الحالية.
اختياريًا، للاستماع إلى أحداث النص والأخطاء، يمكنك التوافق مع طريقة بروتوكول VoiceOverlayDelegate
.
// Second way to listen to recording through delegate
func recording ( text : String ? , final : Bool ? , error : Error ? ) {
if let error = error {
print ( " delegate: error ( error ) " )
}
if error == nil {
print ( " delegate: text ( text ) " )
}
}
عندما تكون هناك أذونات مفقودة، سيرشد التراكب الصوتي المستخدم إلى القسم الصحيح من تطبيق الإعدادات.
تظهر شاشة النتيجة عند ضبط showResultScreen
على القيمة true.
/// Whether or not to show a result screen after the recording is finished.
voiceOverlayController . settings . showResultScreen = true
/// Timeout for showing the result screen in case no resultScreenText is provided on time.
voiceOverlayController . settings . showResultScreenTimeout = 2
/// Time for showing the result screen with the provided resultScreenText.
voiceOverlayController . settings . showResultScreenTime = 4
/// The processed result screen text that should be appear in the result screen.
voiceOverlayController . settings . resultScreenText = NSAttributedString ( string : myString , attributes : myAttributes )
يوفر عنصر واجهة المستخدم resultScreenHandler
عند إغلاق شاشة النتيجة (شريطة عدم النقر فوق الزر "البدء مرة أخرى"). يوفر المعالج النص الذي تم تعيينه في resultScreenText
مسبقًا.
voiceOverlayController . start ( on : self , textHandler : { ( text , final ) in
print ( " getting ( String ( describing : text ) ) " )
print ( " is it final? ( String ( describing : final ) ) " )
if final {
// Process the result to post in the result screen.
// The timer here simulates a network processing call that took 1.5 seconds.
Timer . scheduledTimer ( withTimeInterval : 1.5 , repeats : false , block : { ( _ ) in
let myString = text
let myAttribute = [ NSAttributedString . Key . foregroundColor : UIColor . red ]
let myAttrString = NSAttributedString ( string : myString , attributes : myAttribute )
self . voiceOverlayController . settings . resultScreenText = myAttrString
} )
}
} , errorHandler : { ( error ) in
print ( " error ( String ( describing : error ) ) " )
} , resultScreenHandler : { ( text ) in
print ( " Result Screen: ( text ) " )
} )
InstantSearchVoiceOverlay متاح بموجب ترخيص MIT. راجع ملف الترخيص لمزيد من المعلومات.