Tag: wav

WAV格式的差异(JS / NodeJS)

我正在尝试使用WebRTC来录制audio,然后将其存储在服务器端。 我的服务器是使用NodeJS制作的,而且我正在使用POST将数据从客户端传输到服务器。 在客户端上,我将数据从wav BLOB转换为base64,然后在服务器端读取数据,将其翻译为二进制数据,然后将其写入文件中。 应该没事吧? 只有一个问题:我从客户端下载的内容和发送到服务器的内容之间出现了一些非常不好的不一致之处。 有时它是增加的字节,有时候它只是被删除的数据块。 如果只是添加了字节,那就意味着一个字符集问题(从一个到另一个,然后是另一个等),但是在某些时候我增加了280个字节。 我在这里添加了一个hex diff的图片: http : //i.stack.imgur.com/psqf4.png (抱歉,我没有足够的声望直接发布图片) 另外,运行这些文件给我以下:(uuid.wav是服务器之一,而output(1).wav是客户端之一) 9F2B75D3-4C34-4C8F-935E-FC7637D7A054.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 4 bit, stereo 11321924 Hz output (1).wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz …显然这里有什么问题。 此外,试图修复头,或转换WAV给我一个错误沿线:无法find数据块/数据块大小为0。 任何想法可能是什么原因造成的?

连接“audio/ x-wav”缓冲区并使用“传输编码”服务:“分块”

这个问题是对前一个问题的跟进,由于@thejh而解决了。 我试图将文本转换为audio,并将数据作为“分块”数据提供给客户端。 到目前为止我的头像是这样的: res.writeHead(200, { 'Content-Type': 'audio/wav', // I tried 'audio/x-wav' as well 'Transfer-Encoding': 'chunked' }); 然后,我将文本片段转换为队列中的audio(我将其作为base64编码数据获取),然后像这样提供它们: var src = Base64Audio.replace("data:audio/x-wav;base64,",""); var binAudio = new Buffer( src, 'base64'); res.write(binAudio); 所有的信息都被传输到客户端,但由于某种原因,浏览器(我正在Firefox 7.0.1中testing)正在播放它,并在第一个块之后停止。 这是结果/演示显示audio提前结束 ,这是在github 上运行的代码 。 为什么是这样? 这是因为x-wav数据在头部/元数据中是否具有像End或指定长度的元数据? 如果是这样的元数据是什么,是否有某种方式来编辑它,使浏览器成功连接接收到的块? 我知道Header的'Content-Length': Buffer.length但在这种情况下,我不知道整个stream将会持续多久。 任何人都可以提供build议 是否有可能编辑缓冲区发送之前,让浏览器连接他们正确?

将Web Audio API麦克风数据stream式传输到nodewebkit上的磁盘

我正在研究使用Web Audio APIlogging麦克风数据并将其保存到磁盘的nodewebkit应用程序。 我已经使用了RecordRTC框架,但是它并没有公开将数据stream式传输到磁盘的方法(logging可能超过一个小时,这是必要的)。 我似乎无法find使用其他方法将数据stream式传输到磁盘的好方法。 如果有一个合适的方法来做到这一点,我将不胜感激这个工作的适当工具是什么。 然而,我现在的非工作解决scheme是: 使用WebAudio API创build一个ScriptProcessorNode来访问PCM数据 创build一个可读的stream缓冲区(使用stream缓冲区模块)并将其传送到一个fileWriter(由wav模块制作) 将onaudioprocess事件中的数据转换为16位整数,并将它们添加到可读stream中,以便可以将其写入 这是行不通的,因为ReadableStreamBuffer一次仅传送20个字节到fileWriter,而不是由于某种原因排队来自麦克风的所有字节。 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, […]

cordova-plugin-media:在nodejs服务器上parsing“.amr”audio文件

我正在使用cordova-plugin-media插件来logging来自android和ios设备的audio文件。 不过,android只允许以“.amr”结尾的文件进行录制,其他的iOS只支持“.wav”。 在Android上的iOS设备上播放“.wav”,iOS不支持“.amr”文件。 这就是为什么我必须以某种方式转换它们。 由于我找不到任何cordova插件转换客户端上的“.amr”文件,除了这个 (这是基于外部的API和extreeeemly缓慢+不完全工作 – 此外,我不是一个粉丝文件转换在客户端),我在服务器端寻找一个解决scheme: 是否有任何JavaScript的库(最好,如果它是“nodejs友好的”),让我轻松转换“.amr”文件为“.wav”或“.mp3”(或类似 – 只能在iOS上播放)? 尽pipeffmpeg(我无法正常安装),我找不到任何解决scheme… 🙁 (在cordova-plugin-media中将MIMEtypes设置为“audio / wav”会创build一个“损坏的”wav文件,当使用工具进一步分析时,仍然会进行编码) 我真的很感谢你的帮助!