2017-10-24 4 views
0

データをバイト配列からフロート配列に変換する際に問題があります。特定の操作の後、バイト配列に戻る必要があります。byte []をAudioRecordからfloat []に変換するには?

私のアプリケーションは、オーディオを録音することで、これまで問題はありません。今度はフィルタを追加したいと思います。 Javaへのstackoverflowの変換に

https://cardinalpeak.com/blog/a-c-class-to-implement-low-pass-high-pass-and-band-pass-filters/

とここに:私はすべての人に、このクラスが利用できたフィルタについて

Implementing a High Pass filter to an audio signal

私はフィルタがfloat値をしたい知っています。私は、私が知っていたメソッドを使用しても、stackoverflowで、バイトから浮動小数点への変換、および浮動小数点からバイトには、何も働いた。これらのメソッドは、私が知っている:

ByteArrayInputStream bufferIN = new ByteArrayInputStream(audioArray); 
DataInputStream dataIN = new DataInputStream(bufferIN); 
float[] floatAudio = new float[audioArray.length/4]; 
for (int i = 0; i < floatAudio.length; i++) { 
    floatAudio[i] = dataIN.readFloat(); 
} 


ByteArrayOutputStream bufferOUT = new ByteArrayOutputStream(); 
DataOutputStream dataOUT = new DataOutputStream(bufferOUT); 
for (float i : floatAudio) 
    dataOUT.writeFloat(i); 
audioArray = bufferOUT.toByteArray(); 

検索私はaudiorecordのの1からのバイトのために、彼らはPCMデータであるため、二重の操作を行う必要があり、この議論を見つけます。

How to convert 16-bit PCM audio byte-array to double or float array?

私はそれをしなかったが、問題は、私はバイトにフロートからの変換は、オーディオでは、通常の方法で問題を与えるために継続する方法がわからないです。テストのために、私は浮動小数点へのバイト変換を行い、浮動小数点数の直後はオーディオを歪ませたので、フィルタークラスの問題ではないと思います。だから何をすべきか? AudioRecordフィールドのバイトを処理できるようにするための正しい変換は何でしょうか?

私は登録が行われている私のコードの一部を残しています(私は宣言を削除します、古典的なものです)。

byte audioArray[] = new byte[dimBufferAR]; 

FileOutputStream audioOUT = null; 

try { 
    audioOUT = new FileOutputStream(pathFile); 

    while (REC) { 

     AR.read(audioArray, 0, dimBufferAR); 

     // Conversion should take place here 

     audioOUT.write(audioArray, 0, dimBufferAR); 
    } 

    audioOUT.close(); 

} 

ご協力いただきありがとうございます。

答えて

0

試行:.readFloat()ごとに次の4バイトにジャンプしてください。

float[] floatAudio = new float[audioArray.length/4]; 
for (int i = 0; i < floatAudio.length; i=i) 
{ 
    floatAudio[i] = dataIN.readFloat(); 
    i += 4; 
} 
+0

こんにちは、お返事ありがとうございます。私はあなたの考えを実装しましたが、残念ながらうまくいきませんでした。フィルターの有無にかかわらず。結果はすごい音です。質問があります。 float []からbyte []に​​、私は質問のポストで示したコードを実装しました。私は別のものを試す必要がありましたか、それとも大丈夫でしたか?ありがとうございました。 – Fantastico

関連する問題