【发布时间】:2021-11-26 05:21:06
【问题描述】:
我在 android 中使用实时录制对音频文件进行分类。但我想分类从android内部或外部存储中获取音频文件。这是如何工作的?请帮帮我。
我的 mainActivity 代码如下,即-> MainActivity.kt
package com.example.mysoundclassification
import android.Manifest
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import org.tensorflow.lite.task.audio.classifier.AudioClassifier
import java.util.*
import kotlin.concurrent.scheduleAtFixedRate
class MainActivity : AppCompatActivity() {
var probabilityThreshold: Float = 0.3f
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val showResult = findViewById<TextView>(R.id.output)
//Permission For Record
val REQUEST_RECORD_AUDIO = 1337
requestPermissions(arrayOf(Manifest.permission.RECORD_AUDIO), REQUEST_RECORD_AUDIO)
//Load TFLite model
val audioClassifier = AudioClassifier.createFromFile(this, "my_birds_model.tflite")
//Real Time Audio Record
val audioRecord = audioClassifier.createAudioRecord()
audioRecord.startRecording()
//Use Thread
Timer().scheduleAtFixedRate(1, 1000) {
//Classify Sound
val tensorAudio= audioClassifier.createInputTensorAudio()
tensorAudio.load(audioRecord)/** Here,Pass live Record audio data.But,
** I want pass here my audio file.
** How do this work??
** Please help me.
*/
//Result
val output = audioClassifier.classify(tensorAudio)
//*** Start Specifying output....
// Check if it's a bird sound.
var filteredModelOutput = output[0].categories.filter {
it.label.contains("Bird") && it.score > probabilityThreshold
}
// given there's a bird sound, which one is it?
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
val outputStr = filteredModelOutput.sortedBy { -it.score }
.joinToString(separator = "\n") { "${it.label} -> ${it.score} " }
if (outputStr.isNotEmpty())
runOnUiThread {
showResult.text = outputStr
}
Log.i("output", ""+output[0])
//*** End Specifying output
}//End thread
}//End onCreate method
}//End MainActivity
现在下一个代码是xml文件-> activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/output"
android:layout_width="299dp"
android:layout_height="105dp"
android:gravity="center"
android:lines="5"
android:text="Play your audio!"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.424" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recording"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toTopOf="@+id/output"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.194" />
</androidx.constraintlayout.widget.ConstraintLayout>
这项工作需要许可是录音-> 权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
谢谢..请帮忙,这个问题的解决对我来说很重要!!!
【问题讨论】:
标签: android tensorflow kotlin audio classification