WAV格式波形读取
By
admin
at 2019-01-22 • 0人收藏 • 1289人看过
感谢: 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位 单双声道都成功了,就是大文件速度慢
登录后方可回帖