mojp812 2008-10-30 09:17 采纳率: 100%
浏览 159
已采纳

java 播放声音问题

我现在写个应用程序来播放声音文件 ,播放单个声音文件没有问题 ,
但我连续播放多个声音文件 却有问题 ,我不想用 Thread.sleep(300) 这样实现文件与文件的间隔
我将 多个文件的字节流合并成一个 在播放去只播放第一个文件 不知道哪里有问题
希望大家指导,帮助
代码:
public class Sound {

private AudioStream as = null;

private byte[] bs = null;

public Sound() {

}

/**
 * 播放单个文件
 */
public synchronized void play(InputStream ins) {
    try {
        as = new AudioStream(ins);
    } catch (IOException e) {
        e.printStackTrace();
    }
    play(as);
}

/**
 * 播放
 * 
 * @param as
 */
public synchronized void play(AudioStream as) {
    AudioPlayer.player.start(as);
    try {
        AudioPlayer.player.join(5000L);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    AudioPlayer.player.stop(as);

}

/**
 * 播放单个文件
 */
public synchronized void play(InputStream[] ins) {
    as = getAllAudioStream(ins);
    play(as);

}

/**
 * 将多个流合并
 * 
 * @param ins
 * @return
 */
private AudioStream getAllAudioStream(InputStream[] ins) {
    try {
        if (ins == null || ins.length == 0) {
            return null;
        }
        byte[] bytes = new byte[1024100];
        bs = new byte[0];
        for (int i = 0, count = ins.length; i < count; i++) {
            InputStream in = ins[i];
            int length = 0;
            length = in.read(bytes);
            byte[] tmp = new byte[bs.length + length];
            int j = 0;
            for (; j < bs.length; j++) {
                tmp[j] = bs[j];
            }
            for (int k = 0; k < length; k++) {
                tmp[j++] = bytes[k];
            }
            bs = new byte[tmp.length];
            for (int n = 0; n < tmp.length; n++) {
                bs[n] = tmp[n];
            }
        }
        as = new AudioStream(new ByteArrayInputStream(bs));
    } catch (IOException e) {
        e.printStackTrace();
    }
    return as;
}

}

  • 写回答

1条回答 默认 最新

  • aidiyuxin 2008-10-30 09:26
    关注

    不建议合并流

    推荐楼主递归调用单个播放的方法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line