Наложение голоса помогает превратить голос вашего пользователя в текст , обеспечивая безупречный пользовательский интерфейс и одновременно предоставляя вам необходимые разрешения .
Он использует внутренний SFSpeechRecognizer
для преобразования речи в текст.
Вы можете клонировать и запустить демонстрационный проект, выполнив pod install
, а затем запустив проект.
Менеджер пакетов Swift — это инструмент для управления распространением кода 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. Чтобы установить его, добавьте следующую строку в свой подфайл:
pod 'InstantSearchVoiceOverlay' , '~> 1.1.0'
Carthage — простой децентрализованный менеджер зависимостей для Cocoa.
Чтобы установить InstantSearchVoiceOverlay, добавьте следующую строку в файл Cartfile:
github "algolia/voice-overlay-ios" ~> 1.1 . 0
Info.plist
добавьте эти 2 строковых свойства вместе с описанием.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. Дополнительную информацию смотрите в файле ЛИЦЕНЗИИ.