PCM的dataView格式二进制转audio/wav的blob格式
时间: 2023-10-21 16:03:35 浏览: 291
将PCM的dataView格式二进制转换为audio/wav的blob格式,您可以按照以下步骤进行操作:
1. 创建一个空的Uint8Array数组,并将其长度设置为44加上PCM数据的长度。
```javascript
var buffer = new ArrayBuffer(44 + dataView.byteLength);
var view = new DataView(buffer);
var blob = new Blob([buffer], { type: 'audio/wav' });
```
2. 将RIFF标识写入DataView中,从字节0开始写入。
```javascript
view.setUint32(0, 0x52494646, false); // RIFF
```
3. 写入文件的总大小,从字节4开始写入。
```javascript
view.setUint32(4, 36 + dataView.byteLength, true); // file length
```
4. 将WAVE标识写入DataView中,从字节8开始写入。
```javascript
view.setUint32(8, 0x57415645, false); // WAVE
```
5. 将fmt标识写入DataView中,从字节12开始写入。
```javascript
view.setUint32(12, 0x666d7420, false); // fmt
```
6. 写入fmt块的长度,从字节16开始写入。
```javascript
view.setUint32(16, 16, true); // fmt chunk length
```
7. 写入音频格式,从字节20开始写入。
```javascript
view.setUint16(20, 1, true); // audio format (PCM)
```
8. 写入声道数,从字节22开始写入。
```javascript
view.setUint16(22, 1, true); // number of channels
```
9. 写入采样率,从字节24开始写入。
```javascript
view.setUint32(24, 44100, true); // sample rate
```
10. 写入字节率,从字节28开始写入。
```javascript
view.setUint32(28, 44100 * 2, true); // byte rate
```
11. 写入块对齐,从字节32开始写入。
```javascript
view.setUint16(32, 2, true); // block align
```
12. 写入位深度,从字节34开始写入。
```javascript
view.setUint16(34, 16, true); // bits per sample
```
13. 将data标识写入DataView中,从字节36开始写入。
```javascript
view.setUint32(36, 0x64617461, false); // data
```
14. 写入PCM数据的长度,从字节40开始写入。
```javascript
view.setUint32(40, dataView.byteLength, true); // data chunk length
```
15. 写入PCM数据,从字节44开始写入。
```javascript
var offset = 44;
for (var i = 0; i < dataView.byteLength; i++, offset++) {
view.setUint8(offset, dataView.getUint8(i));
}
```
最终,您将得到一个包含PCM数据的audio/wav格式的Blob对象。
阅读全文