gpt4 book ai didi

java - Java 中的音频 : Why am I getting `null` ?

转载 作者:行者123 更新时间:2023-12-01 13:39:52 25 4
gpt4 key购买 nike

以下代码运行,但打印 null。最终目标是播放歌曲,并能够通过按取消按钮来停止它。有任何想法吗?谢谢..

这是我的代码:

if (song.equals("Dan + Shay - 19 You + Me")){//if this song is selected...
try{
stopPlay();
AudioInputStream audio = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("C:\\Stuff\\Grade Twelve\\Computer Programming\\Unit 4\\Step 3\\GuitarForBeginners\\src\\guitarforbeginners\\resources\\You+Me.wav"));
clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
} catch(Exception e){
stopPlay();
System.err.println(e.getMessage());
}

最佳答案

我认为问题可能出在您处理音频文件的方式上。由于您有完整的路径,因此您只需输入文件位置即可省去“getClass().getResourceAsStream()”部分。

这种形式的 getAudioInputStream() 的规范位于以下 URL: getAudioInputStream(File file)

我认为 getResource() 和 getResourceAsStream() 更适合加载打包在 jar 文件中的资源,您需要知道并使用 jar 文件的文件位置或 URL。 AFAIK,通过使用 getResource(String name) 和 getResourceAsStream(String name),您会自动在指定字符串“name”前面添加主机对象的文件位置前缀,从而创建一个非常困惑的文件名。这些方法的规范中使用的术语“绝对”是指宿主对象的绝对位置。 getResourceAsStream(String name) 的规范中有一些关于如何构造地址的信息。和 getResource(String name) .

另一个预防措施(感谢安德鲁指出这一点):如果您确实需要使用类文件的地址作为 anchor 或起点,那么对于音频文件来说,使用 getResource(字符串名称)而不是 getResourceAsStream(字符串名称)。后者返回一个InputStream,并且InputStreams 可能会检查标记或重置流的能力。音频文件似乎并不总是具有此功能,因此可能会引发错误。 getResource(String name)返回一个URL,该URL可以作为getAudioInputStream(URL url)的输入参数,绕过InputStream的使用。

关于java - Java 中的音频 : Why am I getting `null` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924352/

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