我想在不一致语音频道中录制音频,并使用不一致机器人将其保存到文件中。
我每隔20毫秒接收一次音频作为pcm编码的byte[],我想将其保存到文件中。MP3是最好的,但我对其他文件格式也没有问题,比如ogg (它可能更简单)。
我正在使用JDA版本的4.ALPHA.0_82
,我还包含了其他功能的lavaplayer版本1.3.17
。如果这些库足够了,那将会很有帮助,但是如果我必须包含更多的库,那也没有问题。
发布于 2019-06-10 14:04:32
This question解释了如何将pcm转换为wav。我通过重写AudioReceiveHandler#handleCombinedAudio
方法将不一致的音频复制到List<byte[]>
中
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
)的情况下,转换中止。
https://stackoverflow.com/questions/56003861
复制相似问题