2013-09-17 5 views
0

Я хотел бы использовать данные, поступающие с устройства MIDI. Мне нужно получить уведомление о возникновении определенных событий, чтобы я мог делать такие вещи, как перенос определенных заметок на лету или вызов метода или что бы вы ни думали.Как вы получаете доступ к данным из потока MIDI IN в java?

Хотя я совершенно новичок в программировании в целом и, в частности, в java, я уже смог воспроизвести последовательность с помощью секвенсора, используя javax.sound.midi. Я даже могу добавить слушателя, который говорит мне, когда секвенсер играет определенные события. Теперь я надеялся сделать что-то подобное с потоком MIDI IN, но я не знаю, как это сделать.

Любые идеи или обходные пути приветствуются, потому что я сейчас застрял.

+0

Показать код. Мы поможем, если вы объясните, за что вы застряли ... – ppeterka

+0

Ну, это проблема, о которой я даже не знаю, с чего начать. С интерфейсом Sequencer все довольно просто, потому что вы можете использовать addControllerEventListener() или addMetaEventListener() в качестве триггеров, когда указанные сообщения воспроизводятся секвенсором. К сожалению, эти методы не работают для устройств, отличных от Sequencer. –

+0

Вы задали очень интересные и уникальные вопросы. Возможно, вам удастся опубликовать любой соответствующий код, который у вас есть или может найти. Попробуйте сузить вопрос до очень конкретных вопросов. Я бы хотел, чтобы сообщество SO помогло вам достичь своей цели. – medokr

ответ

0

Для записи данных MIDI, вы должны

  • подключить вход порта Transmitter к вашим Sequencer «ы Receiver путем вызова метода setReceiver,
  • создавать новые Sequence/Track объектов и подключить их к Sequencer,
  • включить запись на дорожку (-ы), и
  • начните запись на своем Sequencer ,

(см documentation)

+0

Спасибо за ваши усилия, но это не совсем то, что я имел в виду. Я знаю, что я делаю паршивую работу, объясняя себя, особенно будучи музыкантом, а не программистом. –

0

я, наконец, нашел решение, и я хотел бы прояснить этот вопрос и добавить свое решение в случае, если это полезно для кого-то еще.

Проект, над которым я работаю (который, между прочим, над моей головой), является аранжировщиком MIDI-клавиатуры. Если вы не знаете, что это такое, это клавиатура, которая воспроизводит паттерны (стили) и изменяет тон и расположение в зависимости от аккорда. То, что мне было нужно, было то, что, как мне кажется, называется дампом из midi в порту, чтобы моя программа могла понять, какой аккорд был воспроизведен, чтобы он мог реагировать секвенсором по-разному.

Чтобы ответить на мой собственный оригинальный вопрос, вам нужно создать новый передатчик для вашего миди в порту. Затем создайте новый приемник для приема потока данных из нового передатчика. Наконец, получатель отправляет данные в PrintStream, а затем вы можете делать то, что хотите, с потоком данных!

0

Внесите метод send (javax.sound.midi.ShortMessage, long) интерфейса javax.sound.midi.Receiver в свой собственный класс и используйте экземпляры последнего, как и для других объектов Receiver.