Twists and turns of developing music applications for iOS

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

Transcript of Twists and turns of developing music applications for iOS

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