주파수를 유지하면서 음악 재생 속도 저하


10

음악 오디오를 느린 속도로 재생하면 피치 (주파수)가 낮아집니다. 주파수를 동일하게 유지하면서 노래 재생 속도를 늦추는 도구와 이론이 있습니까? 윈도우 푸리에 변환 또는 웨이블릿 변환을 수행 할 수 있다고 가정합니다. 창 크기를 미리 선택하거나 웨이블릿 기준을 동적으로 선택해야합니다. 이를 수행하기위한 구체적이고 상세한 이론과 적용이 있습니까?


1
아래 제공된 답변 외에도 자세한 내용 은 이 링크 를 참조하십시오.
A_A

답변:


5

예, 우리 중 일부는 피치에 영향을 미치지 않고 속도를 높이거나 늦출 수 있습니다. 일부 사람들은이 시간 스트레치 응용 프로그램을 호출합니다. 다른 방법으로 할 수 있습니다. 주파수 도메인 또는 시간 도메인에서 할 수 있습니다. 선택해야합니다. 당신에게 가장 적합한 것은 각각의 장점과 단점을 찾을 수 있습니다.

시간 영역 :

Time Domain에서는 다음과 같은 기술을 시도해 볼 수 있습니다.

  • TDHS (시간 도메인 고조파 스케일링)
  • SOLA (동기 오버랩 추가)
  • PSOLA (피치 동기 오버랩 추가)
  • WSOLA (파형 유사성 오버랩 추가)

장점 : 빠르며, 일부 알고리즘은 이해하기 쉽고 단 음성 사운드에서 좋은 품질입니다.

