2012-02-15 7 views
0

2つのオーディオバイト配列を混合して、ホワイトノイズを混合しています。白色雑音混合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; 

}

答えて

2

私はすぐに二つの潜在的な問題を見ることができます:

  • 彼らは1バイトあたりのサンプルストリームであるかのようにあなたが入力を処理しています。彼らは本当にですか?
  • オーバーフローについて何もしていません。これは、値100の2バイトを取り、たとえば負の数で終わります。後者は、このかもしれないヘルプについて

- それはバイトだけで平均とることで、など本当にリニア振幅であるかどうかにも依存するが:

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

を、私はそれが少しようになりますことを疑いますしかし、それはまだ素晴らしいミキシング機能ではありません...

+0

どのようにしてオーバーフローの問題を解決できますか?中毒の結果が否定的であれば、どのような価値があるはずですか? – Fischer

+0

私はこのメソッドでバイトを取得しています...元の投稿を編集しました – Fischer

+0

@Fischer:私が与えた平均コードは、あなたが試したことを修正する必要がありますか? –

0

コンボルブローパスGaussian filterであなたの元の信号と、あなたはホワイトノイズを除去します。

+0

元のバイトはノイズを持っていません。それはミックス方法の問題です。 – Fischer