C# – 파형 및 EPD 추출

지금 수행중인 프로젝트에서 음원을 잘게 쪼개는 작업이 필요하게 되었습니다.
임의의 길이로 자르게 되면 음절이 끊어지게 되므로,
어절 사이의 잠깐 쉬는 공간을 기준으로 자르기 위해 몇가지 작업을 진행해 보았습니다.

파형 분석

.net에서는 nAudio라는 훌륭한 오픈 소스가 있어서 파형은 쉽게 확인할 수 있었습니다.

youtube 자료를 사용하여 실행해 보면, 작은 음원은 금방 화면에 그리지만 30분 이상의 음원들은 그래프를 그리는데 오래 걸리더군요.
그래서 파형이 크게 훼손되지 않는 정도에서 프레임을 건너뛰면서 화면에 그리도록 수정하였습니다.

EPD

파형을 체크하면 어절사이에는 쉬는 공간이 생깁니다.
이에 착안하여 에너지가 낮은 구간이 특정 프레임 이상일때를 기준으로 EPD(End point detection)을 구현해 보았습니다.
제대로 구현하기 위해서는 SNR(신호 대 잡음비)등의 어려운 요소들이 나오지만..
간단히 에너지와 시간만으로 구현했더니 너무 많은 EPD가 연속적으로 나오더군요..
그래서 가까운 EPD들은 그냥 하나로 묶어주었습니다. ^_^;

epd

소스 코드

C# 소스 Download

혹시 코드를 퍼가실때는 출처를 남겨주세요. ^^

CC BY-NC-ND 2.0 KR

이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스

저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.

댓글 남기기