Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

377
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda