Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как мы работаем со звуком в Gismart

Как мы работаем со звуком в Gismart

В докладе описывается схема работы со звуком в компании Gismart. Затронуты такие темы как работа с Core Audio, Core Midi, Audiobus и libPD

Avatar for Alex Parhimovich

Alex Parhimovich

July 16, 2016

Other Decks in Programming

Transcript

  1. Core Audio Core Audio - это низкоуровневый АРІ, предоставленный Apple

    для работы с цифровым звуком в системах Mac OS и iOS. Соrе Audio позволяет писать приложения, которые напрямую работают с несжатыми звуковыми данными, применять к ним эффекты, микшировать с другими звуковыми потоками и либо выводить результат в динамики, либо преобразовывать его в сжатый формат, который затем можно сохранить в виде файла или отправить по сети Цель использования Core Audio - обеспечить высокое качество и производительность аудиосистемы.
  2. Core Audio Основные компоненты Core Audio: •  Аудио Блоки (Audio

    Unit); •  Аудио очереди (Audio Queue); •  Граф.
  3. Аудио Блоки Аудиоблоки делятся на пять основных категории: •  RemoteIO;

    •  Эффекты; •  Миксер/Сплиттер; •  Конвертер формата; •  Музыкальное устройство.
  4. Core Midi Core MIDI framework предоставляет интерфейсы для обмена данными

    с MIDI устройствами, в том числе с клавиатурами и синтезаторами.
  5. Подключение Midi Keyboard: MIDIClientRef client; MIDIClientCreate(CFSTR("NNAudio MIDI Handler"), MIDINoTfyProc, 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); }
  6. Структура 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 duraTon; } MIDINoteMessage;
  7. Проигрывание через MusicPlayer MusicSequenceFileLoad(sequenceMidi, (__bridge CFURLRef)(midiFileURL), 0, kMusicSequenceLoadSMF_ChannelsToTracks); // IniTalise

    the music player NewMusicPlayer(&playerMidi); MIDIClientRef virtualMidi; MIDIClientCreate(CFSTR("Virtual Client"),nil,(__bridge void *)(self),&virtualMidi); MIDIEndpointRef virtualEndPoint; // Create an endpoint MIDIDesTnaTonCreate(virtualMidi, (CFStringRef)@"Virtual DesTnaTon",(MIDIReadProc) MyMIDIReadProc, (__bridge void *)(self), &virtualEndPoint); // ************* Set the endpoint of the sequence to be our virtual endpoint MusicSequenceSetMIDIEndpoint(sequenceMidi, virtualEndPoint); // Load the sequence into the music player MusicPlayerSetSequence(playerMidi, sequenceMidi); MusicPlayerPreroll(playerMidi); MusicPlayerStart(playerMidi);
  8. Audiobus Легкая интеграция: AudioComponentDescripTon desc = { kAudioUnitType_RemoteInstrument,'iasp','man', 0,0 };

    self.audiobusController = [[ABAudiobusController alloc] initWithApiKey:apiKey]; self.output = [[ABSenderPort alloc] initWithName:outputName Ttle:TtleName audioComponentDescripTon:desc audioUnit:unit]; [self.audiobusController addSenderPort:self.output];
  9. Pure Data (aka PD) PD is an open source visual

    /data flow programming language.
  10. Pure Data (aka PD) Pd is used to process and

    generate sound, video, 2D/3D graphics, and interface sensors, input devices, and MIDI.
  11. libpd Pure Data computer music system as an embeddable audio

    synthesis library. www.libpd.cc https://github.com/libpd
  12. MobMuPlat MobMuPlat (Mobile Music Platform) is a standalone iOS+Android app

    which hosts and loads projects created in Pure Data.
  13. libpd Sending messages and receiving messages in Objective-C + (int)sendBangToReceiver:(NSString

    *)receiverName; + (int)sendFloat:(float)value toReceiver:(NSString *)receiverName; - (void)receiveBangFromSource:(NSString *)source;