IT이야기

오디오 샘플의 키를 결정하는 알고리즘

cyworld 2021. 4. 21. 21:23
반응형

오디오 샘플의 키를 결정하는 알고리즘


오디오 샘플의 음악 키를 결정하는 데 관심이 있습니다. 어떻게 알고리즘이 음악 오디오 샘플의 키를 근사화하려고할까요?

Antares Autotune과 Melodyne은 이러한 작업을 수행하는 두 가지 소프트웨어입니다.

누구든지 이것이 어떻게 작동하는지에 대한 평신도의 설명을 조금 줄 수 있습니까? 코드 진행 등을 위해 주파수 스펙트럼을 분석하여 노래의 키를 수학적으로 추론합니다.

이 주제에 많은 관심이 있습니다!

편집-훌륭한 출처와이 질문에 기여한 모든 사람들로부터 찾을 수있는 풍부한 정보 .

특히 출처 : the_mandrill과 Daniel Brückner.


이것은 매우 까다로운 문제이며 신호 처리에 대한 배경 지식이 없거나 (또는 ​​그것에 대해 배우는 데 관심이없는 경우) 매우 실망스러운 시간을 앞두고 있다는 것을 인식하는 것이 좋습니다. 문제에 대해 몇 개의 FFT를 던질 것으로 예상한다면 그리 멀리 가지 않을 것입니다. 정말 흥미로운 지역 이니 많은 관심 부탁드립니다.

처음에는 피치 인식 문제가 있는데, 이는 자기 상관 또는 고조파 합 스펙트럼 (예 : Paul R의 링크 참조)과 같은 방법을 사용하여 간단한 모노 악기 (예 : 음성)에 대해 합리적으로 쉽게 수행 할 수 있습니다. 그러나 이것이 잘못된 결과를 가져 오는 경우가 많습니다. 예상했던 피치의 절반 또는 두 배를 얻을 수 있습니다. 이를 피치 주기 두 배 또는 옥타브 오류 라고하며 기본적으로 FFT 또는 자기 상관이 데이터가 시간이 지남에 따라 일정한 특성을 갖는다는 가정을 가지고 있기 때문에 발생합니다. 사람이 연주하는 악기가 있다면 항상 약간의 변형이있을 것입니다.

어떤 사람들은 인식 문제를 피치 인식을 먼저 수행 한 다음 피치 시퀀스에서 키를 찾는 문제로 접근합니다 . 단일 음조 시퀀스 이외의 다른 것이 있으면 이것은 매우 어렵습니다. 단음의 음조 시퀀스가있는 경우 여전히 건반을 결정하는 명확한 방법이 아닙니다. 예를 들어 반 음표를 처리하는 방법 또는 메이저인지 마이너인지 결정하는 방법입니다. 따라서 Krumhansl의 키 찾기 알고리즘 과 유사한 방법을 사용해야합니다 .

따라서이 접근 방식의 복잡성을 고려할 때 대안은 동시에 연주되는 모든 음표를 보는 것입니다. 코드가 있거나 하나 이상의 악기가 있으면 한 번에 여러 정현파의 풍부한 스펙트럼 수프를 연주하게됩니다. 각 개별 음표는 기본 주파수 인 여러 고조파로 구성되어 있으므로 A (440Hz)는 440, 880, 1320에서 정현파로 구성됩니다. 또한 E ( 음조는 다이어그램 참조)를 연주하면 659.25가됩니다. 거의 HzA의 1.5 배 (실제로 1.498). 이것은 A의 모든 3 차 고조파가 E의 모든 2 차 고조파와 일치한다는 것을 의미합니다. 이것이 화음을 공유하기 때문에 코드가 기분 좋게 들리는 이유입니다. (제외로 서구 조화가 작동하는 모든 이유는 2의 12 제곱근이 7 제곱에 가깝다는 운명의 기이함 때문입니다)

