2016-11-23 8 views
0

私はwav-soundのバイト配列に参加しようとしています。バックグラウンドノイズを除き動作します。誰もが2バイト配列のサウンドを追加するアルゴリズムを知っています。wav音の2バイト(またはそれ以上)の[]に結合します。バックグラウンドノイズを与えます

これは私がこれまで

for(int i=0;i<bArr1.length;i++) 
{ 
    bArrJoined[i]=bArr1[i] + bArr2[i]; 
} 

を試してみましたが、何も

for(int i=0;i<bArr1.length;i++) 
{ 
    bArrJoined[i]=(bArr1[i] + bArr2[i])/2; 
} 

誰でもノイズなしでこの作業を行う方法を知っている高い数字にはならない2で割るしようとしましたか?

+0

これは興味深いかもしれません。[http://stackoverflow.com/questions/1281353/use-java-ffmpeg-wrapper-or-simply-use-java-runtime-to-execute-ffmpeg] – jay

+0

こんにちは、ありがとうアドバイスはそれが私が探していたものではありませんでした。 –

答えて

0

多くの物がアーティファクトを引き起こす可能性があります。異なるオーディオサンプリングレートまたはデータビットサイズがそれを行うことができる。

これらは問題ではないと仮定して、byteを別のbyteに追加することはできません(オーバーフローなしでは256が0になるなど)。追加する前にintに変換してください。最大音量を超えるとクリッピングが発生するため、2で除算する操作は賢明で、その問題を停止する必要があります。除算演算は、intバージョンで発生する必要があります。最後にbyteにキャストするだけです。

ただし、8ビットオーディオで作業していない場合、byteはアトミック単位ではありません。たとえば、16ビットオーディオでは2バイトが使用されるため、値の算術演算を実行する前に、2つの連続したbytesint(適切なエンディアンに関して)に変換する必要があります。 32ビットのオーディオデータは、単一の数値ごとに4バイト連続して使用されます。バイトの配列を持つだけでは、データ境界がどこにあるかは分かりません。

+0

こんにちは。答えをありがとう。同じ原音のオーディオクリップですので、サンプレートなどは同じで、ビットサイズも8ビットのように1バイトしか試していません。それは問題かもしれない、私は今ではいくつかのアイデアを持っています。私が考えている小さな事は、例えば値が3で次が4 = 7の場合、整数に分けられた7は整数なので、波は正確な波ではありません。非常に小さな変更が、おそらくそれは音質に影響を与えることができますか? –

+0

8ビットオーディオは今日ではまれですので、オーディオのビットサイズがわからない場合は問題ありません(MP3ストリームをデコードした場合、.wavファイルヘッダー情報または.mp3ヘッダーに含まれています) WAVEデータ)。参照する整数除算の切り捨ては、8ビットオーディオでのみ問題になります。それは255の離散的な値段しか持たないので、これで賢明な耳が拾う可能性があります。しかし、16ビットオーディオ以上では、人間の耳は、1つの離散的な値段(16ビットで合計65,535の離散的な段階のうち)の差を知ることはできません。 –

+0

はい。私はビットで間違って使用しました。整数を16ビットの整数にするのではなく、すべてのバイトから整数を加えて8ビットの音のようにしました。ありがとう –

関連する問題