пытался заставить играть звук, в определенном темпе заного,но в конце дошел до того что звука не слышно,но цыкл таймера работает(в моей программе метронома,это видно визульно палка ходит туда сюда...,но звука не слышно! ) | Код |
package metronome;//wroten by David Kurushin (Muerto)
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.sql.*; //for sound import javax.sound.sampled.*; import java.io.*; //timer import java.util.Timer; import java.util.TimerTask;
public class Play { Timer timer; Clip clip; AudioInputStream stream; AudioFormat format; File file; DataLine.Info info; float dB; FloatControl gainControl; Play(int delay,int period,final Metronome metronome) throws IOException { int soundkind=metronome.getSound(); final V_Metronome visual_m=metronome.Return_V_met(); if(soundkind==1)file=new File("Samples/Click1.wav"); if(soundkind==2)file=new File("Samples/Click2.wav"); if(soundkind==3)file=new File("Samples/Bass Drum.wav"); if(soundkind==4)file=new File("Samples/Crash.wav"); if(soundkind==5)file=new File("Samples/ShortCrash.wav"); if(soundkind==6)file=new File("Samples/Hi hat 1.wav"); if(soundkind==7)file=new File("Samples/Hi hat 2.wav"); if(soundkind==8)file=new File("Samples/Hi hat 3.wav"); if(soundkind==9)file=new File("Samples/Hi hat 4.wav"); if(soundkind==10)file=new File("Samples/Hi hat 5.wav"); if(soundkind==11)file=new File("Samples/Hi hat 6.wav"); if(soundkind==12)file=new File("Samples/Snare.wav"); if(soundkind==13)file=new File("Samples/Stick.wav"); if(soundkind==14)file=new File("Samples/Stick2.wav"); if(soundkind==15)file=new File("Samples/Tom.wav"); try{ stream = AudioSystem.getAudioInputStream(file); format = stream.getFormat(); stream = AudioSystem.getAudioInputStream(format, stream); // Create the clip info = new DataLine.Info( Clip.class, stream.getFormat(), ((int)stream.getFrameLength()*format.getFrameSize())); clip = (Clip) AudioSystem.getLine(info); } catch (IOException e) { } catch (UnsupportedAudioFileException e) { }catch (LineUnavailableException e) { } timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { final double value = metronome.getVolume() / 100.0; try{ // This method does not return until the audio file is completely loaded clip.open(stream); gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); dB = (float) (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0); gainControl.setValue(dB); // Start playing clip.start(); if(metronome.getNumNum() == 1){ metronome.setNumNum(0); } else{ metronome.setNumNum(1); } visual_m.repaint(); while (clip.isActive())Thread.sleep(10); clip.close(); } catch (IOException e) { }catch (LineUnavailableException e) { }catch (InterruptedException e){ } } }, delay, period); }
public void stop() { timer.cancel(); } }
|
помогите пожалуйста, что в этой части не так,и как правильно заставить его играть заного каждый раз. | Код | try{ // This method does not return until the audio file is completely loaded clip.open(stream); gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); dB = (float) (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0); gainControl.setValue(dB); // Start playing clip.start(); if(metronome.getNumNum() == 1){ metronome.setNumNum(0); } else{ metronome.setNumNum(1); } visual_m.repaint(); while (clip.isActive())Thread.sleep(10); clip.close(); } catch (IOException e) { }catch (LineUnavailableException e) { }catch (InterruptedException e){ }
|
|