2013-09-05 5 views
3

좋아, 얘들 아, 내가 FFT 물건에 대해 많은 것들을 읽었지만, 비트보다 복잡한 tableView를 구축하는 것 같다.(iPhone) iPod에서 라이브 FFT

세 가지 범위 (낮음, 중간, 높음)로 재생 오디오 (iPod 라이브러리에서)를 분석하는 방법을 찾고 있습니다. 나는 FFT가 일을하고 있다고 생각하지만, (Lowpass, Bandpass, Highpass) 오디오를 연주하고 봉우리를 분석 할 수 있는지 잘 모르겠습니다. 그래서 누군가가 최선인지 알고 있다면 (가장 빠른 (CPU) 방법으로 나를 도와주세요.) 프론트 엔드가 없으므로 FFT를 창에 그리지 않을 것입니다. 드로잉은 많은 CPU를 먹는다.)

그럼 내가 어떻게 오디오를 분석 할 수 있었는지 모르겠다. 내가 찾은 모든 FFT 샘플 코드는 마이크를 사용하고있다. 나는 마이크를 사용하고 싶지 않다. 오디오 파일을 가져 와서 압축되지 않은 파일로 내보내는 것이지만 라이브 분석이 필요합니다. aurioTouch2를 살펴 봤지만 마이크에서 iPod 라이브러리로 입력을 어떻게 바꿀 수 있는지 알지 못합니다. . 내가 찾고있는 부분은 여기에 있습니다 :

// Initialize our remote i/o unit 

inputProc.inputProc = PerformThru; 
inputProc.inputProcRefCon = self; 

CFURLRef url = NULL; 
try { 
    url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFStringRef([[NSBundle mainBundle] pathForResource:@"button_press" ofType:@"caf"]), kCFURLPOSIXPathStyle, false); 
    XThrowIfError(AudioServicesCreateSystemSoundID(url, &buttonPressSound), "couldn't create button tap alert sound"); 
    CFRelease(url); 

    // Initialize and configure the audio session 
    XThrowIfError(AudioSessionInitialize(NULL, NULL, rioInterruptionListener, self), "couldn't initialize audio session"); 

    UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 
    XThrowIfError(AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory), "couldn't set audio category"); 
    XThrowIfError(AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self), "couldn't set property listener"); 

    Float32 preferredBufferSize = .005; 
    XThrowIfError(AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize), "couldn't set i/o buffer duration"); 

    UInt32 size = sizeof(hwSampleRate); 
    XThrowIfError(AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &size, &hwSampleRate), "couldn't get hw sample rate"); 

    XThrowIfError(AudioSessionSetActive(true), "couldn't set audio session active\n"); 

    XThrowIfError(SetupRemoteIO(rioUnit, inputProc, thruFormat), "couldn't setup remote i/o unit"); 
    unitHasBeenCreated = true; 

    drawFormat.SetAUCanonical(2, false); 
    drawFormat.mSampleRate = 44100; 
    (...) 

하지만이 모든 AudioUnits를 처음 접해 보니 입력이로드되는 위치를 이해할 수 없습니다. 그런 다음 위에서 언급 한 코드는 AVAudioSession을 사용합니다. 작은 버디가 말해 줬어, 이건 더 이상 사용되지 않을거야, 그래서 대체 뭐야? 그래서, 기본적으로

:

  1. 어떻게 내가하는 분석을 수행하기 위해 현재 재생중인 오디오를받을 수 있나요? MPMusicPlayerController를 사용하여 샘플을 얻을 수 있습니까? 라이브러리를 재생하는 전체 AudioUnit을 제작해야합니까?

  2. 최저, 중간 및 최고를 분석하는 가장 빠른 방법은 무엇입니까? 필터링 중입니까? FFT? 다른 것?

  3. 구입 한 음악의 저작권 문제가 발생합니까?

    VTM_AViPodReader [7666 : 307] 응용 프로그램 을 종료 * 인해 캐치되지 않는 예외 'NSInvalidArgumentException', 이유에 : 나는 PCA 샘플에 재생 파일을 변환하기 위해 노력하고 있기 때문에 때로는이 오류가 '*을 - [AVAssetReader initWithAsset : error :] 잘못된 매개 변수가 아닙니다. satisfay : asset! = ((void *) 0) '

  4. 향후 AVAudioSession 전체 기능이 작동하지 않을 경우 FFT를 수행하는 "새로운"방법은 무엇입니까? ?

답변

1

당신은 당신의 응용 프로그램은 특정 선택의 API (오디오 큐, RemoteIO 등)

를 사용하여 오디오를 재생 한 경우를 제외하고 현재 재생중인 오디오, iOS에서 (보안 샌드 박스는이 방지) 얻을 수 없다

3 밴드 패스 필터 (IIR 바이 쿼드로 제작 됨)는 FFT보다 빠릅니다. 그러나 전체 FFT조차도 CPU 시간의 아주 작은 비율을 사용합니다.

앱은 샘플을 캡처 할 수있는 형태로 iTunes 보관함에서 보호 된 음악을 변환하거나 재생할 수 없습니다.

FFT가 오디오 세션이 아닌 가속 프레임 워크에 있습니다.