WAV格式波形读取
By
admin
at 2019-01-22 • 0人收藏 • 1187人看过
感谢: aar培训群 周(3321XXX81) 提供测试代码
收藏, 以备查阅!
import console; import fsys.file; import win.clip import string.builder var WAVE = { byte ChunkID[4]; // "RIFF"标志 INT ChunkSize; // 文件长度(WAVE文件的大小, 不含前8个字节) byte Format[4]; // "WAVE"标志 byte SubChunk1ID[4]; // "fmt "标志 INT SubChunk1Size; /* * 过渡字节(不定) * 16 for PCM. This is the size of the rest of pointer Subchunk which follows this number. */ WORD AudioFormat; /* * 格式类别(10H为PCM格式的声音数据) * PCM=1 (i.e. Linear quantization) * Values other than 1 indicate some form of compression. */ WORD NumChannels; // 通道数(单声道为1, 双声道为2) //WORD SampleRate; // 采样率(每秒样本数), 表示每个通道的播放速度 INT SampleRate; // 采样率(每秒样本数), 表示每个通道的播放速度 INT ByteRate; /* * 波形音频数据传输速率, 其值为:通道数*每秒数据位数*每样本的数据位数/pointer 播放软件可以利用该值估计缓冲区大小 */ WORD BlockAlign; /* * 每样本的数据位数(按字节算), 其值为:通道数*每样本的数据位值/8, 播放 * 软件需要一次处理多个该值大小的字节数据, 以便将其值用于缓冲区的调整 */ WORD BitsPerSample; /* * 每样本的数据位数, 表示每个声道中各个样本的数据位数. 如果有多个声道, * 对每个声道而言, 样本大小都一样 */ byte SubChunk2ID[4]; // 数据标记"data" INT SubChunk2Size; // 语音数据的长度 } var file = fsys.file("D:\wwwroot\wwww_22fqiz\web\5.wav") var wav = file.read(WAVE) if(wav.AudioFormat ==1 ){ var len = wav.SubChunk2Size/(wav.BitsPerSample/8)/wav.NumChannels; console.log(len) var out = string.builder() out.append("SAMPLES: "++ len ++'\r\n') out.append("BITSPERSAMPLE: "++ wav.BitsPerSample ++'\r\n') out.append("CHANNELS: "++ wav.NumChannels ++'\r\n') out.append("SAMPLERATE: "++ wav.SampleRate ++'\r\n') out.append('NORMALIZED: FALSE\r\n') for(i=1;len;1){ for(n=1;wav.NumChannels;1){ if(wav.BitsPerSample == 8){ var ret = file.read({BYTE data}) if(ret ==null){ break 2; } out.append(ret.data) }else if(wav.BitsPerSample == 16){ var ret = file.read({word data}) if(ret ==null){ break 2; } out.append(ret.data) } if(wav.NumChannels == n){ out.append('\r\n') }else { out.append(' ') } } } string.save("F:/1.txt", out.subString()) console.log("成功") }else { console.log("失败") } console.pause(true);
wav Windows PCM 编码. 8 16位 单双声道都成功了,就是大文件速度慢
登录后方可回帖