MusicUtils源码:
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Matrix
import android.media.MediaMetadataRetriever
import android.media.MediaPlayer
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.graphics.painter.Painter
import com.frstudio.hmp3.App
import com.frstudio.hmp3.R
import com.frstudio.hmp3.utils.KMath
object MusicUtils {
fun getDurationText(duration: Long):String{
return KMath.timeStr(duration)
}
fun getDuration(path:String):Long{
val mediaPlayer = MediaPlayer()
mediaPlayer.setDataSource(path)
mediaPlayer.prepare()
val duration = mediaPlayer.duration
mediaPlayer.release()
return duration+0L
}
fun getAlbumPicture(dataPath: String):Painter{
return BitmapPainter(aGetAlbumPicture(dataPath).asImageBitmap())
}
private fun aGetAlbumPicture(dataPath: String): Bitmap {
val mmr = MediaMetadataRetriever()
mmr.setDataSource(dataPath)
val data = mmr.embeddedPicture
var albumPicture: Bitmap? = null
return if (data != null) {
albumPicture = BitmapFactory.decodeByteArray(data, 0, data.size)
val width = albumPicture.width
val height = albumPicture.height
val matrix = Matrix()
val sx = 120f / width
val sy = 120f / height
matrix.postScale(sx, sy)
albumPicture = Bitmap.createBitmap(albumPicture, 0, 0, width, height, matrix, false)
albumPicture
} else {
albumPicture = BitmapFactory.decodeResource(App.app.resources, R.drawable.ic_music_foreground)
val width = albumPicture.width
val height = albumPicture.height
val matrix = Matrix()
val sx = 120f / width
val sy = 120f / height
matrix.postScale(sx, sy)
albumPicture = Bitmap.createBitmap(albumPicture, 0, 0, width, height, matrix, false)
albumPicture
}
}
}
KMath源码:
object KMath {
fun storageStr(length:Long):String{
var rest = 0;
var size = length
if(size < 1024){
return "$size B";
}else{
size /= 1024;
}
if(size < 1024){
return "$size KB";
}else{
rest = (size % 1024).toInt();
size /= 1024;
}
if(size < 1024){
size *= 100;
return "${size / 100}.${rest * 100 / 1024 % 100}MB";
}else{
size = size * 100 / 1024;
return "${size / 100}.${size % 100}GB";
}
}
fun timeStr(xtime: Long): String {
var time = xtime
time /= 1000
var timeStr =""+ (if (time / 60 < 10) "0" + time / 60 else time / 60) + ""
timeStr += ":" + (if (time % 60 < 10) "0" + time % 60 else time % 60) + ""
return timeStr
}
}