Я пытаюсь сделать приложение, которое позволяет пользователю записывать предложение и преобразовать его в текст. Запуск медиареатического и речевого режизализатора одновременно не работает, поэтому я решил сначала сделать запись, а затем передать этот файл в речевое определение, используя Extra_audio_source Extra в распознавательнице. < /P>
Тем не менее, речевое определение, похоже, не функционирует как предполагаемое. Он не читается из файла, и вместо этого открывает микрофон, чтобы прослушать его. Я обнаружил это, говоря очень быстро после того, как нажимаю кнопку «Остановить запись». Речикзогнизатор поймал последние несколько слов и дал мне правильный результат. Вот фрагмент моего кода. Я вырезал неважные материалы пользовательского интерфейса. < /P>
private var recorder: MediaRecorder? = null
private var recognizer: SpeechRecognizer? = null
private val mediaFormat = MediaRecorder.OutputFormat.MPEG_4
private val audioEncoding = MediaRecorder.AudioEncoder.DEFAULT
private var currentRecordingFile: String = "recording_0.3gp"
private var recordingParcel: ParcelFileDescriptor? = null
// [ {"text": "speech to text result", "file": "path to clip recording"}, "time": "datetime" ]
private var translations = mutableStateListOf()
private fun startTalking () {
startRecording()
}
private fun stopTalking () {
stopRecording()
startRecognizing()
}
private fun startRecording () {
val num = translations.count()
currentRecordingFile = "$externalCacheDir/recording_$num.3gp"
recorder = MediaRecorder(this).apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(mediaFormat)
setAudioEncoder(audioEncoding)
setAudioChannels(1)
setAudioSamplingRate(16000)
setAudioEncodingBitRate(64000)
setOutputFile(currentRecordingFile)
try {
prepare()
} catch (e: IOException) {
Log.e("startRecording", e.toString())
}
start()
}
}
private fun stopRecording () {
recorder?.apply {
stop()
release()
}
recorder = null
}
private fun startRecognizing () {
val file = File(currentRecordingFile)
recordingParcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "in-ID")
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "in-ID")
intent.putExtra(RecognizerIntent.EXTRA_AUDIO_SOURCE, recordingParcel)
intent.putExtra(RecognizerIntent.EXTRA_AUDIO_SOURCE_ENCODING, audioEncoding)
intent.putExtra(RecognizerIntent.EXTRA_AUDIO_SOURCE_CHANNEL_COUNT, 1)
intent.putExtra(RecognizerIntent.EXTRA_AUDIO_SOURCE_SAMPLING_RATE, 16000)
try {
recognizer = SpeechRecognizer.createSpeechRecognizer(this)
recognizer?.setRecognitionListener(this)
recognizer?.startListening(intent)
} catch (e: Exception) {
Log.e("SpeechRecognizer", e.message.toString())
}
}
private fun stopRecognizing () {
recordingParcel?.close()
recognizer?.stopListening()
recognizer?.destroy()
recognizer = null
}
override fun onError(error: Int) {
Log.e("Speech onError", error.toString())
stopRecognizing()
}
override fun onResults(results: Bundle){
val words: ArrayList? = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
if (words != null) {
val sentence = words.joinToString(separator = " ")
val translation = mapOf("text" to sentence, "file" to currentRecordingFile)
translations.add(translation)
Log.e("CURR RESULT", sentence)
}
stopRecognizing()
}
< /code>
Я подозреваю, что это потому, что я неправильно использую parcelfiledescriptor? Как примечание, функция GetStatsize посылки возвращает ненулевой размер файла, и я могу воспроизводить запись с помощью медиаплеера, поэтому сама запись в порядке. < /P>
Другая причина может быть из-за Следующая строка из документации. «Если это дополнительное не установлено или распознаватель не поддерживает эту функцию , распознаватель откроет микрофон для звука и закроет его, когда распознавание будет закончено». Я не знаю, как проверить список поддержки, но я тестирую это на Android 13.
Спасибо за чтение.
Подробнее здесь: https://stackoverflow.com/questions/775 ... e-mic-inst
Android's Speechcognizer с Extra_Audio_source по -прежнему слушает микрофон, а не из файла ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно найти элемент #audio-source в решателе капчи с помощью DrissionPage.
Anonymous » » в форуме Python - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-