Android Audio 客制化问题(二)

情景模式中调节ring volume播放的音乐时长

android_o/packages/apps/Settings/src/com/android/settings/notification/SoundSettings.java

关键字: SAMPLE_CUTOFF

private static final int SAMPLE_CUTOFF = 2000;  // manually cap sample playback at 2 seconds
 ......
 // === Volumes ===
      final class VolumePreferenceCallback implements VolumeSeekBarPreference.Callback {
          private SeekBarVolumizer mCurrent;
          @Override
          public void onSampleStarting(SeekBarVolumizer sbv) {
              if (mCurrent != null && mCurrent != sbv) {
                  mCurrent.stopSample();
              }
             mCurrent = sbv;
              if (mCurrent != null) {
                  mHandler.removeMessages(H.STOP_SAMPLE);
                  mHandler.sendEmptyMessageDelayed(H.STOP_SAMPLE, SAMPLE_CUTOFF);
              }
          }

mHandler.sendEmptyMessageDelayed会在SAMPLE_CUTOFF设置的时间后来停止播放sample。如果要调节播放的时间,就需要调节SAMPLE_CUTOFF的值。

DSD即Direct Stream Digital

即将原始数据给到外置Codec进行解码

如何取消安全音量警示框?

当插入有线耳机调节音量时,有一个音量保护,当超过某一个值时会弹出安全音量警示框,如何使之默认不显示?

alps\frameworks\base\core\res\res\config.xml 里的 config-safe_media_volume_enabled 设为 false
/android_o/frameworks/base/services/core/java/com/android/server/audio/AudioService.java

private void onConfigureSafeVolume(boolean force, String caller) {
          synchronized (mSafeMediaVolumeState) {
              int mcc = mContext.getResources().getConfiguration().mcc;
              if ((mMcc != mcc) || ((mMcc == 0) && force)) {
                  mSafeMediaVolumeIndex = mContext.getResources().getInteger(
                          com.android.internal.R.integer.config_safe_media_volume_index) * 10;
                  boolean safeMediaVolumeEnabled =
                          SystemProperties.getBoolean("audio.safemedia.force", false)
                          || mContext.getResources().getBoolean( 
                       com.android.internal.R.bool.config_safe_media_volume_enabled);

播放任何采样率的音乐都让其输出44.1k

[Keyword] 采样率

修改: audio_policy.conf
outputs { primary { sampling_rates 44100|48000 改为: outputs { primary { sampling_rates 44100

需要关注理解的Audio相关的文件目录

Settings/src/com/.../AudioSettings.java
frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
android_o/packages/apps/Calendar/src/com/android/calendar/alerts/AlertService.java
android_o/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
android_o/frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java

插入耳机时也能将音乐调成最大

在插入耳机的情况下,为保护用户的听力, 以防受损,故在检测到音量调整到警界值时, 会出现上述警告框而这个警界值, 是可以调整的, 默认是 12, 音量值最大是 15所以当将音量调整到 12 以上时, 就会有上述警告框出现 , 如果不想使用此功能, 可以将frameworks\base\core\res\res\values\config.xml
中下面这行

<integer name="config_safe_media_volume_index">12</integer>

改为:

<integer name="config_safe_media_volume_index">15</integer>

如果想调低警界值, 也是改上述配置, 将其值调小.

静音模式下来电能震动

希望情景模式为静音模式时,来电可以震动

首先修改Silent这个模式下,震动的默认值,即在AudioProfileManager.java 的getDefaultState()中将DEFAULT_VIBRATION_SILENT设为true; 然后在AudioService.java的shouldVibrate()中 如下case AudioManager.VIBRATE_SETTING_ON的地方改成true:

 public boolean shouldVibrate(int vibrateType) {
        if (!mHasVibrator) return false;        
        switch (getVibrateSetting(vibrateType)) {            
              case AudioManager.VIBRATE_SETTING_ON:
                   //  return getRingerMode() != AudioManager.RINGER_MODE_SILENT;
                    return true; //Modify this line           
              case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
                   return getRingerMode() == AudioManager.RINGER_MODE_VIBRATE;            
             case AudioManager.VIBRATE_SETTING_OFF:
                // return false, even for incoming calls
                return false;            
            default:
                return false;
        }
    }

播放开关机铃声的代码流程

播放开关机铃声的代码在\alps\frameworks\base\cmds\bootanimation文件夹下面。
bootanimation是一个可执行程序,在开机时init.rc会去执行该程序。该程序的main函数在Bootanimation_main.cpp中,在main()函数中会new一个BootAnimation()类的实例,并且传递sePlay的值,sePlay可以决定是否播放开关机铃声。然后在BootAnimation::threadLoop()方法中,只要以下路径有以下名字音频文件存在并且前面的sePlay为true,就会去new一个mediaplayer,然后播放音频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安德路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值