将字节数组转换为 Wav 文件 [重复]

Posted

技术标签:

【中文标题】将字节数组转换为 Wav 文件 [重复]【英文标题】:Converting Byte Array to Wav file [duplicate] 【发布时间】:2010-11-09 12:28:47 【问题描述】:

在对这个主题进行广泛研究后,我已经走到了一堵砖墙。

我要做的就是将一组 .wav 文件一个接一个地添加到一个字节数组中,然后将它们全部输出到一个完整的新创建的 .wav 文件中。我将所有 .wav 数据提取到一个字节数组中,跳过 .wav 标头并直接获取数据,然后将其写入新创建的 .wav 文件时出现如下错误: 错误1:javax.sound.sampled.UnsupportedAudioFileException:无法从输入流中获取音频输入流 Error2:无法从输入流中获取音频输入流

代码是:

    try
    
    String path = "*********";
    String path2 = path + "newFile.wav";

    File filePath = new File(path);
    File NewfilePath = new File(path2);

    String [] folderContent = filePath.list();

    int FileSize =  0;

    for(int i = 0; i < folderContent.length; i++)
        
            RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r");
            FileSize = FileSize + (int)raf.length();

        

    byte[] FileBytes = new byte[FileSize];

    for(int i = 0; i < folderContent.length; i++)
        
            RandomAccessFile raf = new RandomAccessFile(path + folderContent[i], "r");
            raf.skipBytes(44);
            raf.read(FileBytes);
            raf.close();

        

    boolean success = NewfilePath.createNewFile();

    InputStream byteArray = new ByteArrayInputStream(FileBytes);

    AudioInputStream ais = Audiosystem.getAudioInputStream(byteArray);

    AudioSystem.write(ais, Type.WAVE, NewfilePath);

    

【问题讨论】:

声音文件必须是一种格式(例如 22500 KHz、单声道、8 位)。它们还需要是相同的编码(例如 a-law 或 pcm)。 AudioSystem 类提供了在某些类型的流/格式之间进行转换的方法。调查一下。 即使它们都是相同的格式,简单地连接它们也行不通,因为 wav 文件有一个标题......并且连接它们会使标题意外地出现在文件中间。跨度> 他确实说他跳过了标题。 WAV 文件具有特定的格式,该格式在网络上的多个地方都有。一般来说,“破解”并不难,尽管格式有几种变化,有些比其他更棘手。 SMOP。 【参考方案1】:

您的字节数组不包含任何标题信息,这可能意味着 AutoSystem.write 不认为它真的是 WAV 数据。

你能为你的组合数据创建合适的标题吗?

更新:This 问题可能会为您提供答案。

【讨论】:

谢谢理查德,这可能是我能找到的最接近答案的事情。在拆分文件时,我一直对 wav 标头的创建和放置感到困惑。 链接的问题根本不处理字节数组?你还没有回答这个问题,只是告诉他为什么它不起作用(他已经知道了)。为什么这很难找到答案???

以上是关于将字节数组转换为 Wav 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将字节数组转换为 wav 文件 <OOURAFFT>

Python 3:将波形数据(字节数组)转换为浮点值的 numpy 数组

在matlab中将音频文件转换为字节数组

无法将文件路径转换为字节数组android [重复]

如何将字节数组转换为流 [重复]

Java将字节数组转换为十六进制字节数组[重复]