Я пытаюсь получить визуализацию Waveform для звука на моем локальном устройстве и пытаюсь использовать пакет Visualizer (import android.media.audiofx.Visualizer) , но он постоянно вылетает, выдавая следующие журналы:
E/AudioEffect: set(): AudioFlinger could not create effect e46b26a0-dddd-11db-8afd-0002a5d5c51b / NULL, status: -1
E/visualizers-JNI: Visualizer initCheck failed -3
E/Visualizer-JAVA: Error code -3 when initializing Visualizer.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.musicit.player, PID: 7181
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:473)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Caused by: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -3
at android.media.audiofx.Visualizer.(Visualizer.java:238)
at com.musicit.player.playerVisualizer.setAudioSessionId(playerVisualizer.kt:49)
at com.musicit.player.MainActivity.playSong(MainActivity.kt:89)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Я сделал это очень просто, просто чтобы посмотреть, как это работает:
У меня есть это:
class MainActivity : AppCompatActivity() {
fun onPlayClick(view: View) {
var song = '/path/that/definitelyexists.mp3';
playMusic(song);
}
fun playMusic(song: String){
val mediaPlayerInstance = MediaPlayer();
mediaPlayerInstance.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
);
mediaPlayerInstance.setDataSource(audioPath);
mediaPlayerInstance.prepare();
mediaPlayerInstance.start();
val visualiz = findViewById(R.id.musicitviz);
visualiz.setAudioSessionId(mediaPlayerInstance.audioSessionId);
}
}
class Visualizer(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
private var paint = Paint();
private var visualizer: Visualizer? = null;
private var waveformByteArray: ByteArray? = null;
init {
paint.color = Color.rgb(244, 40, 30);
}
override fun draw(canvas: Canvas?) {
super.draw(canvas);
waveformByteArray?.let { waveformByteArray ->
if(waveformByteArray.isEmpty()) {
Log.d(": ", "waveformbytearray is null.");
return;
}else{
Log.d(": ", "waveformbytearray is not null.");
}
}
}
fun setAudioSessionId(audioSessionId: Int) {
if(visualizer != null){
visualizer?.release();
}
val newVisualizer = Visualizer(audioSessionId);
newVisualizer.enabled = true;
newVisualizer.captureSize = Visualizer.getCaptureSizeRange()[1];
newVisualizer.setDataCaptureListener(object: Visualizer.OnDataCaptureListener {
override fun onWaveFormDataCapture(
visualizer: Visualizer?,
waveform: ByteArray?,
samplingRate: Int
) {
waveformByteArray = waveform;
Log.d("TAG: ", "I am updating the waveform")
invalidate();
}
override fun onFftDataCapture(
visualizer: Visualizer?,
fft: ByteArray?,
samplingRate: Int
) {
}
}, Visualizer.getMaxCaptureRate() / 2, true, false);
newVisualizer.enabled = true;
visualizer = newVisualizer;
}
}
Я пробовал добавить разрешение:
перезапускаю устройство, а также обновляю уровень API до >=29:
android {
compileSdk 33
defaultConfig {
applicationId "com.musicit.music"
minSdk 29
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
namespace 'com.musicit.music'
}
как было предложено в сообщениях с похожей проблемой, но на самом деле ничего не работает, интересно, как я могу решить эту проблему.
РЕДАКТИРОВАТЬ: Я также попробовал включить подготовить прослушиватель, но безрезультатно, сообщение об ошибке все то же, с кодом ошибки -3:
val mediaPlayerInstance = MediaPlayer();
mediaPlayerInstance.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
);
mediaPlayerInstance.setDataSource(audioPath);
mediaPlayerInstance.setOnPreparedListener(object: MediaPlayer.OnPreparedListener {
override fun onPrepared(mp: MediaPlayer?) {
if(mp == null) {
return;
}
val visualiz = findViewById(R.id.musicitviz);
visualiz.setAudioSessionId(mp.audioSessionId);
visualiz.enableVisualization();
mp.start();
}
});
mediaPlayerInstance.prepare();
Подробнее здесь: https://stackoverflow.com/questions/757 ... in-android
Использование аудиовизуализатора в Android ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1735627803
Anonymous
Я пытаюсь получить визуализацию Waveform для звука на моем локальном устройстве и пытаюсь использовать пакет Visualizer (import android.media.audiofx.Visualizer) , но он постоянно вылетает, выдавая следующие журналы:
E/AudioEffect: set(): AudioFlinger could not create effect e46b26a0-dddd-11db-8afd-0002a5d5c51b / NULL, status: -1
E/visualizers-JNI: Visualizer initCheck failed -3
E/Visualizer-JAVA: Error code -3 when initializing Visualizer.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.musicit.player, PID: 7181
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:473)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Caused by: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -3
at android.media.audiofx.Visualizer.(Visualizer.java:238)
at com.musicit.player.playerVisualizer.setAudioSessionId(playerVisualizer.kt:49)
at com.musicit.player.MainActivity.playSong(MainActivity.kt:89)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:468)
at android.view.View.performClick(View.java:7750)
at android.view.View.performClickInternal(View.java:7727)
at android.view.View.access$3700(View.java:858)
at android.view.View$PerformClick.run(View.java:29115)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8168)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037)
Я сделал это очень просто, просто чтобы посмотреть, как это работает:
У меня есть это:
class MainActivity : AppCompatActivity() {
fun onPlayClick(view: View) {
var song = '/path/that/definitelyexists.mp3';
playMusic(song);
}
fun playMusic(song: String){
val mediaPlayerInstance = MediaPlayer();
mediaPlayerInstance.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
);
mediaPlayerInstance.setDataSource(audioPath);
mediaPlayerInstance.prepare();
mediaPlayerInstance.start();
val visualiz = findViewById(R.id.musicitviz);
visualiz.setAudioSessionId(mediaPlayerInstance.audioSessionId);
}
}
class Visualizer(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
private var paint = Paint();
private var visualizer: Visualizer? = null;
private var waveformByteArray: ByteArray? = null;
init {
paint.color = Color.rgb(244, 40, 30);
}
override fun draw(canvas: Canvas?) {
super.draw(canvas);
waveformByteArray?.let { waveformByteArray ->
if(waveformByteArray.isEmpty()) {
Log.d(": ", "waveformbytearray is null.");
return;
}else{
Log.d(": ", "waveformbytearray is not null.");
}
}
}
fun setAudioSessionId(audioSessionId: Int) {
if(visualizer != null){
visualizer?.release();
}
val newVisualizer = Visualizer(audioSessionId);
newVisualizer.enabled = true;
newVisualizer.captureSize = Visualizer.getCaptureSizeRange()[1];
newVisualizer.setDataCaptureListener(object: Visualizer.OnDataCaptureListener {
override fun onWaveFormDataCapture(
visualizer: Visualizer?,
waveform: ByteArray?,
samplingRate: Int
) {
waveformByteArray = waveform;
Log.d("TAG: ", "I am updating the waveform")
invalidate();
}
override fun onFftDataCapture(
visualizer: Visualizer?,
fft: ByteArray?,
samplingRate: Int
) {
}
}, Visualizer.getMaxCaptureRate() / 2, true, false);
newVisualizer.enabled = true;
visualizer = newVisualizer;
}
}
Я пробовал добавить разрешение:
перезапускаю устройство, а также обновляю уровень API до >=29:
android {
compileSdk 33
defaultConfig {
applicationId "com.musicit.music"
minSdk 29
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
namespace 'com.musicit.music'
}
как было предложено в сообщениях с похожей проблемой, но на самом деле ничего не работает, интересно, как я могу решить эту проблему.
РЕДАКТИРОВАТЬ: Я также попробовал включить подготовить прослушиватель, но безрезультатно, сообщение об ошибке все то же, с кодом ошибки -3:
val mediaPlayerInstance = MediaPlayer();
mediaPlayerInstance.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
);
mediaPlayerInstance.setDataSource(audioPath);
mediaPlayerInstance.setOnPreparedListener(object: MediaPlayer.OnPreparedListener {
override fun onPrepared(mp: MediaPlayer?) {
if(mp == null) {
return;
}
val visualiz = findViewById(R.id.musicitviz);
visualiz.setAudioSessionId(mp.audioSessionId);
visualiz.enableVisualization();
mp.start();
}
});
mediaPlayerInstance.prepare();
Подробнее здесь: [url]https://stackoverflow.com/questions/75704428/using-audio-visualizer-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия