Sto lavorando a un'app che registrerà entrambi un file audio e quindi avrà la possibilità di riprodurre quel file una volta che è stato registrato. L'interfaccia utente ha un componente EQ che si anima in relazione all'ampiezza corrente della registrazione. L'animazione funziona tramite il metodo MediaRecorder.getMaxAmplitude()
, ma non riesco a trovare alcun modo per farlo con MediaPlayer. So che deve essere possibile dal momento che ci sono visualizzazione musicale Live Wallpapers di default che eseguono questa funzionalità, ma non riesco a vedere in alcun modo che stia tirando quelle informazioni durante la navigazione attraverso AOSP. Qualcuno sa come farlo funzionare?Come ottengo il volume/ampiezza corrente in un MediaPlayer Android?
risposta
Penso che devi usare AudioManager. Come indica l'API, può essere utilizzato per il controllo del volume:
AudioManager consente di accedere al volume e al controllo della modalità suoneria.
Utilizzare Context.getSystemService (Context.AUDIO_SERVICE) per ottenere un'istanza di questa classe.
Quindi penso che this method sarebbe utile.
Ecco dove stavo curiosando ma quel metodo restituisce il livello di volume attualmente impostato sul dispositivo, non il livello di riproduzione. –
Dov'è la differenza? Forse stai chiedendo il volume del flusso sbagliato? – Janusz
Non è una questione di volume per il flusso di riproduzione corrente, ma il volume del supporto reale che si sta riproducendo. Solo perché il volume del tuo flusso musicale è impostato al 60% non significa che il volume del suono in quel momento sia allo stesso livello. Potrebbe essere una parte tranquilla della canzone. – MattC
Ho cercato un modo per fare something similar per un po '. Voglio davvero essere in grado di vedere il volume/l'ampiezza di tutto ciò che viene riprodotto sul flusso multimediale, ma mi accontenterò di poterlo fare per qualcosa che sto attualmente giocando.
Finora, la soluzione migliore che ho trovato è implementata in RingDroid. Non ho esaminato il codice troppo profondamente, ma sembra che il modo in cui RingDroid crea la sua soundmap sia analizzando il file audio a poco a poco.
Ho considerato l'utilizzo di un approccio simile e quindi la visualizzazione di un visualizzatore che viene eseguito separatamente dal file audio, ma viene eseguito a un ritmo sincronizzato. Tuttavia, questo sembra troppo lavoro per qualcosa che dovrebbe essere molto più semplice.
È possibile ottenere il volume attuale di lettore multimediale con l'aiuto di codice audio manager class.The è la seguente: -
AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC);
Allo stesso modo, se si desidera impostare il volume predefinito dei media player.You può fare affinché, come: -
am.setStreamVolume(
AudioManager.STREAM_MUSIC,
volume_level,
0);
Ecco codifica all..Happy :)
Non è quello che sta chiedendo. Sta chiedendo il livello di uscita corrente, non l'impostazione del volume. –
bisogna implementare GetLevel() in DataLine. Questo è il più vicino al bus che arriva in Java.
Ciò comporta il calcolo di una media corrente di dati di ampiezza dal buffer del flusso audio. Ciò causa un sacco di traffico del bus per accedere al buffer, quindi lasciato come metodo astratto.
Root quadratico medio RMS è un approccio:
https://community.oracle.com/message/5391003
DSP con FFT fornisce un profilo audio più completa, ma consuma molta più risorse della CPU. Non sbattere sul DSP completo se tutto ciò che serve è RMS. Limita la qualità dei tuoi campioni per migliorare le prestazioni.
Sei fortunato.C'è una classe chiamata Visualizer che farà quello che vuoi, penso.
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);
}
}
dovrai queste autorizzazioni:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
- 1. In Python, come ottengo il frame corrente?
- 2. Come disattivare MediaPlayer in Android
- 3. Android MediaPlayer ottiene volume
- 4. Ottieni il mediaPlayer del videoView in Android
- 5. Come ottengo l'ora corrente solo in JavaScript
- 6. Come ottengo la data corrente in Cocoa
- 7. Come ottengo la lingua corrente in django?
- 8. Come ottengo la data corrente?
- 9. Come rilasciare correttamente Android MediaPlayer
- 10. Android MediaPlayer bloccato in preparazione()
- 11. Classe MediaPlayer personalizzata in Android
- 12. Come ottengo un formato stringa della data corrente, in python?
- 13. Come ottengo il file corrente, la classe corrente e il metodo corrente con Python?
- 14. Come collegare MediaPlayer con SurfaceView in Android?
- 15. Android: MediaPlayer, Come ottenere le proprietà di un flusso audio?
- 16. Come riprendere il mediaplayer?
- 17. mediaplayer Android errore
- 18. MediaPlayer Service Android
- 19. messaggi di debug Come disattivare Android MediaPlayer
- 20. Come scollegare/rilasciare surfaceview da Android Mediaplayer
- 21. Android MediaPlayer setNextMediaPlayer() alternativo
- 22. Buffer infinito mediaplayer Android
- 23. AndroId MediaPlayer prepareAsync metodo
- 24. Streaming per Android MediaPlayer
- 25. Come ottengo l'URL corrente usando smarty
- 26. Come ottengo l'Url corrente da FilterAttribute?
- 27. Servizio Android che controlla MediaPlayer
- 28. Come ottengo il DOM corrente con Selenium Java 2.8?
- 29. Streaming con Android MediaPlayer in SDK 8
- 30. Android - Dimensione buffer MediaPlayer in ICS 4.0
Sono confuso dalla tua risposta accettata, sembra che non ha risolto il problema dai commenti, è corretto? –