MIDI через Bluetooth

Я начинаю проект с беспроводным MIDI-соединением через Bluetooth. Насколько мне известно, в спецификации BT не определен профиль MIDI.

Мне было интересно, если некоторые из вас будут заинтересованы в том, чтобы поделиться опытом о том, как лучше всего использовать MIDI через BT, особенно в отношении проблемы задержки.

Мой проект основан на BT с низким энергопотреблением (BTLE), сейчас я пытаюсь найти лучший профиль BT для использования, может быть, существующий профиль последовательного порта RFCOMM или новый пользовательский профиль?

Любой совет будет оценен. Лучший Джером


person Jerome    schedule 16.04.2013    source источник


Ответы (1)


Профили типа RFCOMM относятся не к BTLE, а к классике блютуза.

В музыкальных приложениях вы должны заботиться о задержке. Время с момента отправки первого байта с миди-клавиатуры и до его прибытия в пункт назначения действительно имеет значение. В SPP / RFCOMM нет точной скорости BAUD, но пропускная способность зависит от двух сторон. http://snapshot.bluecove.org/bluecove-examples/bluecove-tester/speed.html

Если вы вводите MIDI (31250 бод), отправляете его через «канал», отправляете его через MIDI (31250 бод), вам нужно обратить внимание на 2 вещи: 1) пропускная способность должна быть достаточно большой для «приемника» и «источника». Midi In и Midi Out 2) Задержка должна быть достаточно быстрой, чтобы сделать ее «музыкально» точной.

Событие Midi ON занимает примерно 30 бит сигнала, поэтому вы можете отправить около 104 событий Midi в секунду. Задержка составляет около 10 мс.

В iOS самый быстрый интервал подключения (1 блок размером около 20 байт) составляет около 19 мс, если вы нарушаете рекомендации, или 39 мс, если следуете им. Тогда общая задержка составит: Midi In (10 мс) + BTLE GATT (до 39 мс) + Midi Out (10 мс) = 60 мс. В 6 раз медленнее, чем обычный MIDI-кабель. Минимальный интервал соединения BTLE составляет 7,5 мс, но вы будете терять пакеты на самом низком уровне, поэтому давайте просто скажем 10 мс: Midi In (10 мс) + BTLE (10 мс) + Midi Out (10 мс) = 30 мс. Не так уж плохо, но и не особо впечатляет. В каждом интервале подключения вы можете упаковать около 20 байтов, поэтому пропускной способности или пропускной способности должно быть достаточно.

Взгляните на этот проект BTLE RFCOMM: http://support.connectblue.com/display/PRODBTSPA/Bluetooth+Low+Energy+Serial+Port+Adapter+-+Getting+Started

person henrik    schedule 17.04.2013
comment
Задержка MIDI сама по себе обычно составляет около 4-5 мс. Большинство сообщений (примечание вкл/выкл) имеют размер 2 байта. Сообщения контроллера обычно задерживаются отправляющим устройством, если есть заметки для отправки. - person Brad; 17.04.2013
comment
Событие Midi ON занимает примерно 30 бит сигнала, поэтому вы можете отправить около 104 событий Midi в секунду. Задержка составляет около 10 мс. Автор пропустил десятичную дробь - 31250bps/30b = 1041 событие Note-On в секунду. ХАЛ - person Hal Chamberlin; 17.10.2013
comment
@Brad: большинство сообщений (Note On/Off, Control Change, Pitch Bend, ...) составляют 3 байта. - person Florian; 17.10.2013
comment
Хенрик и Брэд: Отправка одного 3-байтового сообщения по стандартному MIDI-кабелю занимает 960 мкс (соответствует 1041 полному нотному сообщению @Hal в секунду), а не 4-5 мс. Конечно, получатель может добавить задержку для обработки. - person Florian; 17.10.2013
comment
Для музыкальной MIDI-коммуникации важны не только 1) пропускная способность и 2) задержка, но и 3) джиттер: насколько варьируется задержка. Высокая задержка может быть приемлемой, если джиттер низкий. Джиттер выше пары миллисекунд может серьезно повлиять на ощущение и ритм музыкальных произведений. - person Florian; 17.10.2013