WAV格式波形读取

By admin at 2019-01-22 • 0人收藏 • 184人看过

感谢: 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位 单双声道都成功了,就是大文件速度慢

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...