首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在方法之外制作剪辑?

如何在方法之外制作剪辑?
EN

Stack Overflow用户
提问于 2022-05-29 21:36:00
回答 2查看 65关注 0票数 1

我创建了一个在调用时启动或停止音乐的方法,但是如果我不止一次调用它,它就会启动一个重复的剪辑。我无法找到如何使音频剪辑变量之外的变量,以防止这种情况。

代码语言:javascript
运行
复制
    public static void playSound(boolean play) throws Exception {
    File sound = new File("wave.wav");
    Clip clip = AudioSystem.getClip();
    if(play=true) {
        AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound);
        inputStream = AudioSystem.getAudioInputStream(sound);
        clip.open(inputStream);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        clip.start();
    } else if (play=false) {
        clip.stop();
    }
}

更新:因此,经过几个小时的尝试,我决定将启动音乐的代码放在主方法中,使剪辑变量保持静态(所以允许我在事件中使用它),然后在事件中使用clip.stop()。只是想和你分享一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-30 00:57:48

除了更完整的答案,让声明读起来像

代码语言:javascript
运行
复制
if(play)
{
    // Play code
}
else
{
    clip.stop();
}

而不是

代码语言:javascript
运行
复制
if(play == true)
{
    // Play code
}
else if(play == false)
{
    clip.stop();
}

更好的风格。

编辑以获取附加信息

为了回答问题的标题,

如何在方法之外制作剪辑?

我相信你是在问如何格式化一个类级变量。这需要以下几点:

  • 访问修饰符,需要-默认(当您键入任何内容时)、公共、受保护、私有
  • 关键字,可选--用于限制用户
  • 静态关键字,可选--用于内存管理
  • 数据类型,需要--指定可以存储在变量中的不同大小和值。
  • 名称,需要--变量是如何被调用或引用的。不能在保留关键字列表中

使用用于此调用的类:Clip clip = AudioSystem.getClip();,您可以使用以下方法创建空的类级变量:

代码语言:javascript
运行
复制
private static Object objectName; 

链接

票数 0
EN

Stack Overflow用户

发布于 2022-05-29 21:55:37

您当前的问题是if(play=true) {,这是将play设置为true,因此每次都会重新打开剪辑并开始播放。

您应该使用if(play==true) {来确定play的值是否为true,但也可以使用if(play) {

有关更多细节,请查看如果-然后和如果-然后-否则语句。

本质上,=是用于赋值的,==是用于评估的。if条件必须等同于布尔值(true/false),因此当使用布尔值时,不必使用==,只需使用值本身即可。

假设playtrueif (play == true)if (play)都将计算为true

话虽如此,一旦你的剪辑初始化和打开,你不需要重新打开它,当你想再次开始播放,例如.

代码语言:javascript
运行
复制
public class Track {
    private Clip clip;
    private File source;

    public Track(File source) {
        this.source = source;
    }

    public static void playSound(boolean play) throws Exception {
        File sound = new File("wave.wav");
        Clip clip = AudioSystem.getClip();
        if (play = true) {
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound);
            inputStream = AudioSystem.getAudioInputStream(sound);
            clip.open(inputStream);
            clip.loop(Clip.LOOP_CONTINUOUSLY);
            clip.start();
        } else if (play = false) {
            clip.stop();
        }
    }

    public File getSource() {
        return source;
    }

    public Clip getClip() {
        return clip;
    }

    public void play() throws LineUnavailableException, UnsupportedAudioFileException, IOException {
        if (clip == null) {
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(getSource());
            inputStream = AudioSystem.getAudioInputStream(getSource());
        }
        if (!clip.isOpen()) {
            clip.open();
        }
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        clip.start();
    }
    
    public void stop() {
        if (clip == null) {
            return;
        }
        if (!clip.isActive()) {
            return;
        }
        clip.stop();
        clip.setFramePosition(0);
    }
}

实际上,您还可以通过执行以下操作轻松地添加对暂停的支持

代码语言:javascript
运行
复制
public void pause() {
    if (clip == null) {
        return;
    }
    if (!clip.isActive()) {
        return;
    }
    clip.stop();
}

(ps -我没有添加一个封闭的方法,这也会非常有用)

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

https://stackoverflow.com/questions/72427441

复制
相关文章

相似问题

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