node.js - 将数据从 Socket.io 写入 Google Cloud Storage
问题描述
我在我的 React Native 项目中从这个包中获取音频数据,然后通过 socket.io 将数据块发送到我的 Node.js 服务器。
AudioRecord.on('data', data => {
// base64-encoded audio data chunks
const binary = Buffer.from(data, 'base64').toString('utf-8')
socketClient.io.emit('binaryData', binary)
})
我的服务器接收到的数据是可读的,因为我通过此转换将该数据发送到返回准确结果的语音识别服务。
const speechAudioInputStreamTransform = new Transform({
transform: (chunk, encoding, callback) => {
if (newStream && lastAudioInput.length !== 0) {
// Approximate math to calculate time of chunks
const chunkTime = streamingLimit / lastAudioInput.length
if (chunkTime !== 0) {
if (bridgingOffset < 0) {
bridgingOffset = 0
}
if (bridgingOffset > finalRequestEndTime) {
bridgingOffset = finalRequestEndTime
}
const chunksFromMS = Math.floor(
(finalRequestEndTime - bridgingOffset) / chunkTime
)
bridgingOffset = Math.floor(
(lastAudioInput.length - chunksFromMS) * chunkTime
)
for (let i = chunksFromMS; i < lastAudioInput.length; i++) {
if (recognizeStream) {
recognizeStream.write(lastAudioInput[i])
}
}
}
newStream = false
}
audioInput.push(chunk)
if (recognizeStream) {
recognizeStream.write(chunk)
}
callback()
},
})
但是,当我将此数据写入 Google Cloud Storage 时,该文件会保存并包含数据,但由于无法播放而似乎已损坏。
const { Storage } = require('@google-cloud/storage')
const storage = new Storage(storageOptions)
const bucket = storage.bucket(bucketName)
const file = filename + '.wav'
const storageFile = bucket.file.createWriteStream()
client.on('binaryData', (data) => {
const buffer = Buffer.from(data)
if (recognizeStream != null) {
storageFile.write(buffer)
speechAudioInputStreamTransform.write(buffer)
}
})
当 RN 侧的用户终止会话时,storageFile.end()
被调用。任何帮助将不胜感激。谢谢
解决方案
推荐阅读
- css - Bootstrap 4 div填充问题
- python - 从 Python 将数据从 MySQL 数据库打印到控制台
- python - JMESPath:在字典中将数组值与标量值组合以获取叉积列表
- php - 设置 Laravel Collective 选择默认输入为禁用
- python - UNC 路径与 Python Subprocess_checkCall
- gchart - 谷歌区域图数据挂载
- google-analytics - 使用 Google Analytics 帐户进行开发环境
- excel - 计算仅包含特定月份特定文本的列中的单元格
- python - 我们可以在 keras 中使用 tf.spectral 傅立叶函数吗?
- javascript - 要限制的文本字段(+-0-9%)