You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
1.9 KiB

package com.frank.androidmedia.util
import android.util.Log
import java.io.*
/**
* Convert pcm to wav
*
* @author frank
* @date 2022/3/22
*/
object WavUtil {
fun makePCMToWAVFile(pcmPath: String?, wavPath: String?, deletePcmFile: Boolean): Boolean {
val buffer: ByteArray
val file = File(pcmPath)
if (!file.exists()) {
return false
}
val len = file.length().toInt()
val header = WavHeader()
header.riffSize = len + (44 - 8)
header.formatSize = 16
header.bitsPerSample = 16
header.numChannels = 2
header.formatTag = 0x0001
header.sampleRate = 44100
header.blockAlign = (header.numChannels * header.bitsPerSample / 8).toShort()
header.avgBytesPerSec = header.blockAlign * header.sampleRate
header.dataSize = len
val h: ByteArray = try {
header.header
} catch (e1: IOException) {
Log.e("WavUtil", e1.message)
return false
}
if (h.size != 44) return false
val dstFile = File(wavPath)
if (dstFile.exists()) dstFile.delete()
try {
buffer = ByteArray(1024 * 4)
val inStream: InputStream
val ouStream: OutputStream
ouStream = BufferedOutputStream(FileOutputStream(wavPath))
ouStream.write(h, 0, h.size)
inStream = BufferedInputStream(FileInputStream(file))
var size = inStream.read(buffer)
while (size != -1) {
ouStream.write(buffer)
size = inStream.read(buffer)
}
inStream.close()
ouStream.close()
} catch (e: IOException) {
Log.e("WavUtil", e.message)
return false
}
if (deletePcmFile) {
file.delete()
}
Log.i("WavUtil", "makePCMToWAVFile success...")
return true
}
}