gpt4 book ai didi

java - 将音乐淡入新轨道?

转载 作者:行者123 更新时间:2023-12-02 07:41:17 27 4
gpt4 key购买 nike

我已经开始用 Java 制作一个基本游戏,只是为了做点什么。

一切都很顺利,我已经加载了 map ,绘图工作正常等。

我让它播放 map 音乐和碰撞等声音效果。

但是我觉得 map A(我要离开的那个)的音乐应该淡入 map B(我要进入的 map )的音乐中,这可能吗?

我用来播放音乐的代码如下:

    try
{
if(clip != null)
{
clip.stop();
clip.close();
}

clip = AudioSystem.getClip();

URL a = this.getClass().getResource("/resource/sound/"+Filename + ".mid");

ais = AudioSystem.getAudioInputStream(a);

clip.open(ais);
clip.loop(999);
clip.start();
}
catch(Exception e)
{

}

正如您很可能看到的那样,我的 Java 能力不是很好,但到目前为止我的游戏进展顺利,而我却不是,而且我拒绝使用“引擎”,因为我想要完全控制。

有什么想法吗?

谢谢

编辑:

感谢您的所有回答,我已经修改了您给我的代码,但它不起作用=/

我现在编写了下面的代码,该代码在新线程(因此是可运行线程)上运行,因此音乐在播放时会消失。

代码如下:

private Boolean _SwapMusic = false;
private String _Filename;
Thread soundThread;

Runnable r1 = new Runnable() {
public void run() {
while(true)
{
if(_SwapMusic)
{
_SwapMusic = false;
try
{
//Try to lower volume
for (int i = 0; i < 80; i ++) {
FloatControl gainControlA = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControlA.setValue(i * -1f);
Thread.sleep(10);
}
}
catch(Exception e){ System.out.print("Lower volume error: " + e + " ");}


try{
clip.stop();
clip.close();
}
catch (Exception e) { System.out.print("clip.stop/close error: " + e + " ");}
try
{
clip = AudioSystem.getClip();

URL a = this.getClass().getResource("/resource/sound/"+ _Filename + ".mid");

ais = AudioSystem.getAudioInputStream(a);

clip.open(ais);

FloatControl gainControlB = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControlB.setValue(-80f);

clip.loop(999);
clip.start();
}
catch(Exception e){ System.out.print("Play error: " + e + " ");}


try
{
//Try to higher volume
for (int i = -80; i < 0; i ++) {
FloatControl gainControlC = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControlC.setValue(i);
Thread.sleep(3);
}
}
catch(Exception e){
System.out.print("Higher volume error: " + e + " ");
}
}
}
}
};

只是为了清楚地表明我正在尝试使 MAP A 中的音乐在 MAP B 的音乐开始之前完全消失。

感谢迄今为止的所有帮助。

最佳答案

您可以使用 MASTER_GAIN 控件降低第一个剪辑的声音,同时提高第二个剪辑的声音,您可能需要调整 dB 和计时,但这应该可行:

Clip clipA = AudioSystem.getClip();
Clip clipB = AudioSystem.getClip();
clipA.open(aisA);
clipB.open(aisB);

for (int i = 0; i < 100; i ++) {
FloatControl gainControlA = (FloatControl) clipA.getControl(FloatControl.Type.MASTER_GAIN);
gainControlA.setValue(i * -1f);
FloatControl gainControlB = (FloatControl) clipB.getControl(FloatControl.Type.MASTER_GAIN);
gainControlB.setValue(-100f + i);

Thread.sleep(100);
}

关于java - 将音乐淡入新轨道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11545933/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com