Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

374
Views
SFSpeechAudioBufferRecognitionRequest no se puede reutilizar

¡Usé el código agradable en este tutorial ! con algunas correcciones. El código de reconocimiento de voz está funcionando. Pero si activo el código de reconocimiento más de dos veces, aparece el error en el título. Documentación difícil de encontrar que aborde esto. ¿Cualquiera?

 private func recordAndRecognizeSpeech() { let node = audioEngine.inputNode let recordingFormat = node.outputFormat(forBus: 0) node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in self.request.append(buffer) } audioEngine.prepare() do { try audioEngine.start() } catch { self.sendAlert(message: "There has been an audio engine error.") return print (error) } guard let myRecognizer = SFSpeechRecognizer() else { self.sendAlert(message: "Speech recognition is not supported for your current locale.") return } if !myRecognizer.isAvailable { self.sendAlert(message: "Speech recognition is not currently available. Check back at a later time.") return } recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { result, error in if result != nil { if let result = result { let bestString = result.bestTranscription.formattedString self.detectedTextLabel.text = bestString } else if let error = error { self.sendAlert(message: "There has been a speech recognition error.") print(error) } } }) }

La siguiente es la función que inicia y detiene el reconocedor.

 /// This button is the toggle for Starting and Stopping the Speech Recognition function @objc func didTapSpeechButton() { if isRecording == true { print("--> Stop Recording.") request.endAudio() // Mark end of recording audioEngine.stop() let node = audioEngine.inputNode node.removeTap(onBus: 0) recognitionTask?.cancel() isRecording = false speechButton.backgroundColor = UIColor.red } else { print("--> Start Recording.") self.recordAndRecognizeSpeech() isRecording = true speechButton.backgroundColor = UIColor.gray } }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Encontré una posible respuesta, así que decidí compartirla. Otros pueden encontrarlo útil. Esto se agregó a la función recordAndRecognizeSpeech().

El error era evidente, pero la solución no tanto para nosotros aprendiendo. La aplicación no falla. Si existe una mejor respuesta, con suerte alguien más puede ayudar.

 // This resets the recognitionRequest so "...cannot be re-use..." error is avoided. recognitionRequest = SFSpeechAudioBufferRecognitionRequest() // recreates recognitionRequest object. guard let recognitionRequest = recognitionRequest else { fatalError("Unable to created a SFSpeechAudioBufferRecognitionRequest object") }
over 4 years ago · Santiago Trujillo Report

0

Este error está relacionado con Error Domain=kAFAssistantErrorDomain Code=216 “(null)” .

Se debe usar finalizar en lugar de cancelar el reconocimiento.

 // stop recognition recognitionTask?.finish()

Encuentra mi respuesta completa aquí .

over 4 years ago · Santiago Trujillo Report

0

Solo agrega este código donde quieras detener o cancelar, Swift 4.2.

 // stop audio request.endAudio() audioEngine.stop() if audioEngine.inputNode.numberOfInputs > 0 { audioEngine.inputNode.removeTap(onBus: 0) } recognitionTask?.cancel()
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!