Android's Speechcognizer с Extra_Audio_source по -прежнему слушает микрофон, а не из файлаAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android's Speechcognizer с Extra_Audio_source по -прежнему слушает микрофон, а не из файла

Сообщение Anonymous »

Я пытаюсь сделать приложение, которое позволяет пользователю записывать предложение и преобразовать его в текст. Запуск медиареатического и речевого режизализатора одновременно не работает, поэтому я решил сначала сделать запись, а затем передать этот файл в речевое определение, используя 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Android Speechcognizer Start Sound слишком низкий или отсутствует при использовании Bluetooth Sco Audio Routing (SDK 23–
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Сгенерированная ошибка сервлета: методы по умолчанию не поддерживаются в -source 1.5 (используйте -source 8 или выше, чт
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Преобразование кода Ruby-Source в код Java-Source
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Невозможно найти элемент #audio-source в решателе капчи с помощью DrissionPage.
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Используйте HTML Audio Player для Dailymotion Audio
    Anonymous » » в форуме Html
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»