首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销毁音频剪辑线程

销毁音频剪辑线程
EN

Stack Overflow用户
提问于 2013-12-02 02:43:49
回答 1查看 560关注 0票数 1

我对使用声音相当陌生,我也能播放声音,但我在播放声音时遇到了java制作的所有声音剪辑线程的问题。我想知道我如何使所有的声音运行在一个线程上,或死亡,一旦它完成播放。

我目前正在运行这段代码来实际播放声音,在调用play()方法时创建所有内容的新实例:

代码语言:javascript
复制
private AudioInputStream as;
private Clip c;

public synchronized void play(final SoundType type) {
    reset();
    try {
        as = AudioSystem.getAudioInputStream(getSound(type));
        c = AudioSystem.getClip();
        c.open(as);
        c.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我能做的是,它使我能够在一次播放多个声音,通过创建一个新的实例,每一项在一次。唯一的问题是它在进程中创建了多个线程,当播放不同的声音时,程序会有这么多线程。

是否有一种更有效的方法,或者我可以对我目前的方法进行批准,允许我一次播放多个声音,但最终它会杀死那个剪辑线程,或者可能有一个线程处理所有声音?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-02 23:25:00

你可以写你自己的音频混合器。没那么难。从音频文件中提取音频数据,并在输出到单个SourceDataLine之前对所述帧进行求和。

或者,您可以使用TinySound (github上可用的代码)。这正是这种混合的一个很好的、干净的实现。

混合到单个输出的一个好处是:一些系统(有些Linux)不支持多个输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20320020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档