需求:可以在JSP中播放我得到的排队序号。我的排队顺序号例子A001,那么则播放请A001号前来办理业务

解决方案 »

  1.   

    直接学习那些在浏览器上放MP3的网站就行了吧?本质上就是开个页面,嵌入一个ActiveX,然后播放MP3。你面临的问题是:A001这个东西,是预先录入好比如 10000份,还是用语音合成。
      

  2.   


    我现在的想法是拆分,A+N+N+N来报数,这样需要准备11个mp3文件,A和10个数字,然后拼接语音,问题是怎么实现我不知道啊
      

  3.   

    你想拆分到最细粒度,这个浪费系统性能,而且我个人觉得效果可能也一般。需要用javax.sound.sampled包来做,不知道有没有开源实现。建议你以 “Java 声音文件合并” 之类的方式来提问和Google,这样目标明确写。其实你看大多数的大厅系统,都是直接喊号码,你直接录1000个号(考虑用专门的音频编辑工具批量生成)进去,基本就够用了。
      

  4.   

    找到了一段示例代码,你试试看吧。如果能用,就写一个Servlet,根据参数将几个文件读取进来,然后用流式输出到response中进去,当然别忘了设置HTTP头信息,比如Content-Type等。写好了Servlet后,自己直接用IE浏览器直接访问下URL(注意带上参数),看能不能下载到合并后的音频文件,能就已经成功了。最后的播放页面上仍然是一样的,用一个ActiveX播放器,但URL地址直接引用你写的Servlet的地址即可。
     public void mergeFile(File srcFile1, File srcFile2, File descFile)
       throws IOException, UnsupportedAudioFileException {
      AudioFileFormat aff = AudioSystem.getAudioFileFormat(getResources().openRawResource(R.raw.music0));
      
      AudioInputStream ais1 = AudioSystem.getAudioInputStream(getResources().openRawResource(R.raw.music0));
      
      AudioInputStream ais2 = AudioSystem.getAudioInputStream(getResources().openRawResource(R.raw.music1));
      
      SequenceInputStream sis = new SequenceInputStream(ais1, ais2);
      
      AudioSystem.write(new AudioInputStream(sis, aff.getFormat(), ais1.getFrameLength() + ais2.getFrameLength()),
        aff.getType(), descFile);
      
      if (ais1 != null)
       ais1.close();
      if (ais2 != null)
       ais2.close();
      if (sis != null)
       sis.close();
     }
      

  5.   


    那您能给我一个ActiveX播放器吗?顺便告诉我使用方法,如果可能的话,谢谢!
      

  6.   

    默认就是用Windows自带的MediaPlayer啊。下面这段是放自己电脑C盘下的音乐,你试试看吧:<OBJECT width="1024" height="800" ID="Player" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" >
    <param name="URL" value="file:///C:\\北京欢迎你正式版.WMV" />
    <PARAM name="autoStart" value="True"/>
    <param name="volume" value="100"/>
    <param name="stretchToFit" value="1"> 
    <param name="uiMode" value="none"/>
    </OBJECT>