2010-12-22 2 views
5

iPhone 용 음악 시각화 응용 프로그램을 디자인하고 있습니다.푸리에 변환을 기반으로 한 iPhone 음악 Visualiser 만들기

나는 iPhone의 마이크를 통해 데이터를 집어 푸리에 변환 (Fourier Transform)을 실행 한 다음 시각화를 생성하여이 작업을 수행하려고 생각했습니다.

가장 좋은 예는 aurioTuch이며 FFT 데이터를 기반으로 완벽한 그래프를 생성합니다. 그러나 나는 내 자신의 프로젝트에서 aurioTouch를 이해/복제하기 위해 고심하고있다.

정확히 aurioTouch가 FFT를 수행하기 전에 마이크에서 데이터를 가져 오는 위치를 정확히 이해할 수 없습니까?

내 프로젝트에서이 작업을 수행하는 데 사용할 수있는 다른 코드 예제가 있습니까? 아니면 다른 팁?

+0

분명히 묻는 것에 대해 유감스럽게 생각하지만 프로그램을 디버그 모드로 단계별로 따라 가려고 했습니까? 마주 치게 된 정확한 어려움은 무엇입니까? –

+0

예 프로그램 코드를 읽었습니다. 여기서 두껍게 느껴지 겠지만 마이크에서 정확히 어디서 데이터를 가져올 지 판단 할 수 없습니다. 이것에 대한 통찰력? – Dave

답변

3

마이크의 입력을 직접 사용할 계획이므로 관련 샘플 코드에 익숙해 질 수있는 좋은 기회라고 생각했습니다.

내가 코드를 읽기의 단계를 역 추적합니다 (이 오디오는 어떻게 든이 클래스에 도착하는 명백한 때문에)

  1. SpectrumAnalysis.cpp 오프 시작을, 당신이 볼 수있는 수업 방법 SpectrumAnalysisProcess 2 번째 입력 인수가 const int32_t* inTimeSig입니다. 입력 시간 신호가 우리가 찾고있는 신호이기 때문에 유망한 출발점으로 들립니다. 이 방법에 오른쪽 클릭 메뉴 항목 Find in project를 사용
  2. , 당신은 명백한 정의 & 선언을 제외하고,이 방법은 그것의 2 인자 (단계에서 inTimeSigmAudioBuffer을 가져옵니다 FFTBufferManager::ComputeFFT 방법, 내부에서만 사용되는 것을 볼 수 있습니다 1). 이 클래스 데이터 멤버를 찾는 것은 2 또는 3 개 이상의 결과를 제공하지만, 대부분은 다시 정의/메모리 할당 등입니다. 흥미로운 검색 결과는 메서드 내에서 memcopy에 대한 인수로 mAudioBuffer이 사용되는 것입니다.
  3. 다시 검색 옵션을 사용하면 PerformThru이라는 메서드 내에서 FFTBufferManager::GrabAudioData이 한 번만 호출됩니다. 이 메서드에는 AudioBufferList 유형의 ioData (유망한 소리) 입력 인수가 있습니다.
  4. PerformThru을 찾으려면 다음 줄에서 사용되는 것을 확인하십시오. inputProc.inputProc = PerformThru; - 거의 다 왔어. : 콜백 함수를 등록하는 것처럼 보입니다. inputProc의 유형을 찾으려면 실제로는 AURenderCallbackStruct임을 확인하십시오. 콜백은 샘플을 제공해야하는 오디오 프레임 워크에 의해 호출됩니다.

당신은 아마 깊은 이해를 얻을 수 AURenderCallbackStruct (또는 더 낫다는 Audio Unit Hosting)에 대한 설명서를 읽을 필요하지만, 나는이 당신에게 좋은 출발점을 주었다 바랍니다.

+0

도움 이타마르에게 감사드립니다. 그러나 나는 지금 또 다른 문제에 직면 해있다. 나는 마이크 데이터를 녹음하고 iPod 라이브러리에서 음악을 동시에 재생할 수없는 것처럼 보였다. 이것에 대한 통찰력? – Dave

+0

아마도 이러한 링크가 도움이 될 것입니다 : http : // atastypixel.co.kr/blog/using-remoteio-audio-unit/및 http://cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html –

관련 문제