わかりました、私は FFT について多くのことを読みましたが、tableView を構築するよりも少し複雑なようです。
再生中のオーディオ (iPod ライブラリから) を 3 つの範囲 (低、中、高) で分析する方法を探しています。FFT が機能していると思いますが、再生中のオーディオをフィルター処理 (ローパス、バンドパス、ハイパス) し、ピークも分析できるかどうかはわかりません。したがって、誰かが何が最善かを知っている場合 (つまり、最速の (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 を使用します。小鳥が私に言った、これは非推奨になるだろう、それで代替手段は何ですか?
だから基本的に:
分析を行うために、現在再生中のオーディオを取得するにはどうすればよいですか? MPMusicPlayerController を使用してサンプルを取得することはできますか? または、ライブラリを再生する AudioUnit 全体を構築する必要がありますか?
低域、中域、高域を分析する最速の方法 (CPU) は何ですか? フィルタリング?FFT? 他の何か?
購入した音楽の著作権でトラブルになることはありますか? 再生ファイルを PCA サンプルに変換しようとしたときに、次のエラーが発生することがあるためです。
VTM_AViPodReader[7666:307] * キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。
AVAudioSession全体が将来的に機能しない場合、FFTを実行する「新しい」方法は何ですか?