본문 바로가기

오픈소스/노드

[Node] Audio Raw PCM data 에서 amplitude 추출

 Audio PCM 데이터에서 정상적인 데이터가 맞는 지, 구간 마다 어느정도의 파장크기를 확인 하는 방법을 본 문서에서 정의하고 있습니다. 개발을 하다가 음성 발화 인식을 위해 해당 코드를 작성하게 되었으며 16bit little endian mono 채널에서만을 기준으로 작성되었습니다.

 

 

사진을 보게 되면 파장이 -1.0 부터 1.0 까지 구성되어 있습니다. 이러한 로직을 처리하는 부분입니다. 

 

# Contents


  • 예제 코드

 

 

# 예제 코드


 코드는 아주 간단합니다. 매번 2바이트를 처리하는데, little endian이므로 8비트를 왼쪽 시프트하고, 부호처리를 하게 되면 0-1사이의 값 이 나오게 됩니다. 해당 코드는 값이 들어오는 구간 마다 데이터의 max 값을 찾는 코드였습니다. 해당 코드를 응용하여 사용해주시기 바랍니다.

 

function foundMax(chunk) {
	var max = 0.0;
	for (let i = 0; i + 1 < chunk.length; i += 2) {
		var msbFirst = (chunk[i] & 0xff) + ((chunk[i + 1] & 0xff) << 8);
		var msbSigned = ((msbFirst + 32768) % 65536) - 32768;
		var value = msbSigned / 65536.0;
		max = value > max ? value.toFixed(3) : max;
	}
	return max;
}