Я пытаюсь воспроизвести аудиофайл в формате двоичной строки, который возвращает Amazon Polly. Для этого я использую «React-native-fetch-blob» и читаю поток, но просто продолжаю получать ошибки от моста, говоря: «Недопустимое сообщение данных — все должно быть длиной: 8». Это происходит, когда я пытаюсь открыть поток: ifstream.open()
Это код:
//polly config
const params = {
LexiconNames: [],
OutputFormat: "mp3",
SampleRate: "8000",
Text: "All Gaul is divided into three parts",
TextType: "text",
VoiceId: "Joanna"
};
Polly.synthesizeSpeech(params, function(err, data) {
let _data = "";
RNFetchBlob.fs.readStream(
// file path
data.AudioStream,
// encoding, should be one of `base64`, `utf8`, `ascii`
'ascii'
)
.then((ifstream) => {
ifstream.open()
ifstream.onData((chunk) => {
_data += chunk
})
ifstream.onError((err) => {
console.log('oops', err.toString())
})
ifstream.onEnd(() => {
//pasing _data to streaming player or normal audio player
ReactNativeAudioStreaming.play(_data, {showIniOSMediaCenter: true, showInAndroidNotifications: true});
})
})
});
Еще одно решение, которое я также пробовал, — сохранить поток в файл, чтобы загрузить его позже, но у меня были похожие ошибки. RNFetchBlob.fs.createFile("myfile.mp3", dataG.AudioStream, 'ascii');
Заранее огромное спасибо
_data
? Можете ли вы указать полный путь к аудиофайлу в вопросе? - person guest271314   schedule 04.08.2017Blob
, если вы ожидаете прочитать потокUint8Array
порциями? - person guest271314   schedule 04.08.2017react-native
,amazon-polly
илиreact-native-fetch-blob
, хотя вы пробовалиfetch()
иReadableStream
и различные методы преобразования текста в речь в браузере Как использовать Web Speech API в chromium?, Как создать или преобразовать текст в аудио в браузере хрома?, Как захватить сгенерированный звук из вызова window.speechSynthesis.speak()? - person guest271314   schedule 05.08.2017Blob
, я не совсем уверен, я хотел бы просто сделатьUint8Array
формат, совместимый с проигрывателем реакции. Может быть, поместить все куски в один массив и сохранить в файл. идеи? - person rubelux   schedule 05.08.2017Response.arrayBuffer()
при вызовеfetch()
, а затем передать буфер массива вnew Uint8Array()
, хотя, опять же, у вас нет опыта использования реакции - person guest271314   schedule 05.08.2017