Mithilfe der Sprachüberlagerung können Sie die Stimme Ihres Benutzers in Text umwandeln und so eine ausgefeilte Benutzeroberfläche bereitstellen, während gleichzeitig die erforderlichen Berechtigungen für Sie verwaltet werden.
Es verwendet intern den nativen SFSpeechRecognizer
, um die Konvertierung von Sprache in Text durchzuführen.
Sie können das Demo-Projekt klonen und ausführen, indem Sie pod install
durchführen und dann das Projekt ausführen
Der Swift Package Manager ist ein Tool zur Verwaltung der Verteilung von Swift-Code. Es ist in das Swift-Build-System integriert, um den Prozess des Herunterladens, Kompilierens und Verknüpfens von Abhängigkeiten zu automatisieren.
Um SwiftPM verwenden zu können, sollten Sie Xcode 11+ verwenden, um Ihr Projekt zu öffnen. Klicken Sie auf File
-> Swift Packages
-> Add Package Dependency
und geben Sie die URL des InstantSearch VoiceOverlay-Repositorys ein.
Wenn Sie ein Framework-Autor sind und VoiceOverlay als Abhängigkeit verwenden, aktualisieren Sie Ihre Package.swift
Datei:
let package = Package (
// 1.1.0 ..< 2.0.0
dependencies : [
. package ( url : " https://github.com/algolia/voice-overlay-ios " , from : " 1.1.0 " )
] ,
// ...
)
InstantSearchVoiceOverlay
ist über CocoaPods verfügbar. Um es zu installieren, fügen Sie die folgende Zeile zu Ihrer Poddatei hinzu:
pod 'InstantSearchVoiceOverlay' , '~> 1.1.0'
Carthage ist ein einfacher, dezentraler Abhängigkeitsmanager für Cocoa.
Um InstantSearchVoiceOverlay zu installieren, fügen Sie die folgende Zeile zu Ihrer Cartfile hinzu:
github "algolia/voice-overlay-ios" ~> 1.1 . 0
Info.plist
diese beiden Zeichenfolgeneigenschaften zusammen mit der Beschreibung hinzuPrivacy - Microphone Usage Description
mit einer Beschreibung wie: Need the mic for audio to text
Privacy - Speech Recognition Usage Description
einige Beschreibungen wie: 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 ) ) " )
} )
}
Sie können Ihr Sprach-Overlay anpassen, indem Sie die settings
Eigenschaft des voiceOverlayControllers ändern:
/// 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...
Sie können das Gebietsschema oder den SpeechController ändern, wenn Sie Ihren voiceOverlayController wie folgt initialisieren:
lazy var voiceOverlayController : VoiceOverlayController = {
let recordableHandler = {
return SpeechController ( locale : Locale ( identifier : " en_US " ) )
}
return VoiceOverlayController ( speechControllerHandler : recordableHandler )
} ( )
Sie können Ihre eigene benutzerdefinierte SpeechController-Klasse erstellen, indem Sie das Recordable
-Protokoll implementieren.
Beachten Sie, dass Sie in Swift 4 Locale.current.languageCode
verwenden können, um das aktuelle Gebietsschema abzurufen.
Um Text- und Fehlerereignisse abzuhören, können Sie optional die Methode des VoiceOverlayDelegate
-Protokolls verwenden.
// 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 ) " )
}
}
Bei fehlenden Berechtigungen führt das Sprach-Overlay den Benutzer zum richtigen Abschnitt der Einstellungs-App.
Der Ergebnisbildschirm wird angezeigt, wenn showResultScreen
auf true gesetzt ist.
/// 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 )
Das Widget stellt einen resultScreenHandler
bereit, wenn der Ergebnisbildschirm geschlossen wird (vorausgesetzt, die Schaltfläche „Erneut starten“ wird nicht angeklickt). Der Handler stellt den Text bereit, der zuvor in resultScreenText
festgelegt wurde.
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 ist unter der MIT-Lizenz verfügbar. Weitere Informationen finden Sie in der LICENSE-Datei.