2013-02-28 2 views
0

Я разрабатываю простое приложение в Android, которое выполняет MIDI-воспроизведение, и это прекрасно. Мне было интересно, можно ли включить/отключить MIDI-каналы с помощью встроенного API android/java, и если да, то как? Я изо всех сил пытаюсь реализовать эту функцию.Включить/отключить MIDI-канал в android (java)

Я узнал в Интернете, что пакет java «javax.sound (.midi)» был включен в более раннюю версию системы Android, но позже был удален. Я не могу найти какую-либо библиотеку в Интернете, которая предоставляет необходимые мне функциональные возможности. Одна библиотека, с которой я столкнулась, позволила мне добавлять и удалять треки с MIDI, но трек отличается от канала.

У меня есть объект MediaPlayer с файлом midi, установленным в качестве источника данных, и он действительно воспроизводит файл, но я действительно хочу реализовать функцию включения/выключения любого из 16 стандартных MIDI-каналов. Он не должен быть в режиме реального времени, любое решение приемлемо, если оно не требует серверной стороны. Например, если мне нужно изменить существующий файл midi, напишите его на диск и перезапустите воспроизведение, это не проблема. Любые предложения/опыт: \!?

Спасибо

ответ

1

Эта библиотека может делать то, что вы спрашиваете: https://code.google.com/p/android-midi-lib/

Прочитайте файл. Перебирайте события в каждом треке, проверяйте канал события, удаляйте его по указанному каналу. Напишите это. Сыграй. Радуйтесь.

+0

Большое спасибо, к тому моменту, когда я получил и прочитал этот ответ, я уже сделал это сам, используя ту же библиотеку, о которой вы говорили. Это не очень эффективно, хотя, есть некоторая задержка в итерации и запись файла, который разрушает опыт для воспроизведения в реальном времени –

+0

@SpeedDemon Я использовал библиотеку, на которую вы ссылались, и играл в midi-файлы с помощью MediaPlayer. Я не имел успеха ни с одним из каналов midi (кроме фортепиано). Вы использовали MediaPlayer? Если не то, что вы использовали? Если да, то какой трюк вы использовали для включения других каналов? – stephen

+0

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