Path: blob/master/test/jdk/javax/sound/midi/Gervill/SoftChannel/NoteOverFlowTest.java
41159 views
/*1* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/* @test24@summary Test SoftChannel noteOn/noteOff overflow test25@modules java.desktop/com.sun.media.sound26*/2728import javax.sound.midi.MidiChannel;29import javax.sound.midi.VoiceStatus;30import javax.sound.sampled.AudioFormat;31import javax.sound.sampled.AudioInputStream;3233import com.sun.media.sound.AudioSynthesizer;34import com.sun.media.sound.SoftSynthesizer;3536public class NoteOverFlowTest {3738public static void main(String[] args) throws Exception39{40AudioSynthesizer synth = new SoftSynthesizer();41AudioFormat format = new AudioFormat(44100, 16, 2, true, false);42AudioInputStream stream = synth.openStream(format, null);4344// Make all voices busy, e.g.45// send midi on and midi off on all available voices46MidiChannel ch1 = synth.getChannels()[0];47ch1.programChange(48); // Use contionus instrument like string ensemble48for (int i = 0; i < synth.getMaxPolyphony(); i++) {49ch1.noteOn(64, 64);50ch1.noteOff(64);51}5253// Now send single midi on, and midi off message54ch1.noteOn(64, 64);55ch1.noteOff(64);5657// Read 10 sec from stream, by this time all voices should be inactvie58stream.skip(format.getFrameSize() * ((int)(format.getFrameRate() * 20)));5960// If no voice are active, then this test will pass61VoiceStatus[] v = synth.getVoiceStatus();62for (int i = 0; i < v.length; i++) {63if(v[i].active)64{65throw new RuntimeException("Not all voices are inactive!");66}67}6869// Close the synthesizer after use70synth.close();71}72}737475