Blob 包含一个 WAV 文件和一个 WAV 文件:有什么区别以及如何相互转换?

Blob containing a WAV file and a WAV file: what's the difference and how to convert to each other?

前提:我注意到还有其他类似的问题,但看起来有趣的问题没有答案。例如Have a blob for a wav file on client side, how do I send it as a wav file to the server?

我正在使用 RecordRTC 获取用户语音输入的 WAV 文件。

我得到的是一个 Blob(二进制文件)(在控制台上)打印为:

Blob {}
  size: 131116
  type: "audio/wav"
  __proto__

我知道 Blob 包含 WAV 音频流,但 WAV 包含在 Blob 中,而不是 WAV 容器(即 WAV 文件)。 对吗?

那么,如何提取 WAV 流,例如通过 ajax/http 调用将其发送到服务器?

如果需要,我不介意使用 HTTP 或 NodeJS 脚本。

EDIT 我将尝试在一个答案中提出的建议。 因为我在 AngularJS 中这样做(我仍然是初学者)我想做一些类似...

services.sendAudioMessage(recordedAudio)
    .then(function (data) {
}

其中 services 由工厂定义:

.factory('services', function($http,$q) {
    return {
        sendAudioMessage: function (audioMessage) {
            return $http.jsonp('http://.../api.php?callback=JSON_CALLBACK', {
                params: {
                    audio: audioMessage
                }
            })
                .then(function (response) { 
                    if (typeof response.data === 'object') {
                        return response.data;
                    } else { 
                        return $q.reject(response.data);
                    }
                }, function (response) { 
                    return $q.reject(response.data);
                });
        }
    };
});     

而不是使用 Ajax 中提议的调用:How can javascript upload a blob?

Blob 只是一个二进制文件 object in-memory。 RecordRTC 实际上为您在 Blob 中存储了一个带有 WAV headers 的完整 WAV 文件。它不仅仅是 PCM 样本,它是一个普通的 WAV 文件。

您可以直接对该数据执行某些操作,也可以像任何其他 blob 一样上传到您的服务器。另见:https://whosebug.com/a/13333478/362536