【问题标题】:White noise mixing 2 audio byte array白噪声混合 2 音频字节数组
【发布时间】:2012-02-16 02:22:07
【问题描述】:

我正在混合 2 个音频字节数组,得到一些白噪声。

for (int i=0;i<bytes1.getB1().length;i++){
        mixBytes[i]=(byte) (bytes1[i]+bytes2[i]);
    }

有人知道如何解决白噪声问题吗?

我正在使用这种方法获取字节,将前 44 个字节作为 wav 标头删除。

private byte[] getISByteArray(InputStream is){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    int length;
    try {
        while ((length = is.read()) != -1) {
            stream.write(length);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    byte[] b=stream.toByteArray();
    byte[] b2=new byte[b.length-44];
    //System.arraycopy(b, 44, b2, 0, b2.length);
    for (int i=0;i<b.length;i++){
        if (i>44) b2[i-44]=b[i];
    }
    return b2;  

}

【问题讨论】:

    标签: java audio byte


    【解决方案1】:

    我可以立即看到两个潜在的问题:

    • 您将输入视为每个样本一个字节的流。真的吗?
    • 你没有对溢出做任何事情,它会占用两个字节的值 100 并以一个负数结束。

    对于后者,这可能有帮助 - 虽然它取决于字节是否真的是线性幅度等,只是取平均值:

    mixBytes[i]=(byte) ((bytes1[i]+bytes2[i]) / 2);
    

    我怀疑这会使它稍微更好,但它仍然不是一个很好的混合功能......

    【讨论】:

    • 如何解决溢出问题?我的意思是,如果成瘾的结果是负面的,那么必须有什么价值?
    • 我用这种方法得到字节...我编辑了原帖
    • @Fischer:我给出的平均代码应该可以修复,你试过了吗?
    • 乔恩,如果我只除以 2 一个字节数组,并且只播放这个数组而不混合,我会得到噪音。
    • 如何测试它们是否是每个样本一个字节?
    【解决方案2】:

    将原始信号与低通Gaussian filter 进行卷积,您将去除白噪声。

    【讨论】:

    • 原始字节没有噪音。是 mix 方法的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2020-04-15
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多