【问题标题】:Java - Mixing audio files generates unwanted white noiseJava - 混合音频文件会产生不需要的白噪声
【发布时间】:2011-06-21 14:58:08
【问题描述】:

最近,我一直在尝试将 AudioInputStreams 混合在一起。在阅读了this post,或者更重要的是 Jason Olson 的回答后,我想出了这段代码:

private static AudioInputStream mixAudio(ArrayList audio) throws IOException{
    ArrayList<byte[]> byteArrays = new ArrayList();
    long size = 0;
    int pos = 0;
    for(int i = 0; i < audio.size(); i++){
        AudioInputStream temp = (AudioInputStream) audio.get(i);
        byteArrays.add(convertStream(temp));
        if(size < temp.getFrameLength()){
            size = temp.getFrameLength();
            pos = i;
        }
    }

    byte[] compiledStream = new byte[byteArrays.get(pos).length];
    for(int i = 0; i < compiledStream.length; i++){
        int byteSum = 0;
        for(int j = 0; j < byteArrays.size(); j++){
            try{
                byteSum += byteArrays.get(j)[i];
            }catch(Exception e){
                byteArrays.remove(j);
            }
        }
        compiledStream[i] = (byte) (byteSum / byteArrays.size());
    }

    return new AudioInputStream(new ByteArrayInputStream(compiledStream), ((AudioInputStream)audio.get(pos)).getFormat(), ((AudioInputStream)audio.get(pos)).getFrameLength());
}

private static byte[] convertStream(AudioInputStream stream) throws IOException{
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int numRead;

    while((numRead = stream.read(buffer)) != -1){
        byteStream.write(buffer, 0, numRead);
    }

    return byteStream.toByteArray();
}

此代码非常适合混合音频文件。但是,似乎混合的音频文件越多,返回的 AudioInputStream 中出现的白噪声就越多。在格式化方面,所有被合并的文件都是相同的。如果有人有任何建议\建议,请提前致谢。

【问题讨论】:

  • “如果有人有任何建议\建议,..” 发布SSCCE。要么热链接到一些小声音,要么在代码中生成它们。 “..提前致谢。”不客气。

标签: java audio bytearray mixing noise-reduction


【解决方案1】:

我可能是错的,但我认为你的问题与你搞乱字节而不是字节的含义有关。例如,如果您使用 16 位采样率,则 2 个字节形成对应于幅度的数字,而不仅仅是 1 个字节。所以,你最终会得到一些接近但不完全正确的东西。

【讨论】:

  • 我知道这是一个很长的死帖,但对于任何遇到它的人来说:gvd 是对的,因为我解决了错误的问题。从那时起,我对数字音频有了更多了解,阅读音频模数转换对于其他对此感兴趣的人来说是一个很好的起点。
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多