MeidaPlayer音效测试用例
来源:互联网 发布:js中string的方法 编辑:程序博客网 时间:2024/05/29 14:18
本示例测试包括重低音(BassBoost)、环绕音(Virtualizer)、均衡器(Equalizer)和混响(EnvironmentalReverb),不包括视图(Visualizer),因为我发现前面4个网上都没有找到像样的用法,所以在这写篇博文。
音效起作用条件
- 得到
audio session ID
- 进行初始化
- 使能
设置音效范围
这些数据都可以在源码里看到,在这里也列举一下
- BassBoost在
[0,1000]
范围之间 - Virtualizer在
[0,1000]
范围之间 - Equalizer在
[-1500,1500]
范围之间,存在多个Band - 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
- MeidaPlayer音效测试用例
- 用DirectSound播放音效
- 音效
- 音效
- Android用SoundPool播放音效
- 测试游戏时音效出现问题的原因
- MeidaPlayer的接口和架构分析
- 初探MeidaPlayer底层实现(一)
- 初探MeidaPlayer底层实现(二)
- 初探MeidaPlayer底层实现(三)
- cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放
- 用NGUI的控件控制游戏音量、音效、开关。
- 音效解析
- android 音效
- 混响音效
- 音效素材
- Cocos2dx 音效
- IOS_AudioToolbox音效
- GDB 带参调试笔记
- Javascript面向对象及组件开发(二)面向对象的写法
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- Swift实现的iOS常用手势识别Demo
- MIPS
- MeidaPlayer音效测试用例
- Android 启动 Activity和一键退出应用的的最佳方法
- android阅读器里的 txt 文本处理分页功能的实现:
- 书-Programming Game AI by Example
- 20151230 053 60-b20
- 梦醒
- css3 cal 用法
- redhat中的setup工具 可视化配置
- Javascript面向对象及组件的详细介绍(三)面向对象的拖拽