java - 使用音频流播放自定义音频格式

标签 java audio format

所以我开始开发视频游戏,我想创建一种自定义声音格式。

Path file = Paths.get("C:", "Users", "Mariobro85", "Desktop", "test.wav");

public void playFile() throws InterruptedException{
    try{
        File f = new File(file.toString());
        URL url = f.toURI().toURL();

        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);

        Clip clip = AudioSystem.getClip();
        clip.open(audioInputStream);

        clip.start();

        Thread.sleep(15000);
    }
    catch(UnsupportedAudioFileException uafE){
        System.out.println("ERROR: Audio data of the file " + file + " is not in wave format.");
    }
    catch(IOException ioE){
        System.out.println("ERROR: Audio data of the file " + file + " is corrupted.");
    }
    catch(LineUnavailableException luE){
        System.out.println(luE);
    }
}

但这只能播放标准的 .wav 文件。 我也使用自定义格式的 wav ,但问题是我的文件中的音频数据从 0x60 而不是 0x0 开始,并且还存储了循环、音量等信息。因此,它总是抛出 UnsupportedAudioFileException。

有没有办法告诉 AudioStream 跳转到特定地址,或者标准 java 库不可能做到这一点?

最佳答案

如果你想在默认音频解析器解析之前编辑音频数据,可以按如下方式编辑

  File file=new File("path/to/file");
    byte[] bytes= Files.readAllBytes(file.toPath());
    //edit or trim bytes as you wish.
    ByteArrayInputStream inputStream=new ByteArrayInputStream(bytes);//you can even give an offset in this constructor
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputStream);

    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);

    clip.start();
    Thread.sleep(xAmount);

如果您的格式确实是自定义的,我建议您仅遵循这些标准化方法之一,并简单地将页眉或页脚添加到字节数组中。不需要重新制作已经完成的事情。或者,为了让事情变得更简单,您可以添加一个您也加载的单独文件,其中包含您希望与音频一起加载的不同数据。

关于java - 使用音频流播放自定义音频格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51354439/

相关文章:

java - 将 JTextField 布局为可包装 JLabel - 不受欢迎的行为

audio - FFMPEG - 如何将 10 channel WAV 分离为每个 channel 的文件? (不是 5.1)

c - 格式化字符串漏洞 - printf

javascript - 美化vscode插件,如何去除;从行尾?

java - 音频播放不正常

php - 将 PHP Accept-Language 转换为更易读的格式

java - android :onClick use Java reflection concepts behind the scenes?吗

java - 将消息从服​​务器发送到 Android 应用程序

java - XmlElement 注解可以有多种类型吗?

macos - 我无法连接 Mac OS X 的数模转换器 (USB)