Показать сообщение отдельно
Старый 24.02.2004, 10:41     # 3
mavsai
Guest
 
Сообщения: n/a

о МИДИ клаве - детям

Есть идея о создании МИДИ клавы.

Искал по инету прогу - но вот нигде не
могу найти - простейший эмулятор клавитауры для изготовления синтезатора
для детишек. Эмулятора под ДОС с возможностью назначения клавиш в
самой программе.
Вот мои соображения на счет музыки дома и детям: Так как у нас
нет денег для покупки даже самого дешевого миди-синтезатора, то я
придумал как сделать самую дешевую МИДИ для детей. Не обязательно им
покупать дорогую МИДИ, может она им и не понравится и будет пылиться
без дела, а вот попробовать на простой - такая вот идея.

Да, играть с помощью виртуальных для Виндов пианино - не возможно из-за задержек по времени.

======

Что предложили:

Если карта стоит на том же компьютере, что и клавиатура, то наружу MIDI уж лучше выводить прямо
через внешний MIDI-out карты, а не через LPT! Для этого их надо посылать на MPU-401 порт. На
всякий случай - в win выдать что-то по MIDI - очень простая задача.

Ответ:
Как запасной вариант для начала - хорошо!

Согласен! Но я буду привязан к эмулятору клавиатуры, я её сам не напишу. Готовая же будет для
меня недоступна - чужой исходник всегда трудно понять. И при этом - у меня клава от Ямахи(?) 60
клавиш на герконах, а эмуляторы столько не имеют.
Далее. Нужен винт хоть на 50 мб, флопарь, монитор, видеокарта.

В моем варианте - наружу MIDI лучше выводить через LPT!

Вот что есть:
1) Программируем таймер для стабильности частоты (чтобы не зависела от частоты процессора.
Если программа будет стоять на компах с другой частотой от 286 до 4-го Пентиума. У меня дома
Атлон 1500) – это нужно для формирования последовательности МИДИ посылок:

// Override timer interrupt
// ------------------------
oldhandlerTIMER = getvect(TIMER_INT_VECT);
setvect(TIMER_INT_VECT,tim);
outportb(0x21, inportb(0x21) & 0xfe);
outportb(0x43, 0x34);
// Timer is set for 0x0080 * 838.0965 ns = 107.27635 microsec (9.3217 kHz)
outportb(0x40, 0x80); // least significant byte of timer count
outportb(0x40, 0x00); // most significant byte of timer count
// --------------------------------------------------------------------

2) По прерыванию таймера опрашиваем коды нажатия и отпускания клавиш:

Clock_counter = 0;

while(key != ESC)
{
if(kbflag)
{
key = inportb(0x60);
switch(key)
{
case A: n:=1; o:=2// Нота – октава (может сила нажатия - m)
extreg(n,o);
break;

case S: n:=2; o:=2
extreg(n,o);
break;
---------------------------------------

3) В модуле extreg(n,o); формируется временная последовательность обмена –посылки-
приема через LPT в формате МИДИ. Где код МИДИ выдается с нужной частотой, в нужном формате,
выходной уровень: TTL – это уже есть в LPT.

Что я не знаю для того, чтобы закончить эту программу: как должен выглядеть код МИДИ, в каком
формате. Описание самих кодов есть – нужен для начала хотя бы только один пример - выдачи
например, ноты Ля. То есть = как должен выглядеть весь процесс выдачи этой команды,
осциллограмма этой последовательности.

Чем этот вариант лучше для меня.
1. Большая часть программы уже написана и работала – управление шаговыми двигателями.
2. Нет ассемблера, которого я не знаю
3. Не надо опрашивать тип карты и писать для каждой подпрограмму. Лишь бы был стандартный
вход МИДИ. Например, у меня интегрированная АС97 – как ею управлять?
4. Я могу по своему усмотрению управлять МИДИ всеми 101 клавишами
кейборда + расширение Шифтом, Альтом, Контролом, и плюс
использовать потом и мышь и джойстик. А это перспективы в развитии!
5. И программа получается максимально простой под голым ДОСом.
6. Из железа - 386 проц, флопарь, мультикарта, клава, мышь. Не нужен винт, монитор.

================

Я думаю - лучше пусть рядом хоть лаптоп стоит и в нем управлять всем
процессом музтоворчества глухой МИДИ клавой, чем всё заталкивать в корпус клавы.

Я сейчас перед выбором таких вариантов:

1) Кейборд --- обработка в программе -- выдача МИДИ команд через LPT
2) Кейборд --- обработка в программе -- управление звуковой картой по
каналу DMA --- из неё выход МИДИ дальше
3) микроконтроллер --- выход МИДИ -- + в клаве кейборд для
управления виртуальными синтами в компе.
===========

Кто и что сможет:
- дать ссылку на исходники этих эмулятров под ДОС для карты Creative SB AWE64
- подсказать как закончить мой исходник.

- ваши варианты



Желаю всем всего самого доброго и удачи!
Искренне и с уважением,
Александр.