단점 : 일반적으로 올바른 위치에 스플 라이스하기 위해서는 아주 좋은 피치 트랙이 필요합니다. :-( 따라서 피치 트랙이 실패하거나 Poliphonic 사운드에서 작동하지 않으면이 알고리즘은 많은 결함 / 인공물을 줄 것입니다 출력 사운드에서.

주파수 영역 :

주파수 영역에서 알고있는 모든 시간 스트레치는 위상 보코더 기술을 기반으로 합니다.

장점 : 대음 또는 단음에서 작동합니다.

단점 : 모든 수학을 이해하는 것은 고통스럽고 구현은 약간 어렵습니다. 시간 도메인 코드와 같이 빠르지 않습니다. 음성에 대해서는 시간 도메인 결과를 선호하며 표준 단계 보코더의 결과를 향상시키는 몇 가지 트릭은 공유되지 않습니다.

나는 창과 홉 크기가 위상 보코더 품질의 열쇠 중 하나라고 말할 수 있습니다. 일반적으로 우리는 4x재 합성을 위해 오버랩을 선택합니다. 크기의 한 창 크기 4096는 귀에 충분합니다 (물론이 크기에 대한 처리 능력이있는 경우) 표준 위상 보코더는 일부 잔향 효과를 추가하여 위상을 잠글 필요가있는 이런 종류의 문제를 피할 수 있습니다.

데이터에 대해서는 Miller PuckettePortnoff 용지를 참조하십시오.


답변 주셔서 감사합니다. 가장 순진한 접근 방식의 문제점은 푸리에 시리즈에 창을 표시하지 않고 전체 시간 간격의 함수로 전체 시간 신호를 확장하고 모든 주파수에 상수를 곱하는 것입니다. 시간 영역의 로컬 오류가 모든 푸리에 계수에 영향을 줄 것이라는 것을 이해합니다. 그 외에도,이 순진한 비 국지적 접근의 함정은 무엇입니까?
Hans

나는 그런 것을 시도하지 않았으며, 효과가있을 수 있습니다. 명백한 문제는 이것이 상당히 비쌀 수 있다는 것입니다. 확실히 효율적인 방법은 아닙니다. 44100Hz에서 샘플링 된 오디오 (1 분)가 있다고 상상해보십시오. 당신은 당신이에 푸리에 적용해야합니다 제안하는 무엇 44100 * 60 = 2646000, 그래서 같은 처리를 실시간으로 시도 잊지 번 과정에 지점 ,
ederwander을

1
나는 이전에 제안한 것이 순수한 수학적 의미로 작동한다고 생각하지 않습니다 (비용과 오류 민감도 무시).
한스

3

설명하는 도구 / 이론은 실제로 오디오 타임 스케일 수정이라고하는 음악 기술에 대한 광범위한 연구 분야입니다. 이 필드의 큰 구성 요소는 시간이 늘어난 후 주파수의 가청 변경을 방지 할 수있는 방법입니다. 이는 애플리케이션의 제약이나 목표에 따라 주파수 및 시간 도메인 방법으로 접근 할 수 있습니다. 오디오 타임 스케일 / 피치 수정에 대한 wikipedia 항목은 좋은 출발점입니다.

주파수 / 웨이블릿 기준을 사용하여 접근하려는 경우 창 크기와 기준 선택은 신호를 지역화 할 수있는 정도에 영향을줍니다. STFT를 예로 사용하면 고정 된 정현파에서는 긴 창이 잘 작동하지만 과도 전류는 파괴됩니다. 더 짧은 창은 주파수 영역 위치를 결정하는 데있어 바람직한 과도 응답을 제공합니다. 다른 웨이블릿베이스의 성능은 신호의 프로젝션 특성에 따라 달라집니다.


답변 주셔서 감사합니다. 이 문제에 대한 웨이블릿 적용에 대한 참조가 있습니까?
Hans

ederwander의 답변 아래 내 의견을 참조하십시오. 감사.
Hans

2

다음은 Stephan M. Bernsee의 C ++ (smbPitchShift.cpp)에서 간단하고 유용한 자습서 기능에 대한 링크입니다. 피치 기능을 변경하지 않고도 음악을 느리게하거나 빠르게 만들 수 있습니다.

그는 WOL (Wide Open License)에 따라이 코드를 발표했습니다. 내 응용 프로그램 내 에서 mp3 파일을 재생하고 동시에 해당 mp3 신호에서 피치 감지를 수행하는 동안 실시간으로 음악 속도를 늦추는 기능을 조정할 수있었습니다 .

또한 음악과 같은 오디오 신호의 시간 스트레칭 및 피치 시프 팅에 대한 자세한 설명이 포함 된 Bernsee 웹 사이트에 대한 링크도 포함했습니다.

https://github.com/AndyA/BatPhone/blob/master/pitchshift.c

http://blogs.zynaptiq.com/bernsee/time-pitch-overview/


원래 코드는 적용되지 않습니다. 원래 코드는 적용됩니다 time stretch. Pitch Shift이 경우 결합해야하는 시간 스케일 수정을 적용하려면 Pitch Shifit + Resample (interpolation)Bernsee의 코드는 40961 옥타브 (위 또는 아래)의 피치 시프트를 수행 할 수있는 크기의 창을 사용하여 잘 작동합니다. 즉, 2.0x-0.5x 사이의 요소를 사용하여 좋은 품질로만 시간 스케일을 만들 수 있으며, 잘 구축 된 위상 보코더는 동일한 창 크기를 사용하여 더 나은 결과를 얻을 수 있으며,이를 추정 할 수 있습니다. 품질이 더 좋은 요소
ederwander

죄송합니다. 이제 타임 스트레치를 완료하기 위해 리샘플링을 적용해야했기 때문에 원래 피치가 변경되지 않았습니다. Bernsee가 GitHub에 링크 된 버전 이후로 코드를 약간 변경 한 것 같습니다. 그의 최신 코드는 그의 웹 사이트에서 다운로드 할 수 있으며, 원래 사양에서 변경 범위를 넓힐 수 있습니다. 나는 그의 원래 코드를 조정하여 8x만큼 피치 시프트를 올릴 수 있었다.
제임스 폴 밀라 드

코드와 Bernsee 페이지 사이에는 차이가 없습니다. 주요 수학은 여전히 ​​동일합니다. 볼 수있는 가장 큰 차이점 8192은 다운로드 페이지의 코드에서 창 크기 = 이므로 처리에 4 배 더 많은 포인트를 수행해야합니다 , 나는 반 창 크기로 8192/2=4096당신은 위상 보코더의 비밀을 사용하여 동일한 작업을 수행 할 수 있다고 말합니다. 여기서 요점은 훨씬 적은 처리로 품질을 유지할 수 있다는 것입니다.
ederwander

BatPhone에 GitHub 링크를 제공했지만 내 코드가 아닙니다. 인터넷 검색에서 smbPitchShift ()를 볼 수 있도록 가져 왔습니다. 내 코드는 훨씬이 파일에 Bernsee의 버전에서 수정 및 거주된다 github.com/CreativeDetectors/PitchScope_Player/blob/master/Src/...
제임스 폴 밀라

그래, 지금 볼 수 있습니다, 그것은 정말 리 샘플입니다, 당신은 내 위상 보코더 가 실제로 작동하는 것을 보거나 듣고 싶어 할 것 입니다.
ederwander
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.