2013-12-22 10 views
7

분류 문제로 사용할 오디오 파일에서 피치 피쳐를 추출하려고합니다. 분류를 위해 python (scipy/numpy)을 사용하고 있습니다.오디오 파일에서 피치 피쳐 추출

scipy.fft을 사용하여 주파수 기능을 사용할 수 있다고 생각하지만 주파수를 사용하여 음표를 근사하는 방법을 알지 못합니다. 나는 조금 연구를하고 색도 스케일의 음표를 위해 주파수를 12 빈 (bin)으로 매핑하는 크로마 피쳐를 얻을 필요가 있음을 발견했습니다.

필자는 matlab 용 채도 도구 상자가 있다고 생각하지만 파이썬과 비슷한 것은 없다고 생각합니다.

어떻게해야합니까? 누구도 살펴 봐야 할 자료를 제안 할 수 있습니까?

답변

3

당신은 음표에 주파수를 매핑 할 수 있습니다 : n

n=12*log_2(f/Cp)+69

는 미디 노트 수를 계산 (현대 음악 440.0 Hz 단위 공통) f 주파수와 Cp 챔버 피치되어야된다.

단일 주파수가 음악 피치를 생성하지 않는다는 것을 알 것입니다. "피치 (Pitch)"는 하모닉 사운드의 기본, 즉 하나의 단일 주파수 (= 기본)의 정수배로 주로 구성되는 사운드의 감각에서 발생합니다.

Python에서 채도 기능을 사용하려면 Bregman Audio-Visual Information Toolbox을 사용할 수 있습니다. 채도 기능은 피치 옥타브에 대한 정보를 제공하지 않으므로 pitch class에 대한 정보 만 얻을 수 있습니다.

from bregman.suite import Chromagram 
audio_file = "mono_file.wav" 
F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205) 
F.X # all chroma features 
F.X[:,0] # one feature 

오디오에서 피치 정보를 추출하는 일반적인 문제는 pitch detection입니다.

+1

고맙습니다 ... 일반적으로 음악에 대한 피치 감지 또는 dsp 적용에 대한 자료 또는 책을 읽는 것이 좋습니다. –

+2

광범위한 컴퓨터 음악 문제에 대한 일반적인 소개 C. Roads _ The Computer Music Tutorial_ (1994, Cambridge : MIT Press)는 매우 액세스 가능하고 포괄적 인 (> 1000 페이지) 참고서입니다. 필자에게 M. Müllers의 1 부인 _ Music and Motion_ (2007, Berlin, Heidelberg : Springer)에 대한 정보 검색은 훌륭했습니다 (포괄적이지는 않았고 최신 기술이 더 많았습니다). 특정 주제에 관심이 있다면 [ISMIR의 출간] (http://www.ismir.net/proceedings/)은 풍부한 정보의 이음새입니다. 다른 것들은 당신에게 다른 (그리고 더 나은?) 참조를 줄 수 있습니다. 나도 흥미있을거야. –

+0

감사합니다. 나는 그들을 들여다 볼 것입니다. –

2

피치 감지에 관한 자료는 매우 광범위합니다. 일반적으로 자기 상관 기반 방법은 꽤 잘 작동하는 것처럼 보입니다. 주파수 영역 또는 제로 크로싱 방법은 덜 강력합니다 (그래서 FFT가별로 도움이되지 않습니다). 좋은 출발점이 두 가지 알고리즘 중 하나를 구현할 수도있다 :

한국인 기성품 솔루션, Aubio 파이썬 래퍼 YIN 복수 빗 포함한 여러 가능한 피치 추출 알고리즘 C 코드를 확인한다.

+1

고마워요 :) aubio에 대해,이 페이지 http://aubio.org/doc/latest/examples에 예제를 구현하고 있습니다.html 조금 어렵습니다. 라이브러리에있는 예제에서 사용한 메서드를 찾을 수 없으며 충분한 설명서가 없습니다. –

2

당신이 제 3 자 라이브러리를 사용하고자하는 경우 (적어도 어떻게 다른 사람들에 대한 참조로이 성취) :

소리에서 음악 정보를 추출, PyCon 2012 프리젠 테이션은 어떻게 AudioNest를 사용하는 방법을 보여줍니다 파이썬 API : 여기

는 관련 EchoNest의 문서입니다 umentation :

관련 발췌 :

피치 콘텐츠가 C 12 피치 클래스에 대응하는 "크로마"벡터로 주어진다 , C#, D에서 B까지, 값은 0에서 1까지이며, 은 th e 반음계에서 모든 피치의 상대 우위. 예를 들어, C Major 코드는 C, E 및 G 값이 큰 (즉, 클래스 0, 4 및 7)으로 표시 될 수 있습니다. 순수한 톤 0

근처 1 (피치)과 다른 하나의 값에 의해 기술되는 상태 벡터는, 가 예상 한 모든 근접한 값으로 표현되고, 따라서 시끄러운 소리들은 강한 사이즈는 1로 정규화 있다

EchoNest는 해당 서버에서 분석을 수행합니다. 비상업적 용도로 무료 API 키를 제공합니다.

EchoNest가 옵션이 아닌 경우 오픈 소스 aubio project을 살펴볼 것입니다. 그것은 파이썬 바인딩을 가지고 있으며, 당신은 소스를 검사하여 they accomplished pitch detection을 볼 수 있습니다.

+0

감사합니다. 흥미로운 비디오 : –

관련 문제