2016-12-27 2 views
0

как определить, использовалась ли диктофон голоса для UITextView? Или кнопка микрофона прослушивались на клавиатуре в UI TextViewios: как определить, использовалась ли диктатура голоса для UITextView? Или клавиша микрофона была нажата на клавиатуре

enter image description here

+0

Возможный дубликат [ios: как определить, была ли голосовая диктовка использована для UITextField? Или кнопка микрофона была нажата на клавиатуре] (http://stackoverflow.com/questions/32652775/ios-how-to-detect-if-voice-dictation-was-used-for-uitextfield-or-microphone-bu) – Saavaj

+0

@ Saavaj, Можете ли вы, пожалуйста, увидеть мой вопрос в деталях, я упомянул UITextview, а не UITextField.UITextView отличается от UITextField – Nithya

ответ

0

Вы можете использовать рамки Speech Kit, который Siri использует для распознавания речи. первый набор речевого набора для импорта, а затем подтвердить делегат здесь - быстрая версия. Это может быть полезно

import Speech 

    class ViewController: UIViewController, SFSpeechRecognizerDelegate { 

    private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? 
    private var recognitionTask: SFSpeechRecognitionTask? 
    private let audioEngine = AVAudioEngine() 

    private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "en-US")) 

     override func viewDidLoad() { 
     super.viewDidLoad() 
     self.authorizeSpeech() 
     } 

     private func authorizeSpeech() { 
     SFSpeechRecognizer.requestAuthorization { (authStatus) in //4 

     var isButtonEnabled = false 

     switch authStatus { //5 
      case .authorized: 
      isButtonEnabled = true 

      case .denied: 
      isButtonEnabled = false 
      print("User denied access to speech recognition") 

      case .restricted: 
      isButtonEnabled = false 
      print("Speech recognition restricted on this device") 

     case .notDetermined: 
      isButtonEnabled = false 
      print("Speech recognition not yet authorized") 
     } 

     OperationQueue.main.addOperation() { 
      print(isButtonEnabled) //this tells that speech authorized or not 
     } 
     } 
     } 


    } 

теперь добавить некоторые пользовательские сообщения в вас info.plist

<key>NSMicrophoneUsageDescription</key> <string>Your microphone will be used to record your speech when you press the Start Recording button.</string> 

    <key>NSSpeechRecognitionUsageDescription</key> <string>Speech recognition will be used to determine which words you speak into this device microphone.</string> 

теперь создайте новую функцию startRecording()

func startRecording() { 

if recognitionTask != nil { 
    recognitionTask?.cancel() 
    recognitionTask = nil 
} 

let audioSession = AVAudioSession.sharedInstance() 
do { 
    try audioSession.setCategory(AVAudioSessionCategoryRecord) 
    try audioSession.setMode(AVAudioSessionModeMeasurement) 
    try audioSession.setActive(true, with: .notifyOthersOnDeactivation) 
} catch { 
    print("audioSession properties weren't set because of an error.") 
} 

recognitionRequest = SFSpeechAudioBufferRecognitionRequest() 

guard let inputNode = audioEngine.inputNode else { 
    fatalError("Audio engine has no input node") 
} 

guard let recognitionRequest = recognitionRequest else { 
    fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object") 
} 

recognitionRequest.shouldReportPartialResults = true 

recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in 

    var isFinal = false 

    if result != nil { 

     your_text_view.text = result?.bestTranscription.formattedString 
     isFinal = (result?.isFinal)! 
    } 

    if error != nil || isFinal { 
     self.audioEngine.stop() 
     inputNode.removeTap(onBus: 0) 

     self.recognitionRequest = nil 
     self.recognitionTask = nil 


    } 
}) 

let recordingFormat = inputNode.outputFormat(forBus: 0) 
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in 
    self.recognitionRequest?.append(buffer) 
} 

audioEngine.prepare() 

do { 
    try audioEngine.start() 
} catch { 
    print("audioEngine couldn't start because of an error.") 
} 

} 

подтверждают делегат

func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) { 
    if available { 
     startRecording() 
    } else { 
     //print("not implement") 
    } 
    } 
+0

@thanks Umesh Verma, я хочу, чтобы версия для i-го, вы можете поделиться им, это будет очень полезно для меня – Nithya

Смежные вопросы