【问题标题】:UnsupportedAudioFileException from stereo but not two-channel audio来自立体声但不是双声道音频的 UnsupportedAudioFileException
【发布时间】:2019-05-31 08:55:41
【问题描述】:

我正在使用AudioInputStream 在 Java 中进行一些基本的音频处理。我的程序可以正确加载用两条轨道编码的 16 位整数 PCM 音频,但不能用立体声编码。当呈现一个文件时(根据 ffprobe)是

Input #0, wav, from XXX:
  Duration: 00:00:02.80, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

一切都很好。但是,当出现

  Duration: 01:19:15.58, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s

(这是我真正想要编辑的文件),它失败了

Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)

编码相同,采样率差异似乎不太可能导致问题。似乎是立体声与 2 个通道导致了此异常,但立体声应该是两个通道,不是吗?

我可以用

复制这个问题
AudioSystem.getAudioInputStream(new File("file under test"));

【问题讨论】:

    标签: java audio


    【解决方案1】:

    您可以手动构建对应的AudioFormat,并与isFormatSupported(AudioFormat)进行检查

    对 44100 的支持在 Java 中是标准的,但 48000 更容易受到影响,并且取决于运行代码的计算机的操作系统。见6.3 Audio Formats

    如果您不想麻烦编码的复杂性,Audacity 可以很好地作为转换音频资源的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 2015-12-27
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多