2009-03-10 3 views
7

В настоящее время я получил свой выход аудио на установке iPhone, как это:Родной iPhone аудиоформат

AudioStreamBasicDescription audioFormat; 

audioFormat.mSampleRate = 48000; 

audioFormat.mFormatID = kAudioFormatLinearPCM; 

audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 

audioFormat.mFramesPerPacket = 1; 

audioFormat.mChannelsPerFrame = 2; 

audioFormat.mBitsPerChannel = 16; 

audioFormat.mBytesPerPacket = 4; 

audioFormat.mBytesPerFrame = 4; 

Однако, когда я анализирую свои показатели производительности через акулу Я видел такие функции, как: SRC_Convert_table_i32_scalar_stereo

принять справедливый кусок времени.

Это заставило меня подумать - какой идеал и предлагаемый формат вывода для iPhone? Тот, который требует как можно меньше работы для устройства.

+0

Как вы используете Shark с iPhone? Вы уверены, что не профилируете симулятор? RF –

+0

Нет, я профилирую устройство. Вот страница, в которой рассказывается, как настроить акулу в профиле iPhone: https://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/SharkUserGuide/SelectingExecutiontoSampleorTrace/chapter_6_section_9.html –

ответ

11

Акула действительно работает с iPhone. Вы можете включить профилирование iPhone, выбрав «Сэмплирование> Сеть/Профилирование iPhone ...» в меню.

Определенно попробуйте использовать частоту дискретизации 44100 Гц. С 48000 я вижу ту же функцию, что вы Написал появляющуюся в callstacks - нет такой функции не проявляется при использовании 44100. Каноническая аудиоформат для Audio Units на iPhone не является чередованием 8,24 линейного PCM:

streamFormat.mFormatID   = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags  = 
        kAudioFormatFlagIsSignedInteger 
       | kAudioFormatFlagsNativeEndian 
       | kLinearPCMFormatFlagIsNonInterleaved 
       | (24 << kLinearPCMFormatFlagsSampleFractionShift); 
streamFormat.mSampleRate  = mixing_rate; 
streamFormat.mBitsPerChannel = 32; 
streamFormat.mChannelsPerFrame = 2; 
streamFormat.mFramesPerPacket = 1; 
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel/8); 
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame * 
           streamFormat.mFramesPerPacket; 
3

От iphone dev centre (требуется логин) аппаратные suppoorted кодеки

iPhone Аудио Аппаратные кодеки

приложения iPhone OS может использовать широкий спектр аудио форматов данных, как , описанный в следующий раздел. Некоторые из этих форматов используют программную кодировку и декодирование . Вы можете одновременно воспроизводить несколько звуков в этих форматах. Кроме того, приложение и приложение (в частности, приложение iPod ) могут одновременно воспроизводить звуки в этих форматах.

Другие форматы аудио iPhone OS используют аппаратный кодек для воспроизведения. Эти форматы:

  • AAC
  • ALAC (Apple Lossless)
  • MP3
+0

Меня интересуют разные форматы, которые может играть iphone, и больше, что такое базовый формат вывода. Таким образом, я могу сопоставить свой тип вывода, и для преобразования iPhone потребуется меньше циклов. –

+1

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

1

48000 является странный формат аудио в целом. Хотя он незначительно (и незаметно) лучше, чем стандартный CD 44.1Khz, он не стоит такого размера.

Есть ли в вашем приложении какие-либо веские причины использовать высококачественный стереозвук? Другими словами, приложение может быть воспроизведено на динамиках или хороших наушниках?

Формат LinearPCM является аппаратным, поэтому он должен быть оптимальным. (Без декомпрессии для скрипки.) Таким образом, вызов может быть уменьшен до 44.1Khz.

Смежные вопросы