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

Originally posted by pon
Добрый вечер!
Я искал в интернете материалы про самодельные MIDI устройства и набрёл на Ваш форум. Данная тема меня очень заинтересовала, т.к. я сам в данный момент занимаюсь разработкой прграммы, конвертирующей значения, полученные с джойстика в МИДИ СС собщения. Если у кого-то возникнут вопросы относительно формата МИДИ комманд и тому подобных вещей - с удовольствием постараюсь помочь!

Отличный форум! :smile:
Есть такая программа MIDI4Joy называется, помоему. Так в ней нет фильтрации значений полученных с дожйстика, поэтому контроллеры на которые повешен джой очень дрожат. Лучший вариант сделать контроллер для джоя на микроконтроллере.
 
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 посылок то читай в ветке аттачи с описанием комманд МИДИ.
 
Originally posted by General Dead
Есть такая программа MIDI4Joy называется, помоему. Так в ней нет фильтрации значений полученных с дожйстика, поэтому контроллеры на которые повешен джой очень дрожат. Лучший вариант сделать контроллер для джоя на микроконтроллере.

Спасибо за идею! Я постараюсь добавить в свою программу фильтрацию. Насколько я помню, с джойстика приходят значения в диапазоне 0-65000(примерно). Так вот, их надо преобразовать в диапазон 0-127 :smile: Я просто делю данные с джоя на определённое число(от калибровки зависит) и получаю нужный диапазон почти без помех. Те, оставшиеся помехи - грехи плохой пайки и полного отсутствия экранирования. Если кто-нибудь посоветует, как можно экранировать простой джойстик, буду очень благодарен! :smile:

П.С.
Я пробую собрать USB джойстик на микроконтроллере Atmega8 - 16 PU (или PI).
 