5도에서 메이저, 마이너 및 기타 코드까지이 간격을 넘어 서면 다른 비율을 찾을 수 있습니다. 많은 주요 발견 기술이 이러한 비율을 열거 한 다음 신호의 각 스펙트럼 피크에 대한 히스토그램을 채울 것이라고 생각합니다. 따라서 A5 코드를 감지하는 경우 440, 880, 659, 1320, 1760, 1977에서 피크를 찾을 수 있습니다. B5의 경우 494, 988, 741 등이됩니다. 따라서 주파수 히스토그램을 만들고 신호의 정현파 피크 (예 : FFT 전력 스펙트럼에서)는 히스토그램 항목을 증가시킵니다. 그런 다음 각 키 AG에 대해 히스토그램의 빈을 집계하고 항목이 가장 많은 빈이 키가 될 가능성이 높습니다.

이는 매우 간단한 접근 방식이지만 스트 럼 또는 지속 코드의 키를 찾는 데 충분할 수 있습니다. 또한 신호를 작은 간격 (예 : 20ms)으로 자르고 각각을 분석하여보다 강력한 추정치를 구축해야합니다.

편집 :
실험하고 싶다면 Octave 또는 CLAM 과 같은 패키지를 다운로드하여 오디오 데이터를 시각화하고 FFT 및 기타 작업을 더 쉽게 실행할 수 있습니다.

기타 유용한 링크 :

  • 피치 인식의 일부 측면에 대한 박사 학위 논문 -수학은 약간 무겁지만 2 장은 음악 오디오 모델링의 다양한 접근 방식에 대한 접근이 매우 용이합니다.
  • http://en.wikipedia.org/wiki/Auditory_scene_analysis-Bregman 의 청각 장면 분석은 음악에 대해 이야기하지는 않지만 복잡한 장면을 인식하는 방법에 대한 흥미로운 결과를 가지고 있습니다.
  • Dan Ellis 는 이와 유사한 분야에서 훌륭한 논문을 작성했습니다.
  • Keith Martin 은 몇 가지 흥미로운 접근 방식을 가지고 있습니다.

저는 대학에서 2 년 넘게 다 성음 CD 녹음을 악보로 옮기는 문제를 해결했습니다. 문제는 매우 어렵습니다. 문제와 관련된 최초의 과학 논문은 1940 년대로 거슬러 올라가며 오늘날까지 일반적인 경우에 대한 확실한 해결책이 없습니다.

일반적으로 읽는 모든 기본 가정은 정확하지 않으며 대부분은 매우 단순한 시나리오를 제외하고 모든 것에 사용할 수 없을 정도로 잘못되었습니다.

배음의 주파수는 기본 주파수의 배수 아닙니다. 비선형 효과가있어 높은 부분이 예상 주파수에서 멀어지게합니다. 6 일을 예상했던 7 번째 부분을 찾는 것은 드문 일이 아닙니다.

푸리에 변환 은 관심있는 주파수가 대수적으로 간격을두고있는 반면 푸리에 변환은 선형 간격의 주파수를 생성하기 때문에 오디오 분석에서는 좋지 않습니다 . 저주파에서는 인접한 피치를 분리하기 위해 높은 주파수 분해능이 필요합니다.하지만 이로 인해 시간 분해능이 나 빠지고 개별 음이 빠르게 연속적으로 연주되는 기능을 잃게됩니다.

오디오 녹음에는 (아마도) 악보를 재구성하는 데 필요한 모든 정보가 포함되어 있지 않습니다 . 음악 인식의 대부분은 귀와 뇌에서 발생합니다. 그렇기 때문에 가장 성공적인 시스템 중 일부는 오디오 녹음에서 정보를 추출하기 위해 신호 처리에 작은 부분에만 의존하는 (서양) 음악의 구조에 대한 대규모 지식 저장소를 갖춘 전문가 시스템입니다.

집에 돌아 오면 제가 읽은 논문을 살펴보고 가장 관련성이 높은 20 ~ 30 개의 논문을 여기에 추가하겠습니다. 나는 당신이 무언가를 구현하기로 결정하기 전에 그것들을 읽는 것을 정말로 제안한다-대부분의 일반적인 가정들이 다소 부정확하기 전에 언급했듯이 당신은 구현하고 테스트하는 동안 50 년 이상 발견되고 분석 된이 모든 것들을 재발견하고 싶지 않다.

어려운 문제이지만 너무 재미 있습니다. 나는 당신이 시도한 것과 그것이 얼마나 잘 작동했는지 듣고 싶습니다.


