Java将音频从44.1 kHz转换为48 kHz



我目前在将音频输入流从MPEG1L3、44.1 kHz、每个样本具有未知比特、未知帧大小和未知帧速率的立体声转换为48KHz 16比特立体声签名BigEndian PCM时遇到了一些问题。

我已经尝试过使用进行转换

AudioSystem.getAudioInputStream(new AudioFormat(Encoding.PCM_SIGNED, 48000, 16, 2, 4, 48000, true), in);

但它总是给我这个错误:

java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian from MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, unknown frame rate,
at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:894)
at me.joastuart.bot.audio.GetStreamTP.lambda$0(GetStreamTP.java:23)
at java.base/java.lang.Thread.run(Thread.java:829)

遗憾的是,我无法更改决赛,也无法更改输入音频格式。

我希望你能帮我解决这个问题!

~ JoaStuart

AFAIK,Java不支持帧速率大于44100fps的格式。最新的版本改变了吗?

可以使用AudioInputStream提取PCM,并将PCM转换为更高的速率。该过程类似于以稍快的速度回放文件,利用线性插值来获得位于"0"的数据值;介于";现有PCM帧。从那里,可以按正确的顺序将PCM转换为字节(还有其他关于将PCM转换成字节的堆栈流帖子(。

但我不知道如何将字节数组保存为可播放的wav,其中wav标头指示48000帧速率。我只保存了Java支持的格式的wav,并且不必处理wav头,因为它通常由AudioSystem.write方法处理。

最新更新