public MidiChannel[] getChannels() { synchronized (control_mutex) { // if (external_channels == null) => the synthesizer is not open, // create 16 proxy channels // otherwise external_channels has the same length as channels array if (external_channels == null) { external_channels = new SoftChannelProxy[16]; for (int i = 0; i < external_channels.length; i++) external_channels[i] = new SoftChannelProxy(); } MidiChannel[] ret; if (isOpen()) ret = new MidiChannel[channels.length]; else ret = new MidiChannel[16]; for (int i = 0; i < ret.length; i++) ret[i] = external_channels[i]; return ret; } }
@Override public MidiChannel[] getChannels() { synchronized (control_mutex) { // if (external_channels == null) => the synthesizer is not open, // create 16 proxy channels // otherwise external_channels has the same length as channels array if (external_channels == null) { external_channels = new SoftChannelProxy[16]; for (int i = 0; i < external_channels.length; i++) external_channels[i] = new SoftChannelProxy(); } MidiChannel[] ret; if (isOpen()) ret = new MidiChannel[channels.length]; else ret = new MidiChannel[16]; for (int i = 0; i < ret.length; i++) ret[i] = external_channels[i]; return ret; } }
private static void playWarningSound() { // if (2 > 1) { // return; // } try { // int velocity = 127; // max volume int velocity = 90; // max volume int sound = 65; Synthesizer synthesizer = MidiSystem.getSynthesizer(); synthesizer.open(); MidiChannel channel = synthesizer.getChannels()[9]; // drums channel. for (int i = 0; i < 10; i++) { Thread.sleep(100); channel.noteOn(sound + i, velocity); Thread.sleep(100); channel.noteOff(sound + i); } } catch (MidiUnavailableException | InterruptedException e1) { e1.printStackTrace(); } }
@Override public void render() throws RenderCommandException { sleepUntil(getFrame().playOutTime); for(MidiMessage msg : getFrame().messages) { if(msg instanceof ShortMessage) { final ShortMessage sm = (ShortMessage)msg; final MidiChannel ch = synth.getChannels()[sm.getChannel()]; switch(sm.getCommand()) { case ShortMessage.NOTE_ON: ch.noteOn(sm.getData1(), sm.getData2()); continue; case ShortMessage.NOTE_OFF: ch.noteOff(sm.getData1(), sm.getData2()); continue; case ShortMessage.PROGRAM_CHANGE: ch.programChange(sm.getData1()); continue; case ShortMessage.CONTROL_CHANGE: ch.controlChange(sm.getData1(), sm.getData2()); continue; } } throw new RenderCommandException("Unknown MIDI Command:" + MidiToString.toString(msg)); } }
/** * Stops all notes from playing on all MIDI channels. */ public static void allNotesOff(Synthesizer synth) { try { if (!synth.isOpen()) { synth.open(); } MidiChannel[] channels = synth.getChannels(); for (int i=0; i < channels.length; i++) { channels[i].allNotesOff(); } } catch (MidiUnavailableException e) { throw new JFugueException(JFugueException.GENERAL_ERROR); } }
public void loadMidiSeq(File newseqfile) { try { seq_errmsg = null; Sequence newseq = MidiSystem.getSequence(newseqfile); seq = newseq; seqfile = newseqfile; // boolean running = seqr.isRunning(); seqr.stop(); // Reset All Channels for(MidiChannel c : softsynth.getChannels()) c.resetAllControllers(); seqr.setSequence(seq); seqr.setTickPosition(0); seqr.start(); } catch (Throwable e1) { seq_errmsg = e1.toString(); } }
/** * Returns the MIDI channel. * * @param synthesizer the synthesizer. * @param channel the channel number. * @param required if {@code true} then throws exception when not found or not available. Otherwise returns {@code null}. * @return the MIDI channel. */ public static MidiChannel getChannel(Synthesizer synthesizer, int channel, boolean required) { MidiChannel[] channels = synthesizer.getChannels(); if (channel >= channels.length || channels[channel] == null) { if (required) { throw new IllegalArgumentException("Channel " + channel + " is not available"); } else { return null; } } return channels[channel]; }
public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber, int velocity) { this.channel = channel; this.voice = voice; this.noteNumber = noteNumber; this.velocity = velocity; on = true; }
public static void main(String[] args) throws Exception { AudioSynthesizer synth = new SoftSynthesizer(); AudioFormat format = new AudioFormat(44100, 16, 2, true, false); AudioInputStream stream = synth.openStream(format, null); // Make all voices busy, e.g. // send midi on and midi off on all available voices MidiChannel ch1 = synth.getChannels()[0]; ch1.programChange(48); // Use contionus instrument like string ensemble for (int i = 0; i < synth.getMaxPolyphony(); i++) { ch1.noteOn(64, 64); ch1.noteOff(64); } // Now send single midi on, and midi off message ch1.noteOn(64, 64); ch1.noteOff(64); // Read 10 sec from stream, by this time all voices should be inactvie stream.skip(format.getFrameSize() * ((int)(format.getFrameRate() * 20))); // If no voice are active, then this test will pass VoiceStatus[] v = synth.getVoiceStatus(); for (int i = 0; i < v.length; i++) { if(v[i].active) { throw new RuntimeException("Not all voices are inactive!"); } } // Close the synthesizer after use synth.close(); }
public static Soundbank createTestSoundbankWithChannelMixer() { SF2Soundbank soundbank = createTestSoundbank(); SimpleSoundbank simplesoundbank = new SimpleSoundbank(); SimpleInstrument simpleinstrument = new SimpleInstrument() { public ModelChannelMixer getChannelMixer(MidiChannel channel, AudioFormat format) { return new ModelAbstractChannelMixer() { boolean active = true; public boolean process(float[][] buffer, int offset, int len) { for (int i = 0; i < buffer.length; i++) { float[] cbuffer = buffer[i]; for (int j = 0; j < cbuffer.length; j++) { cbuffer[j] = -cbuffer[j]; } } return active; } public void stop() { active = false; } }; } }; simpleinstrument.add(soundbank.getInstruments()[0]); simplesoundbank.addInstrument(simpleinstrument); return simplesoundbank; }
public static void main(String[] args) throws Exception { AudioSynthesizer synth = new SoftSynthesizer(); synth.openStream(null, null); assertTrue(synth.getChannels() != null); assertTrue(synth.getChannels().length == 16); MidiChannel[] channels = synth.getChannels(); for (int i = 0; i < channels.length; i++) { assertTrue(channels[i] != null); } synth.close(); }
@Override public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber, int velocity) { this.channel = channel; this.voice = voice; this.noteNumber = noteNumber; this.velocity = velocity; on = true; }