SlideShare a Scribd company logo
Тонкости разработки музыкальных
приложений под iOS
Павел Хасанов
Александр Пархимович
О компании Gismart
Разработчик музыкальных приложений
под Android и iOS
Паблишер музыкальных приложений
2
Про что доклад?
• Использование Midi в игровом проекте;
• Core Audio;
• Core Midi;
• Audiobus
MIDI - Musical Instrument Digital Interface
• Известен с начала 80-х
• Создан для совместимости различных муз.
инструментов
4
Структура Midi файла
Игра Piano Maestro
6
Синхронизация визуальных эл-
тов и музыки
• Мелодия
• Синхротрек
7
Игровые фичи
• ускорениезамедление;
• смена инструмента;
• управление сложностью.
8
Core Audio
Core Audio - это низкоуровневый АРІ,
предоставленный Apple для работы с цифровым звуком
в системах Mac OS и iOS. Соrе Audio позволяет писать
приложения, которые напрямую работают с несжатыми
звуковыми данными, применять к ним эффекты,
микшировать с другими звуковыми потоками и либо
выводить результат в динамики, либо преобразовывать
его в сжатый формат, который затем можно сохранить в
виде файла или отправить по сети
Цель использования Core Audio - обеспечить
высокое качество и производительность аудиосистемы.
Core Audio
Основные компоненты Core Audio:
• Аудио Блоки (Audio Unit);
• Аудио очереди (Audio Queue);
• Граф.
Аудио Блоки
Аудио Блоки
Аудиоблоки делятся на пять основных
категории:
• RemoteIO;
• Эффекты;
• Миксер/Сплиттер;
• Конвертер формата;
• Музыкальное устройство.
Audio Graph
• Слабая документация;
• Специфичная предметная область.
Core Midi
Core MIDI framework предоставляет
интерфейсы для обмена данными с MIDI
устройствами, в том числе с
клавиатурами и синтезаторами.
Подключение 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);
}
Структура 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;
Проигрывание Midi
• MusicPlayer;
• Последовательная обработка
MIDINoteMessage.
Audiobus
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];
Спасибо за внимание!
www.gismart.com

More Related Content

PDF
Importance of audio engines or why does your game have such an awful sound
PPTX
Applied music: how to speak the composer’s language
PPTX
Rovio Stars tips and tricks to game development
PDF
11 bit Studios: This War of Mine: Under the hood
PDF
Gate2Shop: Внутриигровые покупки в мобильных играх: что, как и зачем
PPTX
Mike Rose: Twitch and beyond: Getting the big names in video to play your game
PDF
Specification and feedback: from producer perspective
PPTX
DevNightDnepr 2015: «Визуальные эффекты в играх. Что и как?»
Importance of audio engines or why does your game have such an awful sound
Applied music: how to speak the composer’s language
Rovio Stars tips and tricks to game development
11 bit Studios: This War of Mine: Under the hood
Gate2Shop: Внутриигровые покупки в мобильных играх: что, как и зачем
Mike Rose: Twitch and beyond: Getting the big names in video to play your game
Specification and feedback: from producer perspective
DevNightDnepr 2015: «Визуальные эффекты в играх. Что и как?»

Viewers also liked (19)

PPTX
Allods Team: All you wanted to know about level design, but never dared to ask
PDF
Ювал Зив (Gate2Shop) “Проведение платежей или аффилиейтная программа! Что важ...
PDF
Problems and solutions when developing synchronized PvP MMO games
PPTX
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
PPTX
Big and small development: key differences
PPTX
Game design technology: easy solutions for complex problems
PDF
Sound drama in game projects. Movie sound in games
PPTX
Code and memory optimization tricks
PPSX
Moving from Flash to HTML5 – converting large projects
PPTX
Wargaming.net: Архитектура современных 3D движков
PPTX
Producing for indies
PPT
GMGC2015 Beijing - How To Successfully Distribute Your HTML5 Game
PDF
GDG Jogja 2015 : Google Play Top Chart
PPTX
Social Super Duper Tool Session
PPTX
Messaging is the New Platform: (Game) Bots are the New Apps | Alexander Krug
PPTX
Alexander krug softgames pgc 2014_final
PPTX
Voxels based on Madness Road
PDF
Reality Check on Mobile HTML5 Games - Will 2013 Bring The Breakthrough?
PPTX
Softgames: Top 10 Tips How To Sell Your HTML5 Game
Allods Team: All you wanted to know about level design, but never dared to ask
Ювал Зив (Gate2Shop) “Проведение платежей или аффилиейтная программа! Что важ...
Problems and solutions when developing synchronized PvP MMO games
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Big and small development: key differences
Game design technology: easy solutions for complex problems
Sound drama in game projects. Movie sound in games
Code and memory optimization tricks
Moving from Flash to HTML5 – converting large projects
Wargaming.net: Архитектура современных 3D движков
Producing for indies
GMGC2015 Beijing - How To Successfully Distribute Your HTML5 Game
GDG Jogja 2015 : Google Play Top Chart
Social Super Duper Tool Session
Messaging is the New Platform: (Game) Bots are the New Apps | Alexander Krug
Alexander krug softgames pgc 2014_final
Voxels based on Madness Road
Reality Check on Mobile HTML5 Games - Will 2013 Bring The Breakthrough?
Softgames: Top 10 Tips How To Sell Your HTML5 Game
Ad

