]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
whisper.android : support decode wav file has 2 channels (#972)
authorgeniusnut <redacted>
Wed, 31 May 2023 07:13:14 +0000 (15:13 +0800)
committerGitHub <redacted>
Wed, 31 May 2023 07:13:14 +0000 (10:13 +0300)
examples/whisper.android/app/src/main/java/com/whispercppdemo/media/RiffWaveHelper.kt

index 0947a8c52301b3238d7d66e710515a501ade6fd3..064ef699de1415f77b3cf043fdb1e641dd25c9e3 100644 (file)
@@ -10,12 +10,16 @@ fun decodeWaveFile(file: File): FloatArray {
     file.inputStream().use { it.copyTo(baos) }
     val buffer = ByteBuffer.wrap(baos.toByteArray())
     buffer.order(ByteOrder.LITTLE_ENDIAN)
+    val channel = buffer.getShort(22).toInt()
     buffer.position(44)
     val shortBuffer = buffer.asShortBuffer()
     val shortArray = ShortArray(shortBuffer.limit())
     shortBuffer.get(shortArray)
-    return FloatArray(shortArray.size) { index ->
-        (shortArray[index] / 32767.0f).coerceIn(-1f..1f)
+    return FloatArray(shortArray.size / channel) { index ->
+        when (channel) {
+            1 -> (shortArray[index] / 32767.0f).coerceIn(-1f..1f)
+            else -> ((shortArray[2*index] + shortArray[2*index + 1])/ 32767.0f / 2.0f).coerceIn(-1f..1f)
+        }
     }
 }
 
@@ -73,4 +77,4 @@ private fun headerBytes(totalLength: Int): ByteArray {
         it.get(bytes)
         return bytes
     }
-}
\ No newline at end of file
+}