WAV格式波形读取

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

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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...