Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新启动对流节点的写入_Javascript_Node.js_Fs - Fatal编程技术网

Javascript 重新启动对流节点的写入

Javascript 重新启动对流节点的写入,javascript,node.js,fs,Javascript,Node.js,Fs,我安装了一个应用程序,通过http从实时流中录制音频。我正在做一些音频处理,然后将产生的音频记录到一个文件中。录制30秒后,我想停止录制并保存文件(然后上传)。我继续处理音频,寻找下一个需要再录制30秒的点。我遇到的问题是,在我第一次停止录制后,当我想开始第二次录制时,我总是会出现错误 错误是:error:write after end 我猜这与行encoder.end()有关 除此之外,我如何停止录制,但稍后才能重新开始 var编码器=新的lame.编码器({ //输入 通道:1,//2个通

我安装了一个应用程序,通过http从实时流中录制音频。我正在做一些音频处理,然后将产生的音频记录到一个文件中。录制30秒后,我想停止录制并保存文件(然后上传)。我继续处理音频,寻找下一个需要再录制30秒的点。我遇到的问题是,在我第一次停止录制后,当我想开始第二次录制时,我总是会出现错误

错误是:
error:write after end

我猜这与行
encoder.end()有关

除此之外,我如何停止录制,但稍后才能重新开始

var编码器=新的lame.编码器({
//输入
通道:1,//2个通道(左侧和右侧)
位深度:16,//16位采样
采样器:44100,//44100 Hz采样率
//输出
比特率:128,
超标:22050,
模式:lame.MONO//立体声(默认)、JOINTSTEREO、双声道或单声道
});
var记录解码器;
module.exports.startRecording=函数(解码器){
如果(isRecording)
返回false;
录制解码器=解码器;
isRecording=true;
录制解码器。管道(编码器);
var writeStream=fs.createWriteStream('../recorded_calls/currentCall.wav');
编码器。管道(writeStream);
}
module.exports.stopRecording=函数(){
如果(isRecording){
console.log('停止录制',编码器)
encoder.end();
isRecording=false;
}

} /代码> < P>结束在管道中间的一个流就像关闭一个水龙头中间的阀门,这会在水流仍在流动时对阀门产生压力,或者水流仍在提供数据。相反,您希望从编码器中删除录制内容,然后您可以在以后的时间点再次使用管道进行录制。如果您长时间取消管道,则完全关闭流并在下次使用时重新创建流可能会有好处。

我执行
encoder.unpipe()
而不是.end()时,它会停止整个应用程序。@Bill不要取消所有管道,只需取消编码器,
decoder.unpipe(encoder)
确保调用
decoder.resume()
当您希望它再次开始流动时(调用
unpipe
会自动暂停流)。此外,我不确定这是否有意义;您将管道化/取消管道化到完全相同的编码器对象,这意味着每次开始录制时,您都在向同一文件流添加额外的管道。我建议同时创建编码器和文件流(即两次都创建一个新的编码器和文件流)。我做了“decoder.unpipe(encoder)”,这似乎是可行的。但下一次运行时,它只是添加到文件中。我删除了这个文件,它创建了一个新的。这似乎是可行的,但不确定它是否做了一些不好的背景编辑实际上不应该是问题的一部分,而是公认的答案。