2010-04-12 6 views
1

wav 파일이 재생되는 키를 조 변경하려면 app을 쓰고 싶습니다 (재미로, 이미이 작업을 수행하는 응용 프로그램이 있음을 압니다) ... 내 기본 이해 방법 달성 될 수는wav 파일의 키를 조 변경하려면 푸리에 변환

3) 위상 주파수 공간을 이동

1) 매우 작은 블록들로 오디오 파일을 절단 (예를 들어 1/10 초)

2) 각 블록에 대해 FFT를 실행하는 것 어떤 키가 원하는지에 따라 위 또는 아래로 이동

4) 역 FFT를 사용하여 시간 영역

5) 모든 블록 함께

하지만 함께 다시 접착제하려고 할 때 변환 된 블록을 더 이상 지속 할 수 없을 것입니다 경우 지금 궁금하네요 접착제로 각 블록을 반환합니다. 연속성을 보장하기 위해 어떻게해야하는지 아이디어가 있습니까, 아니면 단지 아무 것도 걱정하지 않습니까?

답변

2

각 블록의 시간 샘플을 반으로 겹치게하여 첫 번째 블록 이후의 각 블록이 이전 블록의 마지막 N/2 샘플과 N/2 개의 새 샘플로 구성되도록합니다. 변환하기 전에 샘플에 일부 창을 적용해야합니다.

주파수를 이동 한 후 역 FFT를 수행하고 각 블록의 중간 N/2 샘플을 사용하십시오. IFFT 후에 최종 게인을 조정해야합니다.

물론 시간 샘플을 사인파와 혼합 한 다음 저역 통과 필터링을 수행하면 시간 영역에서도 동일한 시프트가 제공됩니다. 믹서의 주파수는 원하는 주파수 차이가됩니다.

+0

믹서가 아마도 OP가 찾고있는 것보다 더 많다고 생각합니다. 그러나 필터가 관련되어있는 경우 오버랩 저장 FFT 트릭이 정말 좋습니다. 자세한 내용은 http://en.wikipedia.org/wiki/Overlap-save_method를 참조하십시오. 만약 당신이 올바르게한다면, 당신은 창을 필요로하지 않습니다. 창은 분석 어플리케이션을위한 것입니다. – mtrw

+0

@larry 이것이 어떻게 불연속성을 해결하는지 보지 못했습니다 ... 결과 신호가 일반적으로 과거 블록과 위상이 맞지 않는 것처럼 보입니다. 사인파를 혼합하는 주파수에 관해서는, 나는 그 접근법에 익숙하지 않다. – tbischel

+0

@mtrw 링크를 이용해 주셔서 감사합니다. – tbischel

0

개별 웨이브를 다시 붙이려면 블록 사이에 제로 크로싱을 찾아야 할 수도 있습니다. 그렇지 않으면 블록 사이에서 클릭 또는 팝이 발생하는 것을 알 수 있습니다.

+0

그래, 그게 내가 염려했던 것이지. 경계에서 연속적으로 만드는 것만으로는 충분하지 않을 수도있다. 불연속적인 그래디언트 또는 2 차 미분도 나에게 클릭을 줄지 모른다. – tbischel

1

- 이것은 기본적인 중복-추가 방법보다 좀 더 정교하지만 훨씬 더 복잡 pitch-shifting 및/또는 time stretching/compression들에게 인기있는 알고리즘이다.

비 음성 샘플을 처리해야하는 경우 (예 : 음악이 있다면 several possibilities이 있지만 다른 응답에서 언급 한 오버랩 추가 FFT/수정/IFFT 접근법이 가장 좋은 방법 일 것입니다.

+1

PSOLA는 주로 음악이 아니라 연설을위한 것이라는 인상을 받았습니다. 이 올바른지? – tom10

+0

@ tom10 : 좋은 지적 - 얼마나 효과가 있을지 모르겠다. 음악.이것이 음성 이외의 응용 프로그램을위한 것이라면보다 기본적인 중첩 합산 접근 방식이 더 적절할 수 있습니다. 그에 따라 내 대답을 편집 할 것입니다. –