(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. Маленькая птичка сказала мне, что это будет устаревшим, так какова альтернатива?

Итак, в основном:

  1. Как я могу получить воспроизводимое в данный момент аудио для проведения анализа? Могу ли я просто использовать MPMusicPlayerController и получить образцы? Или мне нужно собрать весь AudioUnit, который воспроизводит библиотеку?

  2. Какой самый быстрый способ (ЦП) анализировать минимумы, средние и максимальные значения? Фильтрация? FFT? Что-то другое?

  3. Будут ли у меня проблемы с авторскими правами на купленную музыку? Потому что я пытался преобразовать воспроизводимый файл в образцы PCA, и иногда у меня возникает эта ошибка:

    VTM_AViPodReader [7666: 307] * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: '* - [AVAssetReader initWithAsset: error:] недопустимый параметр не удовлетворяет: asset!= ((Void *)0)'

  4. Каков "новый" способ сделать FFT, если весь материал AVAudioSession не будет работать в будущем?

1 ответ

Решение

Вы не можете получить воспроизводимое в данный момент аудио (песочница безопасности предотвращает это) на iOS, если только ваше приложение не воспроизводит аудио с использованием определенных избранных API (Audio Queue, RemoteIO и т. Д.)

3 полосовых фильтра (сделанные с биквадром IIR) будут работать быстрее, чем БПФ. Но даже полное БПФ будет использовать очень маленький процент процессорного времени.

Приложение не может конвертировать или воспроизводить защищенную музыку из библиотеки iTunes в форме, в которой можно захватывать образцы.

БПФ находится в структуре ускорения, а не в аудио сеансе.

Другие вопросы по тегам