Я работаю над функцией в своем приложении React Native, которая преобразует речь людей в текст, используя Google NodeJS Speech-to-Text API .
Я использую Expo для сборкииз моего приложения.Я использую встроенный класс Expo Audio
, поскольку он делает запись и воспроизведение аудио очень простыми.
Я установил автономный NodeJS и Express API, который позволяет мне нажиматьопределенные конечные точки для загрузки, а затем преобразовать загруженное аудио в текст, который я передам обратно пользователю.Я делаю это только потому, что Google Speech-to-Text не работает на React Native, только приложения NodeJS.
Это текущий поток, который я реализовал:
- Пользователь записывает свое аудио локально на свой телефон.В телефоне создается временный файл.
- Они отправляют этот файл в виде
multipart/form-data
, используя axios
.FormData
- это класс, используемый для формирования данных. - На стороне сервера я использую
multer
, чтобы получить файл и загрузить его в базу данных MongoDB, размещенную на хосте, используя GridFS. - Находясь на стороне сервера, я загружаю определенный файл в виде
ArrayBuffer
. - , затем переводю
Buffer
в Base64
и отправляю его в API Google. - Google отвечает своей транскрипцией, а затем я отправляю транскрипцию обратно в отформатированном объекте JSON.
Этот процесс работает для iOS, нет проблем.Однако мне не удается использовать Android.
После прочтения в Интернете моя главная догадка заключается в том, что мои аудиофайлы могут быть неправильно отформатированы для Android.
Вот настройки звукадля Android:
"android": {
"audioEncoder": 3,
"bitRate": 128000,
"extension": ".wav",
"numberOfChannels": 1,
"outputFormat": 2,
"sampleRate": 44100,
}
Примечание : это те же самые настройки, которые у меня есть для iOS.
Вот настройки звука для Google Speech-to-Text:
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 16000,
languageCode: 'en-US',
};
Примечание : я тестирую iOS на эмуляторе моего MacBook, а тестирую Android на своем Google Pixel 2 XL.