我正在开发一个nodewebkit应用程序,该应用程序使用Web Audio API记录麦克风数据并将其保存到磁盘.
我已经使用了RecordRTC框架,但是随着录制的进行,它没有提供将数据流式传输到磁盘的方法(考虑到录制时间可能超过一小时,这是必要的).
我似乎无法找到使用其他方法将数据流式传输到磁盘的好方法.如果有一个正确的方法来做到这一点,我会很感激有关正确的工具是什么的提示.
但是,我现在的非工作解决方案是:
这没有用,因为ReadableStreamBuffer一次只向fileWriter传输20个字节,而不是因为某些原因而排队来自麦克风的所有字节.
var wav = require('wav');
var streamBuffers = require("stream-buffers");
function convertFloat32ToInt16(buffer) {
var l = buffer.length;
var buf = new Int16Array(l);
while (l--) {
buf[l] = Math.min(1, buffer[l])*0x7FFF;
}
return buf.buffer;
}
var filePath = utils.getCwd() + '/recordings/demo.wav';
var fileWriter = new wav.FileWriter( filePath, {
channels: 1,
sampleRate: 48000,
bitDepth: 16
});
var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({
frequency: 0, // in milliseconds.
chunkSize: 2048 // in bytes.
});
myReadableStreamBuffer.pipe(fileWriter);
source.connect(scriptNode); …Run Code Online (Sandbox Code Playgroud) 我在一个带有25个4gb json文件的目录上并行运行gsutil cp命令(使用-m选项)(我也使用-z选项进行压缩).
gsutil -m cp -z json -R dir_with_4g_chunks gs://my_bucket/
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它将打印到终端,它正在复制除了其中一个文件之外的所有文件.我的意思是它每个文件打印其中一行:
Copying file://dir_with_4g_chunks/a_4g_chunk [Content-Type=application/octet-stream]...
Run Code Online (Sandbox Code Playgroud)
一旦完成其中一个的传输,它就会说它将复制最后一个文件.
结果是有一个文件只在其中一个文件完成复制时才开始复制,从而大大减慢了进程
我可以使用-m选项上传的文件数量是否有限制?这可以在boto配置文件中配置吗?
我需要将大量的文件(大约几十TB)从Amazon S3移动到Google云端存储中.S3中的文件都在500mb以下.
到目前为止我使用gsutil CP与平行选项(-m)使用S3作为源和GS作为目的地直接尝试.即使调整多处理和多线程参数,我也无法实现超过30mb/s的性能.
我现在正在考虑的事情:
负载从S3批量数据导入使用DistCp使用HDFS,然后找到DistCp使用-ING所有的数据到谷歌存储的一种方式(据我可以告诉不支持),或:
设置,其中每个节点运行与S3和GS一个CP的gsutil并行作业作为src和dst的Hadoop集群
如果支持第一个选项,我会非常感谢有关如何执行此操作的详细信息.然而,似乎我必须找出如何做第二个.我不确定如何追求这个途径,因为我需要跟踪许多节点上的gsutil可恢复传输功能,而且我通常没有经验来运行这种hadoop工作.
任何有关如何追求这些途径(或者我没有想到的更简单的东西)的帮助都将不胜感激.