当前位置: 首页 > 知识库问答 >
问题:

PCM音频文件

萧嘉茂
2023-03-14

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

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

我正在使用JDA版本4。阿尔法0_82我还包括lavaplayer版本1.3。17用于其他功能。如果这些库是一个很好的库,这将是很有帮助的,但是如果我必须包含更多的库,这是没有问题的。

共有1个答案

司空炯
2023-03-14

此问题说明如何将pcm转换为wav。我将不和谐音频复制到列表中

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

之后,我将列表复制到字节[]中,并创建了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),则会中止转换。

 类似资料:
  • 我有一个传递客户端PCM或ADPCM数据的服务器。 我最初决定使用PCM是因为我不想处理编码和解码。 我让PCM工作,但在每一个音频块之间,我听到毛刺。(有点像剪辑) 所以我想原因可能是延迟/高质量的音频和所有这些东西。 所以我决定使用ADPCM来减少数据量。我用JavaScript编写了一个adpcm到pcm解码器。这是个麻烦。我希望,由于数据计数减少了,也许这会阻止小故障(数据将赶上正在播放的

  • 据我所知,html5中没有可用的音频流。即使有音频标签。 也就是说,您必须始终提供一个文件,而不是传递某种音频流。 所以,我们知道最常用的格式是ogg和mp3(不是免费的)。也可以使用wav,但由于其尺寸不常用。 我的问题是,我可以把一个文件假装成一个流,比如说创建wav文件(带有riff头)并指定PCM格式细节(频率、频道、等等),然后将其作为前几个字节传递,然后通过线路发送PCM流(实际上是音

  • 我正在通过电线接收一个交错的16位PCM样本。每个样本都有签名 我把它读作Int16bit数组,让我们调用这个all_data。因此每个数组条目都是一个16位的样本。 因为它是交错的,所以我将它提取成2个通道,R-L-R-L,最后得到2个(16位)数组,大小是ALL_DATA数组的一半。 之后,我查看每个示例,并将其规范化为Float32Array,因为这是web audio API所使用的。 v

  • 本文向大家介绍使用WindowsAPI实现播放PCM音频的方法,包括了使用WindowsAPI实现播放PCM音频的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了使用WindowsAPI实现播放PCM音频的方法,同前面一篇使用WindowsAPI获取录音音频的方法原理具有相似之处,这里就不再详细介绍具体的函数与结构体的参数,相同的部分加以省略,只介绍主要的功能部分代码。如下所示: 1. w

  • 有没有办法截取或只是-读取音频输出在android设备?

  • 如果一些文件是带音频的视频,而一些文件只是音频,是否可以连接多个文件。最终结果应该如下所示: 我认为这一定是可能的,因为我也可以结合一个大的音频文件和一个小的视频与FFMPEG。结果将是一个视频文件,其中最后一帧只是冻结,但音频仍然播放。我想实现相同的结果,要么冻结最后一帧或简单的黑色帧。这可能吗?