지금은 Constant Q 변환, Cepstrum 및 Wigner (–Ville) 분포를 살펴볼 수 있습니다. 또한 단시간 푸리에 스펙트럼의 위상 변화에서 주파수를 추출하는 방법에 대한 몇 가지 좋은 논문이 있습니다. 이는 주파수가 1000 배 더 큰 정밀도로 결정될 수 있기 때문에 매우 짧은 창 크기 (고 시간 분해능)를 사용할 수 있습니다. 기본 푸리에 변환의 주파수 해상도보다

이 모든 변환은 일반 푸리에 변환보다 오디오 처리 문제에 훨씬 더 적합합니다. 기본 변환의 결과를 개선하려면 에너지 재 할당의 개념을 살펴보십시오.


푸리에 변환사용하여 오디오 샘플에서 주파수 스펙트럼을 계산할 수 있습니다 . 이 출력에서 특정 음주파수 값을 사용하여 이를 샘플 중에 들리는 음 목록으로 바꿀 수 있습니다 . 일련의 샘플에서 샘플 당 가장 강한 음표를 선택하면 사용 된 여러 음표의 적절한 맵을 얻을 수 있습니다.이를 다른 음계 와 비교하여 해당 음표 조합을 포함하는 가능한 음계 목록을 얻을 수 있습니다.

사용중인 특정 음계를 결정하는 데 도움이되도록 가장 자주 듣는 음표를 메모 (말장난 의도 없음)하십시오. 서양 음악에서 음계의 근본은 일반적으로 가장 많이들을 수있는 음표이고 그 다음은 5 음, 4 음입니다. 공통 코드 , 아르페지오 또는 진행 과 같은 패턴을 찾을 수도 있습니다 .

Sample size will probably be important here. Ideally, each sample will be a single note (so that you don't get two chords in one sample). If you filter out and concentrate on the low frequencies, you may be able to use the volume spikes ("clicks") normally associated with percussion instruments in order to determine the song's tempo and "lock" your algorithm to the beat of the music. Start with samples that are a half-beat in length and adjust from there. Be prepared to throw out some samples that don't have a lot of useful data (such as a sample taken in the middle of a slide).


이 기사 에서 알 수있는 한 , 다양한 키에는 각각 고유 한 공통 주파수가 있으므로 오디오 샘플을 분석하여 가장 일반적인 음과 코드가 무엇인지 감지 할 수 있습니다. 결국, 샤프와 플랫의 동일한 구성을 가진 여러 건반을 가질 수 있습니다. 차이점은 건반이 시작되는 음과 그러한 건반의 코드입니다. 따라서 중요한 음과 코드가 나타나는 빈도가 당신이 그런 종류의 것을 알아낼 수있는 유일한 방법입니다. 많은 정보를 빠뜨리지 않고서는 실제 수학 공식에 대한 평신도의 설명을 얻을 수 없다고 생각합니다.

이것은이 분야에 대한 경험이 전혀없는 사람에게서 나온 것이며 그의 첫 번째 노출은이 답변에 연결된 기사입니다.


It's a complex topic, but a simple algorithm for determining a single key (single note) would look like this:

Do a fourier transformation on let's say 4096 samples (exact size depends on your resolution demands) on a part of the sample which contains the note. Determine the power peak in the spectrum - this is the frequency of the note.

Things are getting tighter if you have a chord, different "instruments/effects" or a non-homophonic music pattern.


First you need a pitch detection algorithm (e.g. autocorrelation).

You can use then your pitch detection algorithm to extract the pitch over a number of short time windows. After that you would need to see which musical key the sampled pitches fit best with.


If you need to classify a bunch of songs right now, then crowd-source the problem with something like Mechanical Turk.


Analysing the key is not the same thing as analysing the pitches. Unfortunately the entire concept of key is somewhat ambiguous, the different definitions typically tend to only share the concept of tonic, i.e. a central pitch/chord. Even if a good system for automatic transcription existed, there is no reliable algorithm for determining key.

ReferenceURL : https://stackoverflow.com/questions/3141927/algorithms-for-determining-the-key-of-an-audio-sample

반응형