【问题标题】:Converting Byte Array to Wav file [duplicate]将字节数组转换为 Wav 文件 [重复]
【发布时间】: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。

标签: java audio


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢理查德,这可能是我能找到的最接近答案的事情。在拆分文件时,我一直对 wav 标头的创建和放置感到困惑。
  • 链接的问题根本不处理字节数组?你还没有回答这个问题,只是告诉他为什么它不起作用(他已经知道了)。为什么这很难找到答案???
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2012-12-09
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多