Ich arbeite an einer App, die sowohl eine Audiodatei aufnimmt als auch die Möglichkeit bietet, diese Datei nach der Aufnahme abzuspielen. Die Benutzeroberfläche verfügt über eine EQ-Komponente, die relativ zur aktuellen Amplitude der Aufnahme animiert. Ich habe die Animation über die MediaRecorder.getMaxAmplitude()
Methode funktioniert, kann aber keine Mittel finden, dies mit MediaPlayer zu tun. Ich weiß, dass es möglich sein muss, da es Live Live Wallpapers standardmäßig gibt, die diese Funktionalität ausführen, aber ich sehe keine Möglichkeit, dass diese Informationen beim Durchforsten von AOSP gezogen werden. Weiß jemand, wie das funktioniert?Wie erhalte ich die aktuelle Lautstärke/Amplitude in einem Android MediaPlayer?
Antwort
Ich denke, Sie müssen AudioManager verwenden. Wie die API angibt, kann sie für die Lautstärkeregelung verwendet werden:
AudioManager bietet Zugriff auf Volume und Klingelton-Modus-Steuerung.
Verwenden Sie Context.getSystemService (Context.AUDIO_SERVICE) , um eine Instanz dieser Klasse zu erhalten.
Dann denke ich this method wäre nützlich.
Das war, wo ich herum stocherte, aber diese Methode gibt den aktuell eingestellten Lautstärkepegel des Geräts zurück, nicht den Wiedergabepegel. –
Wo ist der Unterschied? Vielleicht fragst du nach der Lautstärke des falschen Streams? – Janusz
Es geht nicht um die Lautstärke des aktuellen Wiedergabestreams, sondern um die Lautstärke des aktuell wiedergegebenen Mediums. Nur weil die Lautstärke Ihres Musikstreams auf 60% eingestellt ist, bedeutet das nicht, dass die Lautstärke des Sounds in diesem Moment auf dem gleichen Level ist. Es könnte ein ruhiger Teil des Songs sein. – MattC
Ich habe nach einer Möglichkeit gesucht, something similar für eine Weile zu tun. Ich möchte wirklich die Lautstärke/Amplitude von allem, was über den Medienstream gespielt wird, sehen können, aber ich werde mich damit begnügen, es für etwas zu tun, das ich gerade spiele.
Bis jetzt ist die beste Lösung, die ich gefunden habe, in RingDroid implementiert. Ich habe den Code nicht zu tief betrachtet, aber es sieht so aus, als ob RingDroid seine Soundkarte erstellt, indem er die Sounddatei nach und nach analysiert.
Ich habe überlegt, einen ähnlichen Ansatz zu verwenden und dann einen Visualizer anzuzeigen, der getrennt von der Audiodatei ausgeführt wird, aber in einem synchronisierten Tempo ausgeführt wird. Dies scheint jedoch zu viel Arbeit für etwas zu sein, das viel einfacher sein sollte.
Sie können das aktuelle Volumen von Media-Player mit Hilfe von Audiomanager class.The Code ist wie folgt: -
AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC);
Und falls Sie können das Standardvolumen von Medien player.You festlegen möchten das tun, wie zum Beispiel: -
am.setStreamVolume(
AudioManager.STREAM_MUSIC,
volume_level,
0);
das ist, all..Happy Codierung :)
Das ist nicht was er fragt. Er fragt nach dem aktuellen Ausgangspegel, nicht nach der Lautstärkeeinstellung. –
Sie haben GetLevel() in Dataline zu implementieren. Dies ist so nah am Bus wie es in Java ist.
Hierbei wird ein laufender Durchschnitt der Amplitudendaten aus dem Soundstream-Puffer berechnet. Dies verursacht, dass viel Busverkehr auf den Puffer zugreift, also als abstrakte Methode.
quadratischer Mittelwert RMS ist ein Ansatz:
https://community.oracle.com/message/5391003
DSP mit FFT gibt eine vollständigere Tonprofil, verbraucht aber viel mehr CPU-Ressourcen. Schlagen Sie nicht auf volle DSP, wenn Sie nur RMS benötigen. Beschränken Sie die Qualität Ihrer Proben, um die Leistung zu verbessern.
Sie haben Glück.Es gibt eine Klasse namens Visualizer, die tun wird, was Sie wollen, denke ich.
import android.app.Activity;
import android.media.audiofx.Visualizer;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private Visualizer audioOutput = null;
public float intensity = 0; //intensity is a value between 0 and 1. The intensity in this case is the system output volume
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createVisualizer();
}
private void createVisualizer(){
int rate = Visualizer.getMaxCaptureRate();
audioOutput = new Visualizer(0); // get output audio stream
audioOutput.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {
@Override
public void onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) {
intensity = ((float) waveform[0] + 128f)/256;
Log.d("vis", String.valueOf(intensity));
}
@Override
public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) {
}
},rate , true, false); // waveform not freq data
Log.d("rate", String.valueOf(Visualizer.getMaxCaptureRate()));
audioOutput.setEnabled(true);
}
}
Sie diese Berechtigungen benötigen:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
- 1. Wie erhalte ich aktuelle Songdetails vom MediaPlayer?
- 2. Wie erhalte ich die aktuelle URL von einem FilterAttribute?
- 3. Erhalte die aktuelle Lernrate von einem tf.train.AdamOptimizer
- 4. Wie erhalte ich die aktuelle Zeit nur in JavaScript?
- 5. Wie Mediaplayer in android
- 6. Erhalte die aktuelle Stapelgröße in FORTH
- 7. Wie erhalte ich die aktuelle Instanz-ID von boto3?
- 8. Android MediaPlayer erhalten Volumen
- 9. Wie erhalte ich die aktuelle Server URL der appengine App?
- 10. Wie erhalte ich die aktuelle URL nach einer Weiterleitung in einem Symfony2 WebTestCase?
- 11. Wie erhalte ich die aktuelle Datetime in UTC von einem Excel-VBA-Makro
- 12. Wie erhalte ich das aktuelle Verzeichnis in einer Klassenbibliothek?
- 13. Ich erhalte in android
- 14. Wie stelle ich die Startposition mit dem Android MediaPlayer ein
- 15. Android MediaPlayer Fehlercodes?
- 16. Wie bekomme ich die aktuelle Zeit?
- 17. Wie bekomme ich die aktuelle Datumzeit in Millisekunden in Android
- 18. DNN 8.00.02 - Erhalte die aktuelle Modul-ID
- 19. openal: Erhalte die aktuelle Spielposition einer Quelle
- 20. Wie erhalte ich das Startdatum für die aktuelle Woche und füge es zu einem Kombinationsfeld hinzu?
- 21. Die Wiedergabegeschwindigkeit von Android MediaPlayer steuern
- 22. Wiederverwendung Looping Mediaplayer in Android
- 23. Meine Android MediaPlayer Synchronisationsprobleme
- 24. Wie bekomme ich die aktuelle Zeit in nativem Android-Code?
- 25. Wie bekomme ich die aktuelle Inhaltsansicht in der Android-Programmierung?
- 26. Wie bekomme ich die aktuelle Bildschirmhelligkeit in Android-Code dynamisch?
- 27. Wie bekomme ich die aktuelle Systemzeit in Android?
- 28. Wie bekomme ich die aktuelle SIM-Kartennummer in Android?
- 29. Android MediaPlayer Frage
- 30. Benutzerdefinierte MediaPlayer-Klasse in Android
Ich bin verwirrt durch Ihre Antwort akzeptiert, wie es scheint es das Problem nicht aus den Kommentaren lösen, ist das richtig? –