/* * TDirectSynthesizerTestCase.java */ /* * Copyright (c) 2003 by Matthias Pfisterer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.tritonus.test.tritonus.share.midi; import junit.framework.TestCase; import org.tritonus.share.midi.TMidiChannel; public class TMidiChannelTestCase extends TestCase { public TMidiChannelTestCase(String strName) { super(strName); } public void testChannelNumber() { int CHANNEL = 19; TestMidiChannel channel = new TestMidiChannel(CHANNEL); assertEquals("channel number", CHANNEL, channel.getChannelNumber()); } public void testNoteOff() { TestMidiChannel channel = new TestMidiChannel(0); int KEY; channel.resetCachedValues(); KEY = 0; channel.noteOff(KEY); assertEquals("noteOff() key", KEY, channel.getNoteOffKey()); assertEquals("noteOff() velocity", 0, channel.getNoteOffVelocity()); channel.resetCachedValues(); KEY = 11; channel.noteOff(KEY); assertEquals("noteOff() key", KEY, channel.getNoteOffKey()); assertEquals("noteOff() velocity", 0, channel.getNoteOffVelocity()); channel.resetCachedValues(); KEY = 127; channel.noteOff(KEY); assertEquals("noteOff() key", KEY, channel.getNoteOffKey()); assertEquals("noteOff() velocity", 0, channel.getNoteOffVelocity()); } public void testProgramChange() { TestMidiChannel channel = new TestMidiChannel(0); doTestProgramChange(channel, 0, 0, 0); doTestProgramChange(channel, 127, 127, 127); } private void doTestProgramChange(TestMidiChannel channel, int nBankHigh, int nBankLow, int nProgram) { channel.resetCachedValues(); int nBank = (nBankHigh << 7) | nBankLow; channel.programChange(nBank, nProgram); System.out.println("(c)" + channel.getSetControllerNumber()); System.out.println("(v)" + channel.getSetControllerValue()); System.out.println("(c2)" + channel.getSetControllerNumber2()); System.out.println("(v2)" + channel.getSetControllerValue2()); assertEquals("programChange() bank high (c)", 0, channel.getSetControllerNumber()); assertEquals("programChange() bank high (v)", nBankHigh, channel.getSetControllerValue()); assertEquals("programChange() bank low (c)", 32, channel.getSetControllerNumber2()); assertEquals("programChange() bank low (v)", nBankLow, channel.getSetControllerValue2()); assertEquals("programChange() program", nProgram, channel.getProgramChangeValue()); } public void testResetAllControllers() { TestMidiChannel channel = new TestMidiChannel(0); channel.resetAllControllers(); assertEquals("resetAllControllers(): controller", 121, channel.getSetControllerNumber()); assertEquals("resetAllControllers(): value", 0, channel.getSetControllerValue()); } public void testAllNotesOff() { TestMidiChannel channel = new TestMidiChannel(0); channel.allNotesOff(); assertEquals("allNotesOff(): controller", 123, channel.getSetControllerNumber()); assertEquals("allNotesOff(): value", 0, channel.getSetControllerValue()); } public void testAllSoundOff() { TestMidiChannel channel = new TestMidiChannel(0); channel.allSoundOff(); assertEquals("allSoundOff(): controller", 120, channel.getSetControllerNumber()); assertEquals("allSoundOff(): value", 0, channel.getSetControllerValue()); } public void testLocalControl() { TestMidiChannel channel = new TestMidiChannel(0); channel.localControl(true); assertEquals("localControl(true): controller", 122, channel.getSetControllerNumber()); assertEquals("localControl(true): value", 127, channel.getSetControllerValue()); channel.resetCachedValues(); channel.localControl(false); assertEquals("localControl(false): controller", 122, channel.getSetControllerNumber()); assertEquals("localControl(false): value", 0, channel.getSetControllerValue()); } private static class TestMidiChannel extends TMidiChannel { private int m_nNoteOffKey; private int m_nNoteOffVelocity; private int m_nSetControllerNumber; private int m_nSetControllerValue; private int m_nSetControllerNumber2; private int m_nSetControllerValue2; private int m_nGetControllerNumber; private int m_nProgramChangeValue; public TestMidiChannel(int nChannel) { super(nChannel); resetCachedValues(); } /** * Used to obtain the return value of the protected super class method. * @return */ public int getChannelNumber() { return getChannel(); } public void resetCachedValues() { m_nNoteOffKey = -1; m_nNoteOffVelocity = -1; m_nSetControllerNumber = -1; m_nSetControllerValue = -1; m_nSetControllerNumber2 = -1; m_nSetControllerValue2 = -1; m_nGetControllerNumber = -1; m_nProgramChangeValue = -1; } public int getNoteOffKey() { return m_nNoteOffKey; } public int getNoteOffVelocity() { return m_nNoteOffVelocity; } public int getSetControllerNumber() { return m_nSetControllerNumber; } public int getSetControllerValue() { return m_nSetControllerValue; } public int getSetControllerNumber2() { return m_nSetControllerNumber2; } public int getSetControllerValue2() { return m_nSetControllerValue2; } public int getProgramChangeValue() { return m_nProgramChangeValue; } /** * Records the passed values. */ public void controlChange(int nController, int nValue) { System.out.println("CC: " + nController + ": " + nValue); if (m_nSetControllerNumber != -1) { m_nSetControllerNumber2 = nController; m_nSetControllerValue2 = nValue; } else { m_nSetControllerNumber = nController; m_nSetControllerValue = nValue; } } public int getChannelPressure() { return 0; } public int getController(int nController) { return 0; } public boolean getMute() { return false; } public int getPitchBend() { return 0; } public int getPolyPressure(int nNoteNumber) { return 0; } public int getProgram() { return 0; } public boolean getSolo() { return false; } public void noteOff(int nNoteNumber, int nVelocity) { m_nNoteOffKey = nNoteNumber; m_nNoteOffVelocity = nVelocity; } public void noteOn(int nNoteNumber, int nVelocity) { } public void programChange(int nProgram) { m_nProgramChangeValue = nProgram; } public void setChannelPressure(int nPressure) { } public void setMute(boolean bMute) { } public void setPitchBend(int nBend) { } public void setPolyPressure(int nNoteNumber, int nPressure) { } public void setSolo(boolean bSolo) { } } } /*** TDirectSynthesizerTestCase.java ***/