(iPhone) Live FFT с iPod
Хорошо, ребята, я прочитал много вещей о FFT, но это кажется немного сложнее, чем создание tableView.
Я ищу способ анализа воспроизводимого звука (из библиотеки iPod) в трех диапазонах (низкий, средний, высокий). Я думаю, что FFT выполняет свою работу, но я не уверен, смогу ли я отфильтровать (Lowpass, Bandpass и Highpass) воспроизводимый звук и также проанализировать пики. Поэтому, если кто-нибудь знает, что является лучшим (я имею в виду самый быстрый (процессор) способ сделать это, пожалуйста, помогите мне. Не будет никакого интерфейса, поэтому я не буду рисовать БПФ в окне (я думаю, что рисунок действительно ест много процессора).
Тогда я понятия не имею, как я могу проанализировать аудио. Все образцы FFT, которые я нашел, используют микрофон. Я не хочу использовать микрофон. Я видел, как что-то получало аудиофайл и экспортировал его в несжатый файл, но мне нужен анализ в реальном времени. Я взглянул на aurioTouch2, но я не понимаю, как я могу изменить вход с микрофона на iPod Library. Я думаю, часть, которую я ищу, находится здесь:
// 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;
(...)
Но я совершенно новичок во всех этих аудиоустройствах, поэтому я не могу понять, куда загружается вход. Затем упомянутый выше код использует AVAudioSession. Маленькая птичка сказала мне, что это будет устаревшим, так какова альтернатива?
Итак, в основном:
Как я могу получить воспроизводимое в данный момент аудио для проведения анализа? Могу ли я просто использовать MPMusicPlayerController и получить образцы? Или мне нужно собрать весь AudioUnit, который воспроизводит библиотеку?
Какой самый быстрый способ (ЦП) анализировать минимумы, средние и максимальные значения? Фильтрация? FFT? Что-то другое?
Будут ли у меня проблемы с авторскими правами на купленную музыку? Потому что я пытался преобразовать воспроизводимый файл в образцы PCA, и иногда у меня возникает эта ошибка:
VTM_AViPodReader [7666: 307] * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: '* - [AVAssetReader initWithAsset: error:] недопустимый параметр не удовлетворяет: asset!= ((Void *)0)'
Каков "новый" способ сделать FFT, если весь материал AVAudioSession не будет работать в будущем?
1 ответ
Вы не можете получить воспроизводимое в данный момент аудио (песочница безопасности предотвращает это) на iOS, если только ваше приложение не воспроизводит аудио с использованием определенных избранных API (Audio Queue, RemoteIO и т. Д.)
3 полосовых фильтра (сделанные с биквадром IIR) будут работать быстрее, чем БПФ. Но даже полное БПФ будет использовать очень маленький процент процессорного времени.
Приложение не может конвертировать или воспроизводить защищенную музыку из библиотеки iTunes в форме, в которой можно захватывать образцы.
БПФ находится в структуре ускорения, а не в аудио сеансе.