2011-11-27 4 views
6

프레임의 FFT에서 얻은 파워 스펙트럼에서 기본 주파수를 추출하는 피치 검출 프로그램을 만들고 있습니다. 이것은 내가 지금까지 가지고있는 것입니다 :FFT 피치 탐지 - 멜로디 추출

  • 프레임으로 입력 오디오 신호를 나눕니다. 해밍 윈도우
  • 프레임 SQRT의 FFT 및 크기를 계산으로
  • 다중 프레임 (실제^2 + IMG^2)
  • 주파수 변환 고조파 제품 스펙트럼에 의해 기본 주파수 (피크)을 찾아 (예 : ~ 440 Hz는 A4 임)

이제는 각 프레임에 대해 0에서 87 사이의 값으로 정수가 생성됩니다. 각 정수는 내가 찾은 공식에 따라 피아노 음과 일치합니다. here. 나는 지금 계산 된 음을 기반으로 소리를 합성하여 입력 신호의 멜로디를 모방하려고 노력 중입니다. 근본적인 주파수에 해당하는 크기와 주파수의 사인파를 간단히 생성하려고 시도했지만 그 결과는 원래의 사운드 (거의 무작위로 울리는 비프 음처럼 들릴 수 없음)처럼 들리지 않았습니다.

나는 음악을 이해하지 못하기 때문에 기본 주파수에서 얻은 정보를 기반으로 입력 (악기, 음색, 악기 + 음색)과 비슷한 멜로디로 사운드를 생성 할 수 있습니까? 그렇지 않은 경우 현재 가지고있는 코드를 사용하여 어떤 다른 아이디어를 시도 할 수 있습니까?

감사합니다.

+0

"사운드의 중요한 부분을 찾고 소리를들을 수없는 부분을 무시하십시오"(FFT + 피크 감지로 모델링 한) 기본적인 프로세스가 MP3 인코딩의 기초라는 것을 알고 싶을 것입니다. 분명히 "중요한 부분"에 대한 아이디어는 훨씬 더 매력적입니다. –

답변

3

fft 프레임 타이밍과 길이에 맞게 동기화 된 노트를 사용하고 전체 스펙트럼이 HPS 피치 견적 도구와 호환되는 노트 사운드 만 사용하면 합성 음악에서이 방법을 사용할 수 있습니다. 일반 음악에서는 그렇지 않습니다.

더 일반적인 경우 자동 음악 녹음은 여전히 ​​간단한 5 단계 해결 방법이없는 연구 문제인 것처럼 보입니다. 피치는 인간의 심리 음향 현상입니다. 사람들은 지역 스펙트럼에 존재할 수도 있고 그렇지 않을 수도있는 음을들을 것이다. HPS 피치 추정 알고리즘은 FFT 피크를 사용하는 것보다 훨씬 더 신뢰할 만하지만 많은 종류의 음악 사운드에서도 여전히 실패 할 수 있습니다. 또한 음표 경계 또는 과도 신호를 교차하는 모든 프레임의 FFT에는 추정 할 단일 피치가 명확하지 않을 수 있습니다.

3

아마 피치를 계산하기 위해 FFT에서 피크를 선택하고 싶지는 않을 것입니다. 아마 당신은 자기 상관을 원할 것입니다. 나는 아주 비슷한 질문에 대한 긴 대답을 썼습니다 : Cepstral Analysis for pitch detection

4

당신이 작업하고자하는 음악 내용에 크게 달려 있습니다 - 단음 녹음 (즉, 단일 악기 또는 음성)의 피치 추출은 다음과 같이 동일하지 않습니다. 폴리 포닉 (polyphonic) 믹스에서 단일 악기의 피치를 추출합니다 (예 : 폴리 포닉 녹음에서 멜로디의 피치 추출).

모노 포닉 피치 추출에는 시간 영역과 주파수 영역에서 모두 구현할 수있는 다양한 알고리즘이 있습니다. 당신이 원하는 경우

그러나, 둘 다 잘 작동하지 않습니다 : 예 부부는 둘 다에 대한 자세한 링크는 위키 피 디아에서 제공되는 음 (시간 영역) 및 HPS (주파수 영역)를 포함 폴리 포닉 (polyphonic) 소재에서 멜로디를 추출합니다.대위법 음악에서 멜로디 추출은 여전히 ​​연구 문제이며, 따라 할 수있는 간단한 단계가 없습니다. 거기에 당신이 (만하지만 비상업적 이용을위한) 시도 할 수있는 연구 커뮤니티에서 제공하는 몇 가지 도구 즉,이 있습니다

