Я создаю приложение, которое генерирует звуки живых инструментов, и я планирую использовать новый Midi API, представленный в Android Marshmallow (версия 6.0). Я прочитал документ обзора пакета здесь http://developer.android.com/reference/android/media/midi/package-summary.html, и я знаю, как создавать заметки Midi, но я все еще не уверен: как я действительно играю эти заметки после того, как я 'Сгенерировали свои данные Midi?
Мне нужна программа синтезатора для воспроизведения примечаний Midi? Если да, должен ли я сделать свой собственный или он предоставляется Android или сторонним лицом?
Я новичок в Midi, поэтому, пожалуйста, будьте как можно более наглядными с вашим ответом.
Что я пробовал до сих пор: Я создал объект менеджера Midi и открыл входной порт
MidiManager m = (MidiManager)context.getSystemService(Context.MIDI_SERVICE);
MidiInputPort inputPort = device.openInputPort(index);
Затем я отправил тестовую заметку на сообщение midi на порт
byte[] buffer = new byte[32];
int numBytes = 0;
int channel = 3; // MIDI channels 1-16 are encoded as 0-15.
buffer[numBytes++] = (byte)(0x90 + (channel - 1)); // note on
buffer[numBytes++] = (byte)60; // pitch is middle C
buffer[numBytes++] = (byte)127; // max velocity
int offset = 0;
// post is non-blocking
inputPort.send(buffer, offset, numBytes);
Я также создал класс для получения сообщений с нотами midi
class MyReceiver extends MidiReceiver {
public void onSend(byte[] data, int offset,
int count, long timestamp) throws IOException {
// parse MIDI or whatever
}
}
MidiOutputPort outputPort = device.openOutputPort(index);
outputPort.connect(new MyReceiver());
Теперь, где я больше всего смущен. Случай использования моего приложения - это все-в-одном композиция и инструмент для воспроизведения музыки. Другими словами, мое приложение должно содержать или использовать виртуальное midi-устройство (например, намерение другого MIDI-синтезатора приложения). Если кто-то уже не сделал такой синтезатор, я должен создать его самостоятельно в течение жизненного цикла приложения. Как я фактически конвертирую полученную миди noteOn() в звук, выходящий из моих динамиков? Я особенно смущен, потому что также должен быть способ программно решить, на каком типе инструмента звучит примечание: как это делается в синтезаторе?
Поддержка Midi в Android Marshmallow довольно нова, поэтому я не смог найти какие-либо учебники или примеры приложений для синтезаторов в Интернете. Любое понимание оценено.