gpt4 book ai didi

java - PCM 音频到文件

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:54 27 4
gpt4 key购买 nike

我想在 Discord 语音 channel 中录制音频并使用 Discord 机器人将其保存到文件中。

我每 20 毫秒接收一次音频作为 pcm 编码的字节 [],我想将其保存到文件中。MP3 是首选,但我对其他文件格式(如 ogg)也没有问题(它可能更容易)。

我使用的是 JDA 版本 4.ALPHA.0_82,并且我还包含了 lavaplayer 版本 1.3.17 的其他功能。如果这些库足够的话,那将会很有帮助,但如果我必须包含更多库,也没有问题。

最佳答案

This question解释如何将 pcm 转换为 wav。我将 Discord 音频复制到 List<byte[]>通过重写方法 AudioReceiveHandler#handleCombinedAudio :

private List<byte[]> rescievedBytes=new ArrayList<>();
@Override
public void handleCombinedAudio(CombinedAudio combinedAudio) {
try {
rescievedBytes.add(combinedAudio.getAudioData(VOLUME));
}catch (OutOfMemoryError e) {
//close connection
}
}

之后,我复制了 List进入byte[]并创建了wav文件。

try {
int size=0;
for (byte[] bs : rescievedBytes) {
size+=bs.length;
}
byte[] decodedData=new byte[size];
int i=0;
for (byte[] bs : rescievedBytes) {
for (int j = 0; j < bs.length; j++) {
decodedData[i++]=bs[j];
}
}
getWavFile(getNextFile(), decodedData);
} catch (IOException|OutOfMemoryError e) {
e.printStackTrace();
}

private void getWavFile(File outFile, byte[] decodedData) throws IOException {
AudioFormat format = new AudioFormat(8000, 16, 1, true, false);
AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(
decodedData), format, decodedData.length), AudioFileFormat.Type.WAVE, outFile);
}

如果接收到的音频太大 ( OutOfMemoryError ),转换将中止。

关于java - PCM 音频到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003861/

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