twists and turns of developing music applications for ios

21
Тонкости разработки музыкальных приложений под iOS Павел Хасанов Александр Пархимович

Upload: devgamm-conference

Post on 09-Jan-2017

154 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Twists and turns of developing music applications for iOS

Тонкости разработки музыкальных приложений под iOS

Павел ХасановАлександр Пархимович

Page 2: Twists and turns of developing music applications for iOS

О компании Gismart

Разработчик музыкальных приложений под Android и iOS Паблишер музыкальных приложений

2

Page 3: Twists and turns of developing music applications for iOS

Про что доклад?

• Использование Midi в игровом проекте;• Core Audio;• Core Midi;• Audiobus

Page 4: Twists and turns of developing music applications for iOS

MIDI - Musical Instrument Digital Interface• Известен с начала 80-х• Создан для совместимости различных муз.

инструментов

4

Page 5: Twists and turns of developing music applications for iOS

Структура Midi файла

Page 6: Twists and turns of developing music applications for iOS

Игра Piano Maestro

6

Page 7: Twists and turns of developing music applications for iOS

Синхронизация визуальных эл-тов и музыки

• Мелодия

• Синхротрек

7

Page 8: Twists and turns of developing music applications for iOS

Игровые фичи

• ускорение\замедление;• смена инструмента;• управление сложностью.

8

Page 9: Twists and turns of developing music applications for iOS

Core AudioCore Audio - это низкоуровневый АРІ,

предоставленный Apple для работы с цифровым звуком в системах Mac OS и iOS. Соrе Audio позволяет писать приложения, которые напрямую работают с несжатыми звуковыми данными, применять к ним эффекты, микшировать с другими звуковыми потоками и либо выводить результат в динамики, либо преобразовывать его в сжатый формат, который затем можно сохранить в виде файла или отправить по сети

Цель использования Core Audio - обеспечить высокое качество и производительность аудиосистемы.

Page 10: Twists and turns of developing music applications for iOS

Core AudioОсновные компоненты Core Audio:

• Аудио Блоки (Audio Unit);• Аудио очереди (Audio Queue);• Граф.

Page 11: Twists and turns of developing music applications for iOS

Аудио Блоки

Page 12: Twists and turns of developing music applications for iOS

Аудио БлокиАудиоблоки делятся на пять основных категории: • RemoteIO;• Эффекты; • Миксер/Сплиттер;• Конвертер формата; • Музыкальное устройство.

Page 13: Twists and turns of developing music applications for iOS

Audio Graph

Page 14: Twists and turns of developing music applications for iOS

• Слабая документация;• Специфичная предметная область.

Page 15: Twists and turns of developing music applications for iOS

Core Midi Core MIDI framework предоставляет интерфейсы для обмена данными с MIDI устройствами, в том числе с клавиатурами и синтезаторами.

Page 16: Twists and turns of developing music applications for iOS

Подключение Midi Keyboard

MIDIClientRef client;MIDIClientCreate(CFSTR("NNAudio MIDI Handler"), MIDINotifyProc, nil, &client);MIDIInputPortCreate(client, CFSTR("Input port"), MIDIReadProc, nil, &inPort);

unsigned long sourceCount = MIDIGetNumberOfSources();for (int i = 0; i < sourceCount; i++) {

MIDIEndpointRef src = MIDIGetSource(i);CFStringRef endpointName = NULL;OSStatus nameErr = MIDIObjectGetStringProperty(src,

kMIDIPropertyName, &endpointName); ...

MIDIPortConnectSource(inPort, src, NULL);}

Page 17: Twists and turns of developing music applications for iOS

Структура Midi Message

typedef struct MIDINoteMessage{

UInt8 channel;UInt8 note;UInt8 velocity;UInt8 releaseVelocity; // was "reserved". 0 is the correct

value when you don't know.Float32 duration;

} MIDINoteMessage;

Page 18: Twists and turns of developing music applications for iOS

Проигрывание Midi• MusicPlayer;• Последовательная обработка

MIDINoteMessage.

Page 19: Twists and turns of developing music applications for iOS

Audiobus

Page 20: Twists and turns of developing music applications for iOS

AudiobusЛегкая интеграция:

AudioComponentDescription desc = { kAudioUnitType_RemoteInstrument,'iasp','man', 0,0 }; self.audiobusController = [[ABAudiobusController alloc] initWithApiKey:apiKey]; self.output = [[ABSenderPort alloc] initWithName:outputName title:titleName audioComponentDescription:desc audioUnit:unit]; [self.audiobusController addSenderPort:self.output];

Page 21: Twists and turns of developing music applications for iOS

Спасибо за внимание!

www.gismart.com