ios core audio: изменение aurioTouch для сохранения данных pcm

В качестве упражнения я пытаюсь изменить aurioTouch так, чтобы он сохранял первые 60 секунд PCM, которые вошли через микрофон. Я избегаю libs более высокого уровня, потому что я хочу создать некоторую обработку с низкой задержкой в ​​реальном времени. Я сделал это, просто создав большой файл saveBuffer, а затем просто добавив значение data_ptr [2], хранящееся в drawBuffers [] для каждого из «inNumberFrames» для каждого вызова PerformThru … Затем, через 60 секунд, я сбрасываю буфер на диск одним выстрелом.

Я пробовал этот код, подавая единый клик. Проблема заключается в том, что когда я визуализую данные saveBuffer в gnuplot, я получаю пики в неравномерном времени, на 30-40% от устойчивого клика, что означает, что некоторые пики близки друг к другу, а другие далеко друг от друга. Я вижу, что входные данные нажимают .wav и что это очень даже, но график saveBuffer имеет странные пики. Это заставляет меня задаться вопросом, правильно ли я сохраняю данные pcm? Возможно, я как-то задерживаюсь и теряю данные?

Изменения в PerformThru () У меня есть:

{// allocate buffer static int * saveBuffer = (int *) malloc (10000000 * sizeof (int)); , , ,

SInt8 *data_ptr = (SInt8 *)(ioData->mBuffers[0].mData); for (i=0; i<inNumberFrames; i++) { if ((i+drawBufferIdx) >= drawBufferLen) { cycleOscilloscopeLines(); drawBufferIdx = -i; } drawBuffers[0][i + drawBufferIdx] = data_ptr[2]; // XXXX I added this line if ( saveBuffer ) { saveBuffer[ saveBufferIdx++ ] = ( data_ptr[ 2 ] ); } data_ptr += 4; } // XXX - I added this block: dump saveBuffer after 60 seconds if ( saveBuffer && ( CAHostTimeBase::HostDeltaToNanos( initialHostTime, inTimeStamp->mHostTime ) / 1000000000 ) > 60 ) { std::ofstream bufferOut; bufferOut.open( "pcmBuffer.txt" ); for ( UInt64 i = 0; i < saveBufferIdx; i++ ) { bufferOut << saveBuffer[ i ] << std::endl; } bufferOut.close(); free( saveBuffer ); saveBuffer = 0; } drawBufferIdx += inNumberFrames; } 

Использовать CAMediaCurrentTime (медиа-текущий / текущий носитель – я всегда забываю, в каком направлении)

Простите, что этот исходный код уродливый, кто бы ни написал его в Apple, есть чему поучиться в плане написания читаемого кода. Тот факт, что он фактически используется в качестве публичного образца, – это просто шутка.

похоже, что вы все делаете правильно. Почему бы вам не попробовать отключить все остальное и ТОЛЬКО кормить образцы в буфер?

Я сделал это, когда писал пишущий детектор, и он работал нормально. как только у меня было 30 секунд образцов, я просто напечатал все на консоли, так как вы сохраняете файл.

Я действительно думаю, что гораздо легче использовать кодирование визуализатора с нуля. AurioTouch – это беспорядок, и для выяснения того, как он работает, потребуется больше времени, поэтому потребуется построить его.

  • CoreAudio / OpenAL: как получить исходящий аудиосигнал
  • Большой размер буфера для выхода MusicPlayer
  • Одновременно генерируйте несколько синусоидальных волн в буфер выборки для аудиоустройства (iOS)
  • Как применить эффект iPodEQ к единому модулю аудиовхода на ios
  • Обработка количества выборок в цикле рендеринга аудиоустройств
  • NewTimePitch с микшером
  • Ошибка AudioToolbox AUGraph при подключении узлов ошибка kAudioUnitErr_PropertyNotWriteable
  • Присоедините несколько аудиофайлов к одному
  • Звук СМИ воспроизводится только иногда на iphone с телефонной связью
  • используя AUGraph и прямые соединения между аудиоустройствами с помощью очереди GCD
  • Запись и чтение аудиофайла с расширенным аудиофайлом
  • Interesting Posts

    Добавить текстовую метку на панель инструментов – Swift

    uitableview внутри раскадровки uiscrollview

    Как правильно выполнить тестирование Firebase (ios)?

    Как избежать вызова viewDidLoad () для обновления представления

    Установите программный вид фонового изображения: все кнопки исчезли

    Как сделать всплывающее окно с клавиатурой более плавным, с моим модулем просмотра, который выглядит модально?

    Изменение элементов навигации в UISplitViewController iOS 8

    Текущий пользовательский анализ PFUser

    Как перебирать файлы на Stickers.xcassets или получать изображения с xcassets?

    NSPredicate для фильтрации отношения основных данных NSS по атрибуту

    NSLinguisticTagger дает разные результаты на Mac против iOS

    Как обновить модель и данные базовой модели iOS

    openSessionWithAllowLoginUI почти всегда возвращает NO

    Как открыть новый контроллер просмотра после нажатия кнопки?

    Могу ли я установить pod install, что проект и рабочее пространство Xcode находятся в разных каталогах?

    Давайте будем гением компьютера.