我目前有一点麻烦从AudioInputStream从MPEG1L3,44.1 kHz,立体声每个样本未知位,未知帧大小和未知帧速率到48 kHz 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)遗憾的是,我不能更改最终或输入的AudioFormat。
我希望你能帮我解决这个问题!
~JoaStuart
发布于 2022-07-25 22:24:42
AFAIK,Java不支持帧速率大于44100 fps的格式。随着最新版本的出现,情况发生了变化吗?
可以使用AudioInputStream提取PCM,并将PCM转换为更高的速率。这个过程类似于以稍快的速度回放一个文件,利用线性插值来获得“位于”现有PCM帧之间的数据值。在那里,可以按照正确的顺序将PCM转换为字节(在将PCM转换为字节时还有其他堆栈溢出帖子)。
但我不知道如何将字节数组保存为可播放的wav,其中wav头指示48000帧速率。我只以Java支持的格式保存了wav,并且不必处理wav头,因为这通常是由AudioSystem.write方法处理的。
https://stackoverflow.com/questions/73101122
复制相似问题