如何获取MediaPlayer中的当前音量/幅度?

Sco*_*son 20 android android-mediaplayer

我正在开发一个既可以录制音频文件的应用程序,也可以选择在录制完文件后播放该文件.UI具有EQ分量,该EQ分量相对于记录的当前幅度动画化.我已经通过该MediaRecorder.getMaxAmplitude()方法运行动画,但无法找到任何方法来使用MediaPlayer.我知道它必须是可能的,因为默认情况下有音乐可视化动态壁纸执行此功能,但我无法看到它在通过AOSP梳理时提取信息.有人知道如何使这项工作?

Dee*_*rma 26

您可以在Audiomanager类的帮助下获得当前的媒体播放器数量.代码如下: -

AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC);
Run Code Online (Sandbox Code Playgroud)

同样,如果你想设置媒体播放器的默认音量.你可以这样做: -

am.setStreamVolume(
            AudioManager.STREAM_MUSIC,
            volume_level,
            0);
Run Code Online (Sandbox Code Playgroud)

这就是全部..快乐编码:)

  • 这不是他所要求的.他要求的是当前的输出水平,而不是音量设置. (5认同)
  • 他要求的是运行实时波形幅度数据(当前输出电平),而不是播放器的音量设置,这是您建议的全部。 (2认同)

Ohi*_*ovr 10

你很幸运.有一个叫做Visualizer的类可以做你想要的.

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);
}


}
Run Code Online (Sandbox Code Playgroud)

你需要这些权限:

<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
Run Code Online (Sandbox Code Playgroud)


小智 9

我想你必须使用AudioManager.正如API所述,它可以用于音量控制:

AudioManager提供对音量和振铃模式控制的访问.

使用Context.getSystemService(Context.AUDIO_SERVICE)获取此类的实例.

然后我认为这种方法很有用.

  • 这就是我在探索的地方,但该方法返回当前设置的设备音量级别,而不是播放级别. (10认同)
  • 这不是当前播放流的音量问题,而是播放的实际媒体的音量.仅仅因为您的音乐流量设置为60%并不意味着此时声音的音量处于同一水平.它可能是这首歌的一部分. (4认同)
  • 他要求访问音频流样本数据,而不是播放器的音量设置,这只是一个缩放乘数。为什么这是公认的答案?您至少可以接受 Visualizer 解决方案,即使该类带来的麻烦大于其价值。 (2认同)

Had*_*ote 5

如下:

audioManager = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
int volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int volumePercent = (int) (((float) volumeLevel / maxVolumeLevel) * 100);
Run Code Online (Sandbox Code Playgroud)