2017-11-07 9 views
0

Ich versuche Audio auf Android aufzunehmen. Ich habe verschiedene Beispiele gefunden, aber eine Sache habe ich nicht verstanden.PCM 16bit Aufnahme-Byte vs kurz

Einige Leute schreiben shorts, andere bytes.

Hier ist ein Beispiel für die Konvertierung von short zu bytes.

private byte[] short2byte(short[] sData) { 
     int shortArrsize = sData.length; 
     byte[] bytes = new byte[shortArrsize * 2]; 
     for (int i = 0; i < shortArrsize; i++) { 
      bytes[i * 2] = (byte) (sData[i] & 0x00FF); 
      bytes[(i * 2) + 1] = (byte) (sData[i] >> 8); 
      sData[i] = 0; 
     } 
     return bytes; 

    } 

Was ist der Zweck, das zu tun? Warum nicht shorts direkt in Datei schreiben, soweit wir PCM 16bit verwenden.

Bitte erläutern Sie diese Angelegenheit aus der Audio-Perspektive.

Dank

Antwort

1

In Java können Sie nicht „Shorts direkt schreiben“, da es keine API, die eine kurze Array nimmt und schreibt, dass in einer Datei. Sie können nur Byte-Arrays in eine Binärdatei schreiben. Das Hauptproblem ist Endianess (LSB zuerst oder MSB zuerst): es gibt keinen Standardendian.

Deshalb haben Sie zwei Möglichkeiten:

  • Verwenden Sie ein Little-Endian ShortBuffer, die von einem ByteBuffer gesichert wird, um die kurze Reihe
  • Nur kodieren die Shorts zu codieren, wie sich Bytes, was was ist der Code, den Sie gepostet wird.