Animieren Sie die Fortschrittsanzeige, indem Sie die Amplitude von mediaPlayer abrufen

Hi, ich habe einiges gelesenPost mit der gleichen Frage, aber ich kann die genaue nicht finden oder ich muss die Antwort sagen, nach der ich gesucht habe. Nun, ich möchte nur wissen, wie ich den Wiedergabepegel der im Mediaplayer eingestellten Audiodatei ermitteln kann. Ich habe das schon ausprobiertint volume_level = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); aber von was ich sehe. Ich bekomme nur die aktuell eingestellte Lautstärke auf meinem Gerät. Nun, ich möchte eine Animation hinzufügen, die mit dem Pegel meines wiedergegebenen Audios folgt. Hier ist mein Code:

vor dem Aufruf der Audiomethode spielen:

audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

die Wiedergabemethode:

public void playAudio(String record_path) throws IOException{
        if(audioPlayer!=null && mpStatus == State.Paused){
            /*play from paused state*/
            audioPlayer.start();
            mpStatus = State.Playing;
        }
        else
        {
            /*play from start of recording*/
            setMediaPlayer(record_path);
            audioPlayer.start();
            mpStatus = State.Playing;
        }
    }

und der Thread:

private class playBackRunnable extends Thread {
        final long start_time = System.currentTimeMillis();

        public void run() {
            while(chk_play.isChecked()){
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    return;
                } catch (Exception e) {
                    return;
                }

                final long elapsed = System.currentTimeMillis() - start_time;
                final String elapsed_time = util.getAsTime((int) elapsed);

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        int volume_level = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

                        int amp = (int)(volume_level * 100.f)/100;
                        Log.v("Volume Level", String.valueOf(amp));

                        if(chk_play.isChecked()){
                            prog_volume.setProgress(amp);
                            //txt_rectime.setText(elapsed_time);

                            if(amp <= 40 ){
                                prog_volume.setProgressDrawable(getResources().getDrawable(R.drawable.progress_green));
                            }else if(amp <= 60){
                                prog_volume.setProgressDrawable(getResources().getDrawable(R.drawable.progress_yellow));
                            }else if(amp <= 80){
                                prog_volume.setProgressDrawable(getResources().getDrawable(R.drawable.progress_orange));
                            }else {
                                prog_volume.setProgressDrawable(getResources().getDrawable(R.drawable.progress_red));
                            }
                        }

                    }
                });
            }
        }
    }

Hoffe jemand kann mir dabei helfen. Danke im Voraus.

BEARBEITEN:

HinzugefügtaudioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); bevor audioPlayer.prepare () immer noch nicht funktioniert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage