各路大侠,江湖救急啊!
我想用java播放两个wav文件,比如说是1.wav和2.wav,首先播放1.wav再播放2.wav但是不能将其分开播放
比如不能使用下面的程序:
AudioStream au;
InputStream in1 = new FileInputStream("1.wav");
au = new AudioStream(in1);
AudioPlayer.player.start(au);
InputStream in2 = new FileInputStream("2.wav");
au = new AudioStream(in2);
AudioPlayer.player.start(au);
也就是说不能调用两次的AudioPlayer.player.start();
只允许调用一次AudioPlayer.player.start();
我想问的是如何将两个wav文件都读入inputstream而且在AudioPlayer.player.start(au)的时候可以首先播放1.wav的声音再播放2.wav的声音。谢谢
在线等......

解决方案 »

  1.   

    InputStream   in1   =   new   FileInputStream( "1.wav "); 
    au1  =   ew   AudioStream(in1); 
    AudioPlayer.player.start(au); 
    InputStream   in2   =   new   FileInputStream( "2.wav "); 
    au2   =   new   AudioStream(in2); 
    List<AudioStream> list=new java.util.ArrayList<AudioStream>();;
    list.add(a1);
    list.add(a2);
    for(AudioStream au:list){
      AudioPlayer.player.start(au);
    }
      

  2.   

    你这样调用了两次AudioPlayer.player.start(au); 
    因为list文件有两个元素
    我的意思是说能否将1.wav文件和2.wav文件先合并成一个wav文件,比如说3.wav文件
    谢谢ProvidenceZY 
      

  3.   

    ???
    怎么没人帮小弟解答?
    我主要是想做一个数字播报
    比如我输入0205,则播放文件下的0.wav + 2.wav + 0.wav + 5.wav
      

  4.   

    合并两个WAVE文件到1个,看来得用第三方组件,不知JAVA本身有没有这样的API可用。
      

  5.   

    list 容器类 专门放置流 然后你一个一个的去放吧 
      

  6.   


    try {
        Process process = Runtime.getRuntime().exec("cmd /c copy 1.wav+2.wav 3.wav");  //调用Ping命令
        InputStream in1=new FileInputStream("3.wav");     
        AudioStream au =new AudioStream(in2);  
        au.player.start(au);
        //结束后也可以将新的wav删除  
    }catch (Exception  e)
        {
          e.printStackTrace();
          }  
          }
     
      

  7.   

    哇,楼上的大侠,这个能在linux下执行吗?
      

  8.   

    第一次知道copy可以这么用
    收获不小~~
      

  9.   

    copy是可以这样用的,对于音频可以直接在后面延续
    但是这种方式好像只能在windows系统中
    在linux系统好像不行
    没有cmd这个命令不知道谁还有其他的办法?谢谢
      

  10.   

    linux下:
    try {
        Process process = Runtime.getRuntime().exec("cp>1.wav+2.wav 3.wav");  //调用cp命令
        InputStream in1=new FileInputStream("3.wav");     
        AudioStream au =new AudioStream(in2);  
        au.player.start(au);
        //结束后也可以将新的wav删除  
    }catch (Exception  e)
        {
          e.printStackTrace();
          }  
          }
      

  11.   

    import javax.sound.sampled.*;     
       file = new File("XXXX.WAV");
            issoundfirst = true;      try
          {
            stream = (AudioInputStream)AudioSystem.
              getAudioInputStream(
                file);
            AudioFormat format = stream.getFormat();
            if((format.getEncoding() == AudioFormat.Encoding.ULAW) ||
               (format.getEncoding() == AudioFormat.Encoding.ALAW))
            {
              AudioFormat tmp = new AudioFormat(
                AudioFormat.Encoding.PCM_SIGNED,
                format.getSampleRate(),
                format.getSampleSizeInBits() * 2,
                format.getChannels(),
                format.getFrameSize() * 2,
                format.getFrameRate(),
                true);
              stream = AudioSystem.getAudioInputStream(tmp,stream);
              format = tmp;
            }
            DataLine.Info info = new DataLine.Info(
              Clip.class,
              stream.getFormat(),
              ((int)stream.getFrameLength() *
               format.getFrameSize()));
            clip = (Clip)AudioSystem.getLine(info);
            clip.open(stream);
            clip.start();
            while(clip.isActive())
            {        }
            clip.stop();
            clip.close();
          }
          catch(Exception ex)
          {
            ex.printStackTrace();
          }试试这种方式吧!连续的也不难实现。这是只读一个的。
            while(clip.isActive())
            {        }
    部分控制其一定读完。
      

  12.   

    Clip clip;
    AudioInputStream stream;
      

  13.   

    这个,你用线程控制一下,AudioStream au;
    InputStream in1 = new FileInputStream("1.wav");
     au = new AudioStream(in1);
     AudioPlayer.player.start(au);
    thred.seelp(1000);
    InputStream in2 = new FileInputStream("2.wav");
     au = new AudioStream(in2);
     AudioPlayer.player.start(au);
    这样就可以分开播放了。