Solución:
Hay dos bibliotecas que se utilizarán para reproducir un archivo midi con SoundFont.
Conductor Midi
Solo un sintetizador para reproducir notas MIDI en Android. Puede usarlo junto con la biblioteca USB / Bluetooth-MIDI para crear su aplicación MIDI.
Se admite el archivo SoundFont2.
Biblioteca MIDI de Android
Esta biblioteca proporciona una interfaz para leer, manipular y escribir archivos MIDI. La “reproducción” se admite como un sistema de envío de eventos en tiempo real. Esta biblioteca NO incluye reproducción de audio real o interfaz de dispositivo.
Para inicializar SF2-SoundBank
SF2Soundbank sf = new SF2Soundbank(getAssets().open("test.sf2"));
synth = new SoftSynthesizer();
synth.open();
synth.loadAllInstruments(sf);
synth.getChannels()[0].programChange(0);
synth.getChannels()[1].programChange(1);
recv = synth.getReceiver();
Para reproducir las notas Midi desde un archivo midi
MidiFile midiFile = new MidiFile(getAssets().open("test.mid"));
// Create a new MidiProcessor:
MidiProcessor processor = new MidiProcessor(midiFile);
// listen for all midi events:
processor.registerEventListener(new MidiEventListener() {
@Override
public void onStart(boolean fromBeginning) {
}
@Override
public void onEvent(MidiEvent event, long ms) {
if (event.getClass() == NoteOn.class) {
NoteOn noteOn = ((NoteOn) event);
try {
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, channel, noteOn.getNoteValue(), noteOn.getVelocity());
recv.send(msg, ms);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}
} else if (event.getClass() == NoteOff.class) {
NoteOff noteOff = ((NoteOff) event);
try {
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, channel, noteOff.getNoteValue(), noteOff.getVelocity());
recv.send(msg, ms);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}
}
}
@Override
public void onStop(boolean finished) {
}
}, MidiEvent.class);
// Start the processor:
processor.start();
Variable para definir canal SF
private int channel = 0;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)