합성 할 때 출력을 추출하는 연속 피치 커브를 합성하는 것이 좋습니다. 가장 쉬운 방법은 매 X ms (예 : 10)마다 피치를 계산하고 10 ms마다 주파수를 변경하는 사인파를 합성하여 연속 단계를 보장하는 것입니다. 이렇게하면 결과 사운드가 훨씬 자연스러워지며 연속 피치 커브를 개별 노트로 양자화하는 데 따른 추가 오류를 피할 수 있습니다 (이는 또 다른 문제입니다).

1

귀하의 접근 방식은 다음과 같은 이유로, 어떤 일반적으로 음악, 예를 들어 작동하지 않습니다 본질적으로

  1. 음악은 동적입니다. 음악에 존재하는 모든 사운드가 묵음, 어택, 서스테인, 쇠퇴 및 다시 침묵의 뚜렷한 기간에 의해 변조된다는 것을 의미합니다. 그렇지 않으면 사운드의 엔벨로프라고도합니다.

  2. 악기 음 및 인간의 음성 메모를 단일 음으로 올바르게 합성 할 수 없습니다. 이 음표는 근본적인 음색과 많은 하모닉스로 합성되어야합니다.

  3. 그러나 악기 음이나 화음의 기본 톤과 고조파를 합성하는 것만으로는 충분하지 않으며 위의 1에서 설명한 것처럼 음표의 인 벨롭을 합성해야합니다.

  4. 또한 악기 나 보컬과 같은 음악에서 멜로디 악절을 합성하려면 악절의 모든 음표에 대해 위의 항목 1-3을 합성해야하며 시작 부분과 관련된 모든 음표의 타이밍도 합성해야합니다 통과의.

  5. 마지막 믹스 레코딩에서 개별 악기 또는 사람의 목소리를 분석적으로 추출하는 것은 매우 어려운 문제이며이 방법으로는 문제가 해결되지 않으므로 해결 방법으로 문제 1-4를 올바르게 처리 할 수 ​​없습니다. 한마디로

, 엄격한 분석 방법을 사용하여 음악 녹음의 최종 믹스에서 완벽에 가까운 음악 전사를 추출하려고하는 방법은, 최악의 경우 거의 확실히 실패 할 운명, 그리고 기껏에 빠진다 선진 연구의 영역.

이 난관에서 진행하는 방법은 작업의 목적이 무엇인지, OP에서 언급하지 않은 것이 무엇인지에 달려 있습니다.

이 작품은 상용 제품에서 사용 되나요 아니면 취미 프로젝트입니까?

상업적 작품의 경우 다양한 추가 접근법이 필요하지만 비용이 많이 드는 방법이나 비용이 많이 드는 방법이 있습니다. 그러나 이러한 접근 방식의 세부 사항은 작업의 목표에 따라 다릅니다. 닫는 노트로

, 당신의 합성으로 인해 다음과 무작위 경고음 같은 소리 :

  1. 귀하의 기본적인 톤 감지기는 효과에 근본적인 아마 가짜를 생성하여 롤링 FFT 프레임의 타이밍에 연결되어 톤은 각 롤링 FFT 프레임의 시작 시간에 표시됩니다.

  2. 왜 탐지 된 기본 톤이 가짜인지? 왜냐하면 당신은 뮤지컬 샘플을 임의로 (FFT) 프레임으로 클리핑하기 때문에, 어쨌든 중간 음표와 동시에 동시에 많은 음표를 잘라내어 음표의 스펙트럼 시그니처를 왜곡하기 때문입니다.

  3. 분석을 기반으로 봉투 정보를 얻을 수있는 방법이 없기 때문에 감지 된 메모의 봉투를 합성하려고하지 않고 있습니다.

  4. 그러므로 합성 된 결과는 롤링 FFT 프레임의 델타 t에 의해 시간적으로 간격을 둔 일련의 순수 사인 틱입니다. 각각의 짹짹은 서로 다른 엔벨로프 크기를 지닌 다른 주파수와 아마 모양이 직사각형 인 엔벌 로프 일 수 있습니다. ,

    Musical instrument spectra to 102.4 KHz

    Musical instrument note spectra and their time-domain envelopes

    각 노트를 구성하는 많은 순수한 음색 특히 관찰 :

는 이러한 참조에서 살펴보고, 음표의 복잡한 성격을 보려면 그리고 각 음표의 시간 영역 엔벨로프의 복잡한 모양. 서로 다른 음표의 다양한 타이밍은 일반적인 음악에서 동시 발음 (다중 음색이 동시에 울리는)처럼 음악의 추가 필수적인 부분입니다.

이러한 음악 요소들은 모두 자율적 인 음악 녹음에 대한 엄격한 분석적 접근 방식을 만들기 위해 공모합니다.