Pregunta

Hay una muy fresca de audio "juguete" llamado ToneMatrix . Me gustaría volver a implementar como un applet de Java. He intentado usar JFugue 's player.play con notas individuales para el sonido y Thread.sleep para medir el tiempo, pero los resultados son horrible.

JFugue deja de responder después de 17 (sí, realmente, conté) invocación de player.play y Thread.sleep es demasiado irregular para ofrecer un buen ritmo.

¿Qué recomendaría usted en su lugar? Básicamente, estoy buscando una forma sencilla de generar notas individuales de sonido sobre la marcha. Por lo que una fracción de segundo antes de que el sonido se debe jugar, tengo que ser capaz de mirar a los datos y contar la biblioteca de audio lo que notas tocar. (Múltiples notas en la armonía son probables.)

¿Fue útil?

Solución

Mi conjetura es que estamos olvidando de convertir las notas fuera de JFugue, o hay un error que se está olvidando que dejar de jugar las notas una vez iniciado.

Con MIDI es una manera bastante fácil de hacer lo que estás hablando. Aquí hay un poco de una mezcolanza de métodos útiles en el paquete MIDI que pueden ayudarle a empezar:

Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
MidiChannel midiChannel = synth.getChannels()[0];
midiChannel.allNotesOff();
currentInstrument = synth.getAvailableInstruments()[index];
System.out.println("Switching instrument to #" + index + ": " + currentInstrument.getName());
synth.loadInstrument(currentInstrument);
midiChannel.programChange(currentInstrument.getPatch().getBank(), currentInstrument.getPatch().getProgram());
midiChannel.noteOn(noteNumber, velocity);
midiChannel.noteOff(noteNumber);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top