More from DevGAMM Conference (20)

PPTX
The art of small steps, or how to make sound for games in conditions of war /...
PPTX
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
PPTX
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
PPTX
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
PPTX
AI / ML for Indies / Tyler Coleman (Retora Games)
PDF
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
PPTX
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
PDF
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
PDF
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
PDF
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
PDF
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
PDF
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
PDF
How to increase wishlists & game sales from China? Growth marketing tactics &...
PDF
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
PDF
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
PPTX
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
PDF
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
PPTX
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
PPTX
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
PPTX
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
The art of small steps, or how to make sound for games in conditions of war /...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
AI / ML for Indies / Tyler Coleman (Retora Games)
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
How to increase wishlists & game sales from China? Growth marketing tactics &...
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
Ad

Twists and turns of developing music applications for iOS

Editor's Notes

  • #4: Gismart специализируется на музыкальных приложениях и в компании особое внимание уделяется качеству звука, а так-же дает как можно больше возможностей для пользователя для работы со звуком.
  • #6: Если коротко Midi File включает себя MusicSequence, которая в свою очередь состоит из одного или MusicTrack. А MusicTrack состоит из массива MidiNoteMessage
  • #10: Core Audio - это низкоуровневый АРІ, предоставленный Apple для работы с цифровым звуком в системах Маc OS Х и iOS. В ней имеются средства для одновременной обработки нескольких потоков многоканального цифрового звука и интерфейсы к аудиооборудованию для ввода (микрофоны) и вывода (динамики и наушники). Соге Audio позволяет писать приложения, которые напрямую работают с несжатыми звуковыми данными, полученными от микрофона, применять к ним эффекты, микшировать с другими звуковыми потоками и либо выводить результат в динамики, либо преобразовывать его в сжатый формат, который затем можно сохранить в виде файла или отправить по сети. Для тех, кто не занимается разработкой полнофункциональных приложений, Соге Audio позволяет написать нестандартный эффект и обернуть его подключаемым модулем, который называется аудиоблоком (Audio Unit). Это даст другим пользователям возможность добавить ваш эффект в свое приложение на основе Соге Audio.
  • #11: В основе Соге Audio лежит идея потоков звуковых данных, то есть непрерывных последовательностей данных, представляющих звуковой сигнал. Поскольку звук изменяется во времени, изменяются и описывающие его данные. В Соге Audio взаимодействие со звуком осуществляется главным образом за счет работы с потоками: получение потоков из файлов или от устройств ввода, их микширование, преобразование в различные форматы, отправка устройствам вывода и т. д. Для этого ваша программа обращается к Соге Audio или - наоборот - Соге Audio выполняет обратный вызов вашей программы всякий раз, как появляются новые данные для обработки. Эта метафора отличается от тех, что вы могли встречать в других мультимедийных АРІ. Простые мультимедийные плееры типа АVAudioРІауег рассматривают источник звука (например, файл) как черный ящик: его можно воспроизвести, поставить на паузу или остановить, быть может, даже перемотать вперед или назад, но ни заглянуть внутрь данных, ни что-нибудь сделать с ними возможности нет. А прелесть и мощь Соге Аисііо в том и заключаются, что она позволяет манипулировать данными.
  • #12: Аудиоблоки представляют собой программные подключаемые модули, которые обрабатывают аудиоданные. Процессор цифровой обработки сигналов
  • #13: AURemoteIO – блоки передачи аудиоданных к/от оборудования; Миксер – аудиоблок который принимает на вход несколько аудио потоков, смешивает их и выдает один или несколько ; Музыкальное устройство (MusicDevice) – используется для описания музыкальных инструментов. Актуально для нас, т.к. в данном формате удобно работать с короткими аудио дорожками с большим набором настроек. Для хранения аудио используем Sound Font. Аудиоблоки круто, но как построить систему?
  • #14: Граф позволяет обрабатывать цепочки из аудио блоков налету. Например можно вставлять аквалайзер либо настроить колбек для точки в момент проигрывания.
  • #15: Есть и минусы!
  • #16: Core MIDI framework предоставляет интерфейсы для обмена данными с MIDI устройствами, в том числе с клавиатурами и синтезаторами.
  • #17: Код для подключения клавиатуры, несколько строк и очень полезная фича включена.
  • #18: Если коротко Midi File включает себя MusicSequence, которая в свою очередь состоит из одного или MusicTrack. А MusicTrack состоит из массива MidiNoteMessage
  • #20: В свое время революционная система, которая позволяет строить цепочки из приложений, которые поддерживают Audiobus. Рассказать про эффекты в audiobus и зачем это нужно…
  • #21: Интегрируется аудиобас очень легко, для начала нужно зарегестрировать апп на сайте разработчика и добавить url схему, после этого зарегестрировать приложение и получить API key.