Java PCM音频文件
我想在Discord语音频道中录制音频,并使用Discord机器人将其保存到文件中 我每20毫秒接收一次音频,作为pcm编码的字节[],我想将其保存到文件中。 MP3是首选,但我对其他文件格式没有问题,比如ogg(可能更容易) 我使用的是JDA版本Java PCM音频文件,java,discord,pcm,discord-jda,Java,Discord,Pcm,Discord Jda,我想在Discord语音频道中录制音频,并使用Discord机器人将其保存到文件中 我每20毫秒接收一次音频,作为pcm编码的字节[],我想将其保存到文件中。 MP3是首选,但我对其他文件格式没有问题,比如ogg(可能更容易) 我使用的是JDA版本4.ALPHA.082,我还包括了lavaplayer版本1.3.17,用于其他功能。如果这些库很好的话,这将是很有帮助的,但是如果我必须包含更多的库,那也没问题。解释了如何将pcm转换为wav。 我通过覆盖方法AudioReceiveHandler#
4.ALPHA.082
,我还包括了lavaplayer版本1.3.17
,用于其他功能。如果这些库很好的话,这将是很有帮助的,但是如果我必须包含更多的库,那也没问题。解释了如何将pcm转换为wav。
我通过覆盖方法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
}
}
如果撤销的音频太大(OutOfMemoryError
),转换将中止。我将PCM转储到一个文件中,并通过discord将其发送回以听到它。诚然,这些文件是海量的,但它是有效的:^)还请注意,JDA提供的是PCM数据,而不是opus(除非它们在v4中更改了某些内容)。我也想到了同样的方法,难道没有一种简单的方法可以将其保存为压缩音频格式吗?有一次,我被告知要通过ffmpeg传输它。我假设您想要一个跨平台/自包含的解决方案,但您忘记了增量I。为什么不使用由提供的格式?
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);
}