我正在使用 Node.js 创建一个 Discord.js 机器人,该机器人在语音通道中记录用户的音频。它加入一个频道并开始分别收听每个用户的声音。它记录到 .pcm 文件(因此只有原始数据)。
现在,这可行了,但 Discord 音频流的性质导致了问题。从 Discord 的 API 获取的音频流仅在特定用户说话时发送数据,而不是在他们沉默时发送数据。这会导致用户说话的时刻被粘贴到彼此之后,而中间没有沉默。
举个例子,我讲5秒,然后停止讲5秒,然后再开始讲,依此类推。如果我这样做 1 分钟,我将得到一个只有 30 秒长的文件,因为 5 秒的静默没有记录在流中。
代码看起来像这样(这receiver是 Discord API 提供的语音连接,当我发出命令时流会任意结束):
const audioStream = receiver.createStream(user, {mode:'pcm', end:'manual'};
const outputStream = fs.createWriteStream('SOME_PATH');
audioStream.pipe(outputStream);
audioStream.on('end', () => {
console.log('Ended stream')
});
Run Code Online (Sandbox Code Playgroud)
输出audioStream是 16 位小端 44100 Hz 流(因此仅当用户说话时)。
有没有办法可以用某种静默帧来填补数据空白?或者也许保持静默流运行并仅在数据进入时才将其放入?
我正在尝试开发一个 React 应用程序,帮助我将文件下载到我的亚马逊云。为此我使用了这个模块
下载文件与进度条
这是我的代码:
var dl = require('download-file-with-progressbar');
//-----------Download File-------------------
option = {
filename: 'fileName',
dir: os.tmpdir(),
onDone: (info)=>{
console.log('done', info);
},
onError: (err) => {
console.log('error', err);
},
onProgress: (curr, total) => {
console.log('progress', (curr / total * 100).toFixed(2) + '%');
},
}
dd = dl('https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-x64.tar.gz', this.option);
//-------------------------------------------
Run Code Online (Sandbox Code Playgroud)
它在 nodejs 项目上运行良好。但是当我在反应项目中使用它(使用“create-react-app”创建)时,它产生了以下错误。
类型错误:fs.createWriteStream 不是函数
我对这个项目的想法是创建一个 React 应用程序,帮助将文件下载到我的服务器或云空间。如何修复该错误。
我正在使用 Google-Cloud-Storage。此代码将在存储桶中保存一个对象,但它只是空的。它显示的大小为 0 字节
req.file = req.files.file;
const bucketName = req.body.bucketName || DEFAULT_BUCKET_NAME;
const bucket = storage.bucket(bucketName);
const gcsFileName = `${Date.now()}-${req.file.name}`;
const file = bucket.file(gcsFileName);
const stream = file.createWriteStream({
// resumable: false,
// gzip: true,
metadata: {
contentType: req.file.mimetype,
},
});
stream.on('error', (err) => {
req.file.cloudStorageError = err;
next(err)
});
stream.on('finish', () => {
console.log('image uploaded succesfully')
req.file.cloudStorageObject = gcsFileName;
return file.makePublic()
.then(() => {
req.file.gcsUrl = gcsHelpers.getPublicUrl(bucketName, gcsFileName);
next()
});
});
stream.end(req.files.file.buffer);
Run Code Online (Sandbox Code Playgroud)