MeidaPlayer音效测试用例

来源:互联网 发布:js中string的方法 编辑:程序博客网 时间:2024/05/29 14:18

本示例测试包括重低音(BassBoost)、环绕音(Virtualizer)、均衡器(Equalizer)和混响(EnvironmentalReverb),不包括视图(Visualizer),因为我发现前面4个网上都没有找到像样的用法,所以在这写篇博文。

音效起作用条件

  1. 得到audio session ID
  2. 进行初始化
  3. 使能

设置音效范围

这些数据都可以在源码里看到,在这里也列举一下

  1. BassBoost在[0,1000]范围之间
  2. Virtualizer在[0,1000]范围之间
  3. Equalizer在[-1500,1500]范围之间,存在多个Band
  4. EnvironmentalReverb在[-9000, 2000]之间

注意事项

测试时,需要只能有一个应用示例在使用MediaPlayer播放器,否则,谁先开启谁就先起作用,参数(int priority, int audioSession)里的priority没毛用

部分完整代码

部分 == 完整 ~

public class MainActivity extends AppCompatActivity implements MusicService.Callback {    final static String TAG = MainActivity.class.getSimpleName();    List<MediaInfo> mediaInfos;    List<String> strings;    MusicService musicService;    int priority = 1;    // 重低音    BassBoost bassBoost;    // 环绕音    Virtualizer virtualizer;    // 均衡器    Equalizer equalizer;    // 混响    EnvironmentalReverb environmentalReverb;    SeekBarListener listener;    ServiceConnection serviceConnection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            musicService = ((MusicService.MyBinder) service).getService();            musicService.setCallback(MainActivity.this);            Log.d(TAG, "priority:" + priority);            bassBoost = new BassBoost(priority, musicService.getAudioSessionId());            bassBoost.setEnabled(true);            Log.d(TAG, "default bassBoostStrength:" + bassBoost.getRoundedStrength());            sb_bassBoost.setMax(1000); //[0,1000]            sb_bassBoost.setProgress(getPreference("bassBoost"));            bassBoost.setStrength((short) getPreference("bassBoost"));            virtualizer = new Virtualizer(priority, musicService.getAudioSessionId());            virtualizer.setEnabled(true);            Log.d(TAG, "default virtualizerStrength:" + virtualizer.getRoundedStrength());            sb_virtualizer.setMax(1000); //[0,1000]            sb_virtualizer.setProgress(getPreference("virtualizer"));            virtualizer.setStrength((short) getPreference("virtualizer"));            equalizer = new Equalizer(priority, musicService.getAudioSessionId());            equalizer.setEnabled(true);            short[] ranges = equalizer.getBandLevelRange();            Log.d(TAG, "ranges[0]:" + ranges[0] + ", ranges[1]:" + ranges[1]);            for (short i = 0; i < equalizer.getNumberOfBands(); i++) {                System.out.println("default range" + i + ":" + equalizer.getBandLevel(i));            }            equalizerBand0.setMax(3000); // [-1500, 1500]            equalizerBand0.setProgress(getPreference("equalizerBand0") + 1500);            equalizer.setBandLevel((short) 0, (short) getPreference("equalizerBand0"));            equalizerBand1.setMax(3000); // [-1500, 1500]            equalizerBand1.setProgress(getPreference("equalizerBand1") + 1500);            equalizer.setBandLevel((short) 1, (short) getPreference("equalizerBand1"));            equalizerBand2.setMax(3000); // [-1500, 1500]            equalizerBand2.setProgress(getPreference("equalizerBand2") + 1500);            equalizer.setBandLevel((short) 2, (short) getPreference("equalizerBand2"));            equalizerBand3.setMax(3000); // [-1500, 1500]            equalizerBand3.setProgress(getPreference("equalizerBand3") + 1500);            equalizer.setBandLevel((short) 3, (short) getPreference("equalizerBand3"));            equalizerBand4.setMax(3000); // [-1500, 1500]            equalizerBand4.setProgress(getPreference("equalizerBand4") + 1500);            equalizer.setBandLevel((short) 4, (short) getPreference("equalizerBand4"));            environmentalReverb = new EnvironmentalReverb(priority, musicService.getAudioSessionId());            environmentalReverb.setEnabled(true);            Log.d(TAG, "default environmentalReverbReverbLevel:" + environmentalReverb.getReverbLevel());            sb_environmentalReverb.setMax(11000); //[-9000, 2000] // setReverbLevel            sb_environmentalReverb.setProgress(getPreference("environmentalReverb") + 9000);            environmentalReverb.setReverbLevel((short) getPreference("environmentalReverb"));            showDefaultEq();        }        @Override        public void onServiceDisconnected(ComponentName name) {            musicService = null;        }    };    @Bind(R.id.spinner)    Spinner spinner;    private void showDefaultEq() {        int presetNums = equalizer.getNumberOfPresets();        String[] presetNames = new String[presetNums];        for (short preset = 0; preset < presetNums; preset++) {            presetNames[preset] = equalizer.getPresetName(preset);        }        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,                android.R.layout.simple_spinner_dropdown_item, presetNames);        spinner.setAdapter(adapter);        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                Log.d(TAG, "position:" + position);                equalizer.usePreset((short) position);                equalizerBand0.setProgress(equalizer.getBandLevel((short) 0) + 1500);                equalizerBand1.setProgress(equalizer.getBandLevel((short) 1) + 1500);                equalizerBand2.setProgress(equalizer.getBandLevel((short) 2) + 1500);                equalizerBand3.setProgress(equalizer.getBandLevel((short) 3) + 1500);                equalizerBand4.setProgress(equalizer.getBandLevel((short) 4) + 1500);            }            @Override            public void onNothingSelected(AdapterView<?> parent) {            }        });        for (String s : presetNames) {            System.out.println(s);        }    }    @Bind(R.id.bassBoost)    SeekBar sb_bassBoost;    @Bind(R.id.virtualizer)    SeekBar sb_virtualizer;    @Bind(R.id.equalizer_band0)    SeekBar equalizerBand0;    @Bind(R.id.equalizer_band1)    SeekBar equalizerBand1;    @Bind(R.id.equalizer_band2)    SeekBar equalizerBand2;    @Bind(R.id.equalizer_band3)    SeekBar equalizerBand3;    @Bind(R.id.equalizer_band4)    SeekBar equalizerBand4;    @Bind(R.id.environmentalReverb)    SeekBar sb_environmentalReverb;    @Bind(R.id.list)    ListView list;    @Bind(R.id.headLayout)    LinearLayout headLayout;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        loadingMedias();        startService(new Intent(this, MusicService.class));        list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, strings));        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if (musicService != null) {                    musicService.load(mediaInfos.get(position));                }            }        });        listener = new SeekBarListener();        sb_bassBoost.setOnSeekBarChangeListener(listener);        sb_virtualizer.setOnSeekBarChangeListener(listener);        equalizerBand0.setOnSeekBarChangeListener(listener);        equalizerBand1.setOnSeekBarChangeListener(listener);        equalizerBand2.setOnSeekBarChangeListener(listener);        equalizerBand3.setOnSeekBarChangeListener(listener);        equalizerBand4.setOnSeekBarChangeListener(listener);        sb_environmentalReverb.setOnSeekBarChangeListener(listener);    }    @Override    public void update() {    }    @Override    public void updateProgress() {    }    class SeekBarListener implements SeekBar.OnSeekBarChangeListener {        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            switch (seekBar.getId()) {                case R.id.bassBoost:                    if (bassBoost.getStrengthSupported()) {                        Log.d(TAG, "seekBar.getProgress():" + seekBar.getProgress());                        short value = (short) seekBar.getProgress();                        bassBoost.setStrength(value);                        setPreference("bassBoost", value);                    }                    break;                case R.id.virtualizer:                    if (virtualizer.getStrengthSupported()) {                        Log.d(TAG, "seekBar.getProgress():" + seekBar.getProgress());                        short value = (short) seekBar.getProgress();                        virtualizer.setStrength(value);                        setPreference("virtualizer", value);                    }                    break;                case R.id.equalizer_band0:                    Log.d(TAG, "seekBar.getProgress():" + seekBar.getProgress());                    Log.d(TAG, "equalizer.getNumberOfBands():" + equalizer.getNumberOfBands());                    if (equalizer != null) {                        short value = (short) (seekBar.getProgress() - 1500);                        equalizer.setBandLevel((short) 0, value);                        setPreference("equalizerBand0", value);                    }                    break;                case R.id.equalizer_band1:                    if (equalizer != null) {                        short value = (short) (seekBar.getProgress() - 1500);                        equalizer.setBandLevel((short) 1, value);                        setPreference("equalizerBand1", value);                    }                    break;                case R.id.equalizer_band2:                    if (equalizer != null) {                        short value = (short) (seekBar.getProgress() - 1500);                        equalizer.setBandLevel((short) 2, value);                        setPreference("equalizerBand2", value);                    }                    break;                case R.id.equalizer_band3:                    if (equalizer != null) {                        short value = (short) (seekBar.getProgress() - 1500);                        equalizer.setBandLevel((short) 3, value);                        setPreference("equalizerBand3", value);                    }                    break;                case R.id.equalizer_band4:                    if (equalizer != null) {                        short value = (short) (seekBar.getProgress() - 1500);                        equalizer.setBandLevel((short) 4, value);                        setPreference("equalizerBand4", value);                    }                    break;                case R.id.environmentalReverb:                    Log.d(TAG, "seekBar.getProgress():" + seekBar.getProgress());                    short value = (short) (seekBar.getProgress() - 9000);                    environmentalReverb.setReverbLevel(value);                    setPreference("environmentalReverb", value);                    break;            }        }        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }    }    private int getPreference(String key) {        return PreferenceManager.getDefaultSharedPreferences(this).getInt(key, 0);    }    private void setPreference(String key, int value) {        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();        editor.putInt(key, value).apply();    }    // MediaPlayer    private void loadingMedias() {        mediaInfos = exeAudioCursor(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                null, MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);        strings = new ArrayList<>();        for (MediaInfo info : mediaInfos) {            strings.add(info.getTitle());        }    }    @Override    protected void onStart() {        super.onStart();        Intent intent = new Intent(this, MusicService.class);        bindService(intent, serviceConnection, BIND_AUTO_CREATE);    }    @Override    protected void onStop() {        super.onStop();        unbindService(serviceConnection);    }    @Override    protected void onDestroy() {        super.onDestroy();        musicService.clearCallback();        stopService(new Intent(this, MusicService.class));        bassBoost.release();        virtualizer.release();        equalizer.release();        environmentalReverb.release();    }    private List<MediaInfo> exeAudioCursor(Uri uri,                                           String projection[],                                           String selection,                                           String selectionArgs[],                                           String sortOrder) {        List<MediaInfo> infos = new ArrayList<>();        Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);        if (cursor != null && cursor.getCount() > 0) {            try {                while (cursor.moveToNext()) {                    String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));                    String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));                    String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));                    String res = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));                    MediaInfo item = new MediaInfo();                    item.setArtist(artist);                    item.setAlbum(album);                    item.setTitle(title);                    item.setPath(res);                    infos.add(item);                }            } finally {                cursor.close();            }        }        return infos;    }}

源码下载

0 0
原创粉丝点击