ݺߣ

ݺߣShare a Scribd company logo
Звук и ресурсы iOS в 
Realtime 
Константин Платов 
программист iOS/OSX VoIP @Mail.ru
Hardware Part 
Mic #2 
Spk #1 
Mic #1 
Spk #2 
Mic #3
Audio Session 
Микширование фоновых звуков 
Отслеживание аудиопрерываний 
Отслеживание аудиопутей 
• 
• 
•
Audio Route 
Remote 
I/O 
Audio Session
CFStringRef newRoute; 
size = sizeof(CFStringRef); 
AudioSessionGetProperty( 
kAudioSessionProperty_AudioRoute, 
&size, 
&newRoute); 
HeadphonesAndMicrophone 
SpeakerAndMicrophone 
ReceiverAndMicrophone 
etc. Bluetooth.. 
•••• 
Audio Route 
iOS 4 iOS 5 
kAudioSessionInputRoute_LineIn; 
kAudioSessionInputRoute_BuiltInMic; 
kAudioSessionInputRoute_HeadsetMic; 
kAudioSessionInputRoute_BluetoothHFP; 
kAudioSessionInputRoute_USBAudio; 
 
 
 
 
 
 
 
 
 
kAudioSessionOutputRoute_LineOut ; 
kAudioSessionOutputRoute_Headphones; 
kAudioSessionOutputRoute_BluetoothHFP; 
kAudioSessionOutputRoute_BluetoothA2DP;
Audio Interruption 
Play 
Pause 
Resume 
Enter INT 
Exit INT 
Exit INT 
Suspend 
Should? 
Yes No
Из опыта 
Pure-C VS 
API 
AudioSessionInitialize(NULL, NULL, AudioInterruptListner, _audioDeviceIosInstance) 
Objective-C 
API 
AVAudioSession *session = 
[AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryAmbient 
error:setCategoryError]
Audio Unit 
• 
• 
• 
• 
• 
• 
• 
Converter 
iPod Equalizer 
3D Mixer 
Multichannel Mixer 
Generic Output 
Remote I/O 
Voice Processing 
I/O 
Realtime 
работа со звуком: 
Remote I/O 
Voice Processing I/O
// Enable IO for recording 
UInt32 flag = 1; 
TEST_OSS(AudioUnitSetProperty(remoteIOUnit, 
kAudioOutputUnitProperty_EnableIO, 
kAudioUnitScope_Input, 
kInputBus, 
flag, 
sizeof(flag))); 
// Describe format 
AudioStreamBasicDescription audioFormat; 
audioFormat.mSampleRate = _inputSamplerate; 
audioFormat.mFormatID = kAudioFormatLinearPCM; 
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 
audioFormat.mFramesPerPacket = 1;
Y.A.M. 
NET 
Remote I/O Coder 
iPhone #1 
Remote I/O Decoder 
iPhone #2 
AEC 
AGC AEC 
AGC
Y.A.M. 
Voice Processing I/O Coder 
NET 
iPhone #1 
Voice Processing I/O Decoder 
iPhone #2
Эволюция iPhone 
iPhone Original 3G 3GS 4 4S 5 
Name ARM11 ARM11 Cortex-A8 Cortex-A8 Cortex-A9 Cortex-A9 
Arch ARMv6 ARMv6 ARMv7 ARMv7 ARMv7 ARMv7 
Freq 412 412 600 800 800 1300 
Cores 1 1 1 1 2 2
Ресурсы 
Размер 
фрейма 
NEON MHz / фрейм MHz / 
CIF 
352 x 258 
Encoder 15 225 
Decoder 4 60 285 
Аудио 
15 фреймов 
Сумма 
VGA 
640 x 480 
Encoder 30 450 
Decoder 9 135 585 
Алгоритм AMR-WB AEC AGC Сумма 
MIPS @ARM11 90 70 15 175 
Видео
Что делать? 
Оптимизировать самим 
Интринсики 
Ассемблер 
Accelerate framework 
Купить у third-party 
Открытые библиотеки типа OpenMAX 
• 
• 
• 
• 
• 
•
Константин Платов 
constantin.platov@gmail.com

More Related Content

Встреча №5. Звук и ресурсы iOS в realtime, Константин Платов

  • 1. Звук и ресурсы iOS в Realtime Константин Платов программист iOS/OSX VoIP @Mail.ru
  • 2. Hardware Part Mic #2 Spk #1 Mic #1 Spk #2 Mic #3
  • 3. Audio Session Микширование фоновых звуков Отслеживание аудиопрерываний Отслеживание аудиопутей • • •
  • 4. Audio Route Remote I/O Audio Session
  • 5. CFStringRef newRoute; size = sizeof(CFStringRef); AudioSessionGetProperty( kAudioSessionProperty_AudioRoute, &size, &newRoute); HeadphonesAndMicrophone SpeakerAndMicrophone ReceiverAndMicrophone etc. Bluetooth.. •••• Audio Route iOS 4 iOS 5 kAudioSessionInputRoute_LineIn; kAudioSessionInputRoute_BuiltInMic; kAudioSessionInputRoute_HeadsetMic; kAudioSessionInputRoute_BluetoothHFP; kAudioSessionInputRoute_USBAudio; kAudioSessionOutputRoute_LineOut ; kAudioSessionOutputRoute_Headphones; kAudioSessionOutputRoute_BluetoothHFP; kAudioSessionOutputRoute_BluetoothA2DP;
  • 6. Audio Interruption Play Pause Resume Enter INT Exit INT Exit INT Suspend Should? Yes No
  • 7. Из опыта Pure-C VS API AudioSessionInitialize(NULL, NULL, AudioInterruptListner, _audioDeviceIosInstance) Objective-C API AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryAmbient error:setCategoryError]
  • 8. Audio Unit • • • • • • • Converter iPod Equalizer 3D Mixer Multichannel Mixer Generic Output Remote I/O Voice Processing I/O Realtime работа со звуком: Remote I/O Voice Processing I/O
  • 9. // Enable IO for recording UInt32 flag = 1; TEST_OSS(AudioUnitSetProperty(remoteIOUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, flag, sizeof(flag))); // Describe format AudioStreamBasicDescription audioFormat; audioFormat.mSampleRate = _inputSamplerate; audioFormat.mFormatID = kAudioFormatLinearPCM; audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; audioFormat.mFramesPerPacket = 1;
  • 10. Y.A.M. NET Remote I/O Coder iPhone #1 Remote I/O Decoder iPhone #2 AEC AGC AEC AGC
  • 11. Y.A.M. Voice Processing I/O Coder NET iPhone #1 Voice Processing I/O Decoder iPhone #2
  • 12. Эволюция iPhone iPhone Original 3G 3GS 4 4S 5 Name ARM11 ARM11 Cortex-A8 Cortex-A8 Cortex-A9 Cortex-A9 Arch ARMv6 ARMv6 ARMv7 ARMv7 ARMv7 ARMv7 Freq 412 412 600 800 800 1300 Cores 1 1 1 1 2 2
  • 13. Ресурсы Размер фрейма NEON MHz / фрейм MHz / CIF 352 x 258 Encoder 15 225 Decoder 4 60 285 Аудио 15 фреймов Сумма VGA 640 x 480 Encoder 30 450 Decoder 9 135 585 Алгоритм AMR-WB AEC AGC Сумма MIPS @ARM11 90 70 15 175 Видео
  • 14. Что делать? Оптимизировать самим Интринсики Ассемблер Accelerate framework Купить у third-party Открытые библиотеки типа OpenMAX • • • • • •