标签: createwritestream

未收到数据时向 Node.js 流添加“静默帧”

我正在使用 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 流(因此仅当用户说话时)。

有没有办法可以用某种静默帧来填补数据空白?或者也许保持静默流运行并仅在数据进入时才将其放入?

pcm fs node.js discord.js createwritestream

9
推荐指数
1
解决办法
1092
查看次数

fs.createwritestream 不是函数

我正在尝试开发一个 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 应用程序,帮助将文件下载到我的服务器或云空间。如何修复该错误。

typeerror node.js reactjs createwritestream

2
推荐指数
1
解决办法
4983
查看次数

谷歌云存储上传 0 字节 Node.js

我正在使用 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)

upload node.js google-cloud-storage createwritestream

0
推荐指数
1
解决办法
534
查看次数