나는 안드로이드 플랫폼에서 기타 게임을 개발하려고합니다.안드로이드의 기타 피치 감지
그리고 기타 코드/문자열의 주파수를 얻으려면 실시간 피치 감지가 필요합니다.
내가내가 사용할 수있는 방법 두 가지를 찾을 수 있습니다 (기타 줄/코드의 종류 입력 재생) 입력을 분석 한 후 마이크 입력을 얻을 것이다
, 하나는 음과, 또 다른입니다 하나는 FFT입니다.
더 나은 성능과 정확한 결과를 얻을 수있는 방법은 무엇입니까?
나는 안드로이드 플랫폼에서 기타 게임을 개발하려고합니다.안드로이드의 기타 피치 감지
그리고 기타 코드/문자열의 주파수를 얻으려면 실시간 피치 감지가 필요합니다.
내가내가 사용할 수있는 방법 두 가지를 찾을 수 있습니다 (기타 줄/코드의 종류 입력 재생) 입력을 분석 한 후 마이크 입력을 얻을 것이다
, 하나는 음과, 또 다른입니다 하나는 FFT입니다.
더 나은 성능과 정확한 결과를 얻을 수있는 방법은 무엇입니까?
'피치'이 실제로 무엇인지 이해해야합니다 (아래의 위키 백과 링크 참조). 기타 또는 피아노에서 단일 음을 만들었을 때 소리가 들리는 진동의 한 주파수가 아니라 수학적으로 다른 여러 주파수에서 발생하는 여러 소리 진동의 합성이 있습니다. 다른 주파수에서 진동의 복합체의 요소를 고조파 또는 부분 음이라고합니다. 예를 들어 피아노의 미들 C 키를 누르면 합성 고조파의 개별 주파수는 기본 주파수로 261.6 Hz에서 시작되고 523 Hz는 제 2 고조파, 785 Hz는 제 3 고조파, 1046 Hz는 4 차 고조파 등이 될 수 있습니다. 이후의 고조파는 기본 주파수 261.6 Hz (예 : 2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046)의 정수배입니다.
다음은 GitHub.com에서 Windows에서 재생되는 동안 다성 음악 MP3 파일에서 실시간 피치 검색을 수행 할 수있는 이상한 2 단계 알고리즘의 C++ 소스 코드입니다. 이 무료 응용 프로그램 (PitchScope Player, 웹에서 사용 가능)은 MP3 녹음시 기타 또는 색소폰 솔로의 음을 감지하는 데 자주 사용됩니다. Windows 용 실행 파일을 다운로드하면 선택한 MP3 파일에서 알고리즘을 볼 수 있습니다. 이 알고리즘은 MP3 또는 WAV 음악 파일 내에서 주어진 시간에 가장 지배적 인 음조 (음표)를 감지하도록 설계되었습니다. 음표 세트는 MP3 녹음 중 주어진 순간에 가장 지배적 인 음조 (음표)의 변화로 정확하게 추론됩니다.
수정 된 DFT Logarithmic Transform (FFT와 유사)을 사용하여 피크 레벨을 가진 주파수를 찾아 이러한 가능한 고조파를 먼저 감지합니다 (아래 다이어그램 참조). 수정 된 로그 DFT에 대한 데이터를 수집하는 방식 때문에 신호에 윈도우 기능을 적용 할 필요가 없으며 추가 및 중첩 할 필요가 없습니다. DFT는 주파수 채널을 대수적으로 배치하여 기타, 색소폰 등의 음표에서 고조파가 생성되는 주파수와 직접 정렬되도록합니다.
내 피치 감지 알고리즘은 실제로 2 단계 프로세스입니다. a) ScalePitch가 감지됩니다 ('ScalePitch'에는 12 가지 피치 값이 있습니다 : {E, F, F #, G, G #, A, A #, B, C, C#, D, D #}) b) 결정되면, 옥타브는 4 가지 옥타브 - 후보 노트에 대한 모든 고조파를 조사하여 계산됩니다. 이 알고리즘은 다성 음악 MP3 파일 내에서 특정 시간에 가장 지배적 인 음조 (음표)를 감지하도록 설계되었습니다. 그것은 대개 악기 솔로의 음표에 해당합니다. 내 Two Stage Pitch Detection 알고리즘에 대한 C++ 소스 코드에 관심이있는 사용자는 GitHub.com의 SPitchCalc.cpp 파일 내 Estimate_ScalePitch() 함수에서 시작하려고 할 수 있습니다. 다음은
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
https://github.com/CreativeDetectors/PitchScope_Player
는 화음 MP3 녹음에 기타 솔로의 3 초 (내 C++ 소프트웨어에 의해 생성) 대수 DFT의 이미지입니다. 솔로 연주 중에 기타의 개별 음표에 고조파가 나타나는 모습을 보여줍니다.이 로그 DFT의 각 음표에 대해, 각 하모닉은 동일한 시간 폭을 갖기 때문에 수직으로 연장되는 여러 고조파를 볼 수 있습니다. 음표의 옥타브가 결정되면 기본의 빈도를 알 수 있습니다.아래도 I는 (즉, 기본 정확한)는, 그 상태에 대한 ScalePitch가 결정되면 정확한 옥타브 후보 주를 선택하기 위해 개발 옥타브 검출 알고리즘을 보여준다. C++의 메소드를보고 싶다면 FundCandidCalcer.cpp라는 파일 내의 Calc_Best_Octave_Candidate() 함수로 가야합니다.이 함수는 GitHub의 소스 코드에 들어 있습니다.
귀하의 질문은 여기에 속하지 않습니다. http://sound.stackexchange.com/ –
명확한 답변 - 피치 감지가 어렵지 않고 사람들이이 기술을 결합하여 여러 가지 방법으로 결합합니다. 그 이유는 A4와 같은 피치는 440Hz의 기본 주파수를 가지지 만 880 (및 220!) Hz의 고조파도 있기 때문입니다. 실제 데이터가있는 예 : http://stackoverflow.com/questions/39230595/how-to-get-the-fundamental-frequency-using-harmonic-product-spectrum 이상 적으로 이것을 위해 Android 라이브러리/SDK를 찾을 수 있습니다. 당신. –
마이크에서 입력을 얻은 다음 입력 (기타 줄/코드의 종류를 연주하는 입력)을 분석합니다. 어떻게 할 수 있습니까? @ 아흐메드 파시 – paul9508