<div class='quotetop'>QUOTE(\"pon\")</div>
Если у кого-то возникнут вопросы относительно формата МИДИ комманд и тому подобных вещей - с удовольствием постараюсь помочь![/b]
Отличное начало - всем бы так!
 
<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. Так вот вопрос, есть ли какие-нибудь ограничения на эти "несколько"? Ну, скажем, на количество, или, какой максимальный интервал времени между парами?
А кстати, какой вообще допустимый максимальный временной интервал между байтами, что б команда не "потерялась"?
 
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 миллисекунд один за другим.
Если ты имеешь в виду время между отсылкой САМИХ байтов, то интервал никак не регламентирован.

Надеюсь, ответил на твой вопрос
 
<div class='quotetop'>QUOTE(\"pon\")</div>
Если ты имеешь в виду время между отсылкой САМИХ байтов[/b]
Именно :smile:

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

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

Без проблем. Уточни, как именно должны задаваться байты и я выложу здесь исполняемый файл.

:beer:
 
<div class='quotetop'>QUOTE(\"pon\")</div>
как именно должны задаваться байты[/b]
Ну, я представляю это себе наподобие окна гипертерминалки (во заклинило! :tongue:). Набрал, скажем F9, нажал Enter, курсор переместился на следующую строку, а посылка улетела. Другой вариант, набираем F9, затем пробел, затем 064, пробел, 111, Enter. Курсор - на следующую строку, а в порт полноформатная команда Note On. Чтобы отличать числа в хексах и децимальные (кажись правильно сказал), первые набирать двумя символами, а вторые - обязательно тремя.
 
Originally posted by Gregory
Ну, я представляю это себе наподобие окна гипертерминалки (во заклинило! :tongue:). Набрал, скажем F9, нажал Enter, курсор переместился на следующую строку, а посылка улетела. Другой вариант, набираем F9, затем пробел, затем 064, пробел, 111, Enter. Курсор - на следующую строку, а в порт полноформатная команда Note On. Чтобы отличать числа в хексах и децимальные (кажись правильно сказал), первые набирать двумя символами, а вторые - обязательно тремя.
Я написал более простую, без защиты от дурака (фильтрация ввода и т.д.). В окошках нужно вводить числа в десятеричной системе (калькулятор Виндоуса к Вашим услугам) + нужно выбрать порт вывода. Было мало времени, поэтому не обижайтесь на качество.
 
Случайно набрел на тему, огромное спасибо! Если кто знает как в схему включить Jog/Shuttle , буду премного благодарен. Я давно мечтаю собрать несложный контроллер для Вегас-а.
 
<div class='quotetop'>QUOTE(\"pon\")</div>
поэтому не обижайтесь на качество[/b]
Да какие обиды?! :beer: И со временем тоже "не горит", так что доделывайте спокойно, ибо всё-таки хочется ввод без калькулятора. :gigi:

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

Имеется в виду Sony Vegas Video. Можно подключить МИДИ контроллер (например, Mackie), но слишком дорого и накручено, а простой самодельный был бы в самый раз.
 
Originally posted by ardo
Имеется в виду Sony Vegas Video. Можно подключить МИДИ контроллер (например, Mackie), но слишком дорого и накручено, а простой самодельный был бы в самый раз.
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Rejoice, чтобы она посылала миди СС сообщения. Должно сработать.
 
<div class='quotetop'>QUOTE(\"pon\")</div>
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Реёице, чтобы она посылала миди СС сообщения. Должно сработать.[/b]
Спасибо, попробую. В основном интересует функция shuttle. Я даже думал разобрать контроллер от X-box, прикрутить к нему shuttle от старого видика, и запустить через Joy2Midi, но думаю, получится криво...
 
Originally posted by pon

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

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

Я буду собирать по схеме отсюда: http://www.flightsim.com/cgi/kds?$=main/howto/mind.htm .
 
Originally posted by pon
Тебе стоит присмотреться к варианту с джойстиком. Дабы реализовать джог, нужен какой-нибудь многооборотный потенциометр(100КОм). Надо повесить его на ось Х джойстика и запустить прогу вроде Rejoice, чтобы она посылала миди СС сообщения. Должно сработать.
Вообще для джога нужен инкременирующий энкодер, такие штуки стоят в мышках в скроле, только упрощенные. Крутиться на 360 градусов.
Есть более цивилизованные, на вид как переменный резистор.
Реализайия МИДИ контроллера на джое подключаемом к Гейм порту не очень хорошая, т.к преобразование в Гейм порте стоится на изменении широты импульса с помощью резистора, отсюда невысокая точность и стабильность и малое количество крутилок может быть поделючено (макимум 4 резистора) + необходимость программы вроде Joy2MIDI.
Проще сделать отдельный контроллер.
 
А что желающих собрать Миди контроллер моей разработки совсем нет? Помогу советом. Если будет заинтересованность добавлю кнопок или еще чего нибудь.
 
<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:
 
Originally posted by Gregory

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

Я не смогу написать такую программу. :frown: У меня нет опыта работы с КОМ портом. Я больше с МИДИ работаю.
 
<div class='quotetop'>QUOTE(\"pon\")</div>
У меня нет опыта работы с КОМ портом.[/b]
А разве есть принципиальная разница? К тому же КОМ порт тут ни при чём. Посылки должны идти на МИДИ-порты (это я выше говорил про драйвер, который позволяет посылать миди на ком, но он видится в системе, как обычное миди-устройство). В твоей же программе есть пунктик выбора. Просто его надо убрать поглубже. Что бы один раз выбрал и забыл до следующего раза.
Второе. У тебя же посылаются полноформатные команды. Они же состоят из отдельных байтов. Почему нельзя сделать так, что б была возможность их раздельной посылки?
 
<div class='quotetop'>QUOTE(\"Gregory\")</div>
Даже не предполагал. Доберусь, посмотрю подробнее. А что им там можно регулировать?[/b]
В принципе всё, от простых кнопок старт/стоп, и до любых эффектов автоматизации ( Volume, Pan, и т.д.). Вот ссылка:
http://www.digitalprosound.com/articles/vi...afterinter=true
 
<div class='quotetop'>QUOTE(\"General Dead\")</div>
Реализайия МИДИ контроллера на джое подключаемом к Гейм порту не очень хорошая, т.к преобразование в Гейм порте стоится на изменении широты импульса с помощью резистора, отсюда невысокая точность и стабильность и малое количество крутилок может быть поделючено (макимум 4 резистора) + необходимость программы вроде Joy2MIDI.
Проще сделать отдельный контроллер.[/b]

Я думал раздраконить контроллер который идёт на USB порт, или будет та же проблемма что и с Game портом? Если не хватит крутилок, можно взять несколько контроллеров, они сегодня стОят копейки, и засунуть всё в один USB хаб. Собрать свой, конечно, покруче, но я могу лишь скопировать готовый дизайн, а как самому запихать Jog/Shuttle - знаний по электронике не хватает. Но паять люблю... :biglaugh:
 

Сейчас просматривают