Самодельный MIDI Controller (1 онлайн

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
Originally posted by pon
Добрый вечер!
Я искал в интернете материалы про самодельные MIDI устройства и набрёл на Ваш форум. Данная тема меня очень заинтересовала, т.к. я сам в данный момент занимаюсь разработкой прграммы, конвертирующей значения, полученные с джойстика в МИДИ СС собщения. Если у кого-то возникнут вопросы относительно формата МИДИ комманд и тому подобных вещей - с удовольствием постараюсь помочь!

Отличный форум! :smile:
Есть такая программа MIDI4Joy называется, помоему. Так в ней нет фильтрации значений полученных с дожйстика, поэтому контроллеры на которые повешен джой очень дрожат. Лучший вариант сделать контроллер для джоя на микроконтроллере.
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
Originally posted by Gregory
Спасибо, конечно, за участие, но во-первых, не 55ЛА3, а 555, или 155. :smile: Я лично применил 1533лн1, так как MAX232 сигнал инвертирует, поэтому оптрон подключил тоже через буфер-инвертор. А во-вторых, как ты уже наверное догадался, я - \"в курсе\". :cool:
Ну, скажи, где ты видел нормальный МИДИ (так понимаю, ты имеешь ввиду MPU-401) у ноутбуков?
Программа мне нужна, которая бы передавала команды на выход. Например, набрал F9, нажал Enter, и пошла на выход Note On. Я потому хипертерминалку упомянул, что ведь шлёт же она эти байты (иначе и быть не может). Надо только соответствие клавишам выяснить, ну, и удобство в работе, конечно - не очень.
Да с 55ЛА3 опечатка вышла, писал в 6 утра, я думаю понятно.
Используя программу гипертерминал нельзя установить частоту передачи 31250кбитсек использующуюся в MIDI, в гипертерминале доступны только стандартные значения baudrate типа 9600, 11520 и т.д.
Мой совет, купи микросхему FTDI FT232 это мост USB-UART, скачаешь с сайта производителя (FTDI) драйвера, в них можно поставить частоту передачи какую захочешь, система будет видеть эту микруху как еще один физический СОМ порт. Будет MIDI входвыход с USB интерфейсом, если установить дрова вроде Роландовских которые работают с СОМ портом
какое соответствие клавишам тебе нужно выяснить, если формат MIDI посылок то читай в ветке аттачи с описанием комманд МИДИ.
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by General Dead
Есть такая программа MIDI4Joy называется, помоему. Так в ней нет фильтрации значений полученных с дожйстика, поэтому контроллеры на которые повешен джой очень дрожат. Лучший вариант сделать контроллер для джоя на микроконтроллере.
Спасибо за идею! Я постараюсь добавить в свою программу фильтрацию. Насколько я помню, с джойстика приходят значения в диапазоне 0-65000(примерно). Так вот, их надо преобразовать в диапазон 0-127 :smile: Я просто делю данные с джоя на определённое число(от калибровки зависит) и получаю нужный диапазон почти без помех. Те, оставшиеся помехи - грехи плохой пайки и полного отсутствия экранирования. Если кто-нибудь посоветует, как можно экранировать простой джойстик, буду очень благодарен! :smile:

П.С.
Я пробую собрать USB джойстик на микроконтроллере Atmega8 - 16 PU (или PI).
 

sunet

Victor Buruiana, 1959
18 Июл 2005
12.078
6.378
113
65
Chisinau, Moldova
<div class='quotetop'>QUOTE(\"pon\")</div>
Если у кого-то возникнут вопросы относительно формата МИДИ комманд и тому подобных вещей - с удовольствием постараюсь помочь![/b]
Отличное начало - всем бы так!
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"General Dead\")</div>
нельзя установить частоту передачи 31250кбитсек[/b]
Я об этом тоже вчера подумал. Как-то упустил из виду, хотя сам об этом выше писАл. :biglaugh: Про клавиши я имел ввиду, что когда нажимаешь кнопки на клавиатуре, гипертерминалка посылает определённый байт. Вот об этом соответствии я и говорил.

<div class='quotetop'>QUOTE(\"General Dead\")</div>
купи микросхему FTDI FT232[/b]
Это напрвление мне знакомо, и по нему достаточно публикаций. Например, уже говорил, в последнем номере журнала "Радио" (на мой взгляд, не очень правильный, например, отсутствует оптронная развязка). Но у старых ноутбуков USB отсутствуют.

<div class='quotetop'>QUOTE(\"pon\")</div>
значения в диапазоне 0-65000[/b]
Так ведь и спецификация допускает передачу младшего и старшего байта состояния контроллера.

<div class='quotetop'>QUOTE(\"pon\")</div>
Если у кого-то возникнут вопросы относительно формата МИДИ комманд[/b]
У меня вот какой вопрос. Известно, что протокол МИДИ допускает пропуск статусного байта, для одинаковых комманд. Т.е. можно передать один статусный байт Note On, а затем несколько пар Note Number и Velocity. Так вот вопрос, есть ли какие-нибудь ограничения на эти "несколько"? Ну, скажем, на количество, или, какой максимальный интервал времени между парами?
А кстати, какой вообще допустимый максимальный временной интервал между байтами, что б команда не "потерялась"?
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by Gregory

У меня вот какой вопрос. Известно, что протокол МИДИ допускает пропуск статусного байта, для одинаковых комманд. Т.е. можно передать один статусный байт Note On, а затем несколько пар Note Number и Velocity. Так вот вопрос, есть ли какие-нибудь ограничения на эти \"несколько\"? Ну, скажем, на количество, или, какой максимальный интервал времени между парами?
А кстати, какой вообще допустимый максимальный временной интервал между байтами, что б команда не \"потерялась\"?
Я не знал точного ответа на первый вопрос. Поэтому, я решил попробовать выяснить ограничения на эти "несколько" экспериментальным путём. Я написал программу, которая посылает Note--on сообщение, а потом запускает цикл, который повторяется n раз. Во время этого цикла и и отправляется Velocity сообщение. Далее следует комманда note-off. Результаты меня удивили. Отчасти потому, что сперва я посылал не велосити, а Note On сообщения (по ошибке). Таких сообщений сперва отправилось 900, потом 400, потом 4600. Вывод - всё зависит от объёма памяти, выделенного MIDI устройству. Далее, я исправил свою ошибку и посылал Velocity сообщения. Таких сообщений можно отправить сколько душе угодно. По крайней мере, пока не зависнет программа отправляющая их. Для реальных задач этого достаточно :smile:

Никакого интервала между коммандами не существует. Простой пример - включаем ноту на синтезаторе(программно или аппаратно) и крутим ручки, настраивая нужный звук. Сто раз так делал и продолжаю делать :smile:
Биты в байтах должны отправлятся в течении 32 миллисекунд один за другим.
Если ты имеешь в виду время между отсылкой САМИХ байтов, то интервал никак не регламентирован.

Надеюсь, ответил на твой вопрос
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"pon\")</div>
Если ты имеешь в виду время между отсылкой САМИХ байтов[/b]
Именно :smile:

<div class='quotetop'>QUOTE(\"pon\")</div>
Я написал программу[/b]
Может попутно написАл бы и програмку, которая посылала на миди-порт заданные байты, как я выше говорил? Тогда бы, как говорится, размеры границ не имели бы никакой благодарности. :beer:
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by Gregory
Именно :smile:

Может попутно написАл бы и програмку, которая посылала на миди-порт заданные байты, как я выше говорил? Тогда бы, как говорится, размеры границ не имели бы никакой благодарности. :beer:
Без проблем. Уточни, как именно должны задаваться байты и я выложу здесь исполняемый файл.

:beer:
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"pon\")</div>
как именно должны задаваться байты[/b]
Ну, я представляю это себе наподобие окна гипертерминалки (во заклинило! :tongue:). Набрал, скажем F9, нажал Enter, курсор переместился на следующую строку, а посылка улетела. Другой вариант, набираем F9, затем пробел, затем 064, пробел, 111, Enter. Курсор - на следующую строку, а в порт полноформатная команда Note On. Чтобы отличать числа в хексах и децимальные (кажись правильно сказал), первые набирать двумя символами, а вторые - обязательно тремя.
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by Gregory
Ну, я представляю это себе наподобие окна гипертерминалки (во заклинило! :tongue:). Набрал, скажем F9, нажал Enter, курсор переместился на следующую строку, а посылка улетела. Другой вариант, набираем F9, затем пробел, затем 064, пробел, 111, Enter. Курсор - на следующую строку, а в порт полноформатная команда Note On. Чтобы отличать числа в хексах и децимальные (кажись правильно сказал), первые набирать двумя символами, а вторые - обязательно тремя.
Я написал более простую, без защиты от дурака (фильтрация ввода и т.д.). В окошках нужно вводить числа в десятеричной системе (калькулятор Виндоуса к Вашим услугам) + нужно выбрать порт вывода. Было мало времени, поэтому не обижайтесь на качество.
 

ardo

New Member
13 Окт 2005
37
0
0
Случайно набрел на тему, огромное спасибо! Если кто знает как в схему включить Jog/Shuttle , буду премного благодарен. Я давно мечтаю собрать несложный контроллер для Вегас-а.
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"pon\")</div>
поэтому не обижайтесь на качество[/b]
Да какие обиды?! :beer: И со временем тоже "не горит", так что доделывайте спокойно, ибо всё-таки хочется ввод без калькулятора. :gigi:

<div class='quotetop'>QUOTE(\"ardo\")</div>
Я давно мечтаю собрать несложный контроллер для Вегас-а.[/b]
М..м..м.. Что-то не понял, какое отношение Вегас к МИДИ имеет? Или это про какой-то другой "Вегас"?
 

pon

New Member
11 Окт 2006
26
0
0
45
Пожалуйста! Было-бы замечательно услышать комментарии о программе! :smile:
 

pon

New Member
11 Окт 2006
26
0
0
45
Вот несколько обновлённая версия программы. Добавлен конвертер и кое-что ещё. Надеюсь, с ней будет легче работать :smile:
 

ardo

New Member
13 Окт 2005
37
0
0
<div class='quotetop'>QUOTE(\"Gregory\")</div>
М..м..м.. Что-то не понял, какое отношение Вегас к МИДИ имеет? Или это про какой-то другой \"Вегас\"?[/b]
Имеется в виду Sony Vegas Video. Можно подключить МИДИ контроллер (например, Mackie), но слишком дорого и накручено, а простой самодельный был бы в самый раз.
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by ardo
Имеется в виду Sony Vegas Video. Можно подключить МИДИ контроллер (например, Mackie), но слишком дорого и накручено, а простой самодельный был бы в самый раз.
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Rejoice, чтобы она посылала миди СС сообщения. Должно сработать.
 

ardo

New Member
13 Окт 2005
37
0
0
<div class='quotetop'>QUOTE(\"pon\")</div>
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Реёице, чтобы она посылала миди СС сообщения. Должно сработать.[/b]
Спасибо, попробую. В основном интересует функция shuttle. Я даже думал разобрать контроллер от X-box, прикрутить к нему shuttle от старого видика, и запустить через Joy2Midi, но думаю, получится криво...
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
Originally posted by pon

Биты в байтах должны отправлятся в течении 32 миллисекунд один за другим.
Если ты имеешь в виду время между отсылкой САМИХ байтов, то интервал никак не регламентирован.
Если я неошибаюсь то 32 микросекунды.
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
Originally posted by pon

Я пробую собрать USB джойстик на микроконтроллере Atmega8 - 16 PU (или PI).
Я в прошлом году собрал на ATmega 8PI USB Joy на 24 кнопки и 8 осей, автор meandog из прибалтики, схема нормально работает, правда немного прыгают оси на которые повешены резисторы, у автора наверное нету программной фильтрации, можно уточнить у меня есть исходники на ассемблере.
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by General Dead
Я в прошлом году собрал на ATmega 8PI USB Joy на 24 кнопки и 8 осей, автор meandog из прибалтики, схема нормально работает, правда немного прыгают оси на которые повешены резисторы, у автора наверное нету программной фильтрации, можно уточнить у меня есть исходники на ассемблере.
Я буду собирать по схеме отсюда: http://www.flightsim.com/cgi/kds?$=main/howto/mind.htm .
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
Originally posted by pon
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Rejoice, чтобы она посылала миди СС сообщения. Должно сработать.
Вообще для джога нужен инкременирующий энкодер, такие штуки стоят в мышках в скроле, только упрощенные. Крутиться на 360 градусов.
Есть более цивилизованные, на вид как переменный резистор.
Реализайия МИДИ контроллера на джое подключаемом к Гейм порту не очень хорошая, т.к преобразование в Гейм порте стоится на изменении широты импульса с помощью резистора, отсюда невысокая точность и стабильность и малое количество крутилок может быть поделючено (макимум 4 резистора) + необходимость программы вроде Joy2MIDI.
Проще сделать отдельный контроллер.
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.789
113
45
Kharkiv UA
А что желающих собрать Миди контроллер моей разработки совсем нет? Помогу советом. Если будет заинтересованность добавлю кнопок или еще чего нибудь.
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"pon\")</div>
Я опечатался.[/b]
Угу. :smile: А ещё, меня тоже никто не поправил, что F9 - это вовсе не Note On, а фиг знает что, из разряда System Message. :biglaugh: Поэтому вношу поправку:
Формат статусного байта команды Note On: 9n, где n - любое число от 0 до F (номер миди-канала).

<div class='quotetop'>QUOTE(\"pon\")</div>
Вот несколько обновлённая версия программы[/b]
Увы, всё - не то. Хотелось бы на самом низком уровне. Собственно говоря, МИДИ надо как-бы отбросить в сторону. Единственное, что должно объединять программу с МИДИ, это - возможность выбирать, в качестве выходного порта, МИДИ-порты. Делать это, кстати говоря, ИМХО, лучше в какой-нибудь специальном пункте меню. Во всём остальном это должна быть обычная "гипертерминалка". Вот. :super2:
 

pon

New Member
11 Окт 2006
26
0
0
45
Originally posted by Gregory

Увы, всё - не то. Хотелось бы на самом низком уровне. Собственно говоря, МИДИ надо как-бы отбросить в сторону. Единственное, что должно объединять программу с МИДИ, это - возможность выбирать, в качестве выходного порта, МИДИ-порты. Делать это, кстати говоря, ИМХО, лучше в какой-нибудь специальном пункте меню. Во всём остальном это должна быть обычная \"гипертерминалка\". Вот. :super2:
Я не смогу написать такую программу. :frown: У меня нет опыта работы с КОМ портом. Я больше с МИДИ работаю.
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
<div class='quotetop'>QUOTE(\"pon\")</div>
У меня нет опыта работы с КОМ портом.[/b]
А разве есть принципиальная разница? К тому же КОМ порт тут ни при чём. Посылки должны идти на МИДИ-порты (это я выше говорил про драйвер, который позволяет посылать миди на ком, но он видится в системе, как обычное миди-устройство). В твоей же программе есть пунктик выбора. Просто его надо убрать поглубже. Что бы один раз выбрал и забыл до следующего раза.
Второе. У тебя же посылаются полноформатные команды. Они же состоят из отдельных байтов. Почему нельзя сделать так, что б была возможность их раздельной посылки?
 

ardo

New Member
13 Окт 2005
37
0
0
<div class='quotetop'>QUOTE(\"Gregory\")</div>
Даже не предполагал. Доберусь, посмотрю подробнее. А что им там можно регулировать?[/b]
В принципе всё, от простых кнопок старт/стоп, и до любых эффектов автоматизации ( Volume, Pan, и т.д.). Вот ссылка:
http://www.digitalprosound.com/articles/vi...afterinter=true
 

ardo

New Member
13 Окт 2005
37
0
0
<div class='quotetop'>QUOTE(\"General Dead\")</div>
Реализайия МИДИ контроллера на джое подключаемом к Гейм порту не очень хорошая, т.к преобразование в Гейм порте стоится на изменении широты импульса с помощью резистора, отсюда невысокая точность и стабильность и малое количество крутилок может быть поделючено (макимум 4 резистора) + необходимость программы вроде Joy2MIDI.
Проще сделать отдельный контроллер.[/b]
Я думал раздраконить контроллер который идёт на USB порт, или будет та же проблемма что и с Game портом? Если не хватит крутилок, можно взять несколько контроллеров, они сегодня стОят копейки, и засунуть всё в один USB хаб. Собрать свой, конечно, покруче, но я могу лишь скопировать готовый дизайн, а как самому запихать Jog/Shuttle - знаний по электронике не хватает. Но паять люблю... :biglaugh:
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)