ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 默认声音/大小修改

2021-03-05 15:05:04  阅读:152  来源: 互联网

标签:STREAM int 默认 final 修改 static Android audio public


背景

客户机器默认的开机声音一直很大;客户觉得无法接受,需要改小点。

基于Android 7的代码

前言

一般主要通过系统层来进行修改。

在系统关于音频的有关代码中,定义了两个数组:

注意,这些代码根据版本的不同而不同,但都能在frameworks/base/media/java/android/media中找到。
虽然我没有找到 定义音量最大值的入口,但是可以看看:https://blog.csdn.net/xuechwtx/article/details/80868996

  • MAX_STREAM_VOLUME :定义了各种声音的最大值。

注意:最大值不是100,需要AudioManager.getStreamMaxVolume(type)来获取各个音量的最大值,然后进行设置。

 private static int[] MAX_STREAM_VOLUME = new int[] {
     5,  
     7,  // STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME
     7,  // STREAM_RING
     15, // STREAM_MUSIC
     7,  // STREAM_ALARM
     7,  // STREAM_NOTIFICATION
     15, // STREAM_BLUETOOTH_SCO
     7,  // STREAM_SYSTEM_ENFORCED
     15, // STREAM_DTMF
     15  // STREAM_TTS
 };
  • DEFAULT_STREAM_VOLUME :分别对应各种声音的默认的大小(顺序与MAX_STREAM_VOLUME相同)。
public class AudioSystem
{
    private static final String TAG = "AudioSystem";
    /* These values must be kept in sync with system/audio.h */
    /*
     * If these are modified, please also update Settings.System.VOLUME_SETTINGS
     * and attrs.xml and AudioManager.java.
     */
    /* The default audio stream */
    public static final int STREAM_DEFAULT = -1;
    /* The audio stream for phone calls */
    public static final int STREAM_VOICE_CALL = 0;
    /* The audio stream for system sounds */
    public static final int STREAM_SYSTEM = 1;
    /* The audio stream for the phone ring and message alerts */
    public static final int STREAM_RING = 2;
    /* The audio stream for music playback */
    public static final int STREAM_MUSIC = 3;
    /* The audio stream for alarms */
    public static final int STREAM_ALARM = 4;
    /* The audio stream for notifications */
    public static final int STREAM_NOTIFICATION = 5;
    /* @hide The audio stream for phone calls when connected on bluetooth */
    public static final int STREAM_BLUETOOTH_SCO = 6;
    /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */
    public static final int STREAM_SYSTEM_ENFORCED = 7;
    /* @hide The audio stream for DTMF tones */
    public static final int STREAM_DTMF = 8;
    /* @hide The audio stream for text to speech (TTS) */
    public static final int STREAM_TTS = 9;

    // ...

    public static final String[] STREAM_NAMES = new String[] {
        "STREAM_VOICE_CALL",
        "STREAM_SYSTEM",
        "STREAM_RING",
        "STREAM_MUSIC",
        "STREAM_ALARM",
        "STREAM_NOTIFICATION",
        "STREAM_BLUETOOTH_SCO",
        "STREAM_SYSTEM_ENFORCED",
        "STREAM_DTMF",
        "STREAM_TTS"
    };

	// ...

    private static int[] DEFAULT_STREAM_VOLUME = new int[] {
        4,  // STREAM_VOICE_CALL
        7,  // STREAM_SYSTEM
        5,  // STREAM_RING
        11, // STREAM_MUSIC
        6,  // STREAM_ALARM
        5,  // STREAM_NOTIFICATION
        7,  // STREAM_BLUETOOTH_SCO
        7,  // STREAM_SYSTEM_ENFORCED
        11, // STREAM_DTMF
        11  // STREAM_TTS
    };
    // ...
}

如果需要修改默认的通知声音,则可以将对应的数值 改为新的值即可。

MIN:0为静音;MAX:每种音量都不一样。

思路很简单,只需要将对应的DEFAULT_STREAM_VOLUME改一下即可。

如何知道所要改的声音是属于哪种 type?这个可以查看有关的源码:

// frameworks/base/cmds/bootanimation/BootAnimation.cpp
void BootAnimation::bootMusic()
{
    int index;
    const char *fileName = "/system/media/boot.wav";
    MediaPlayer* mp = new MediaPlayer();
    // 从这里我们可以知道,是STREAM_SYSTEM_ENFORCED类型的
    audio_devices_t device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE);
    if (mp->setDataSource(NULL, fileName, NULL) == NO_ERROR)
    {
        mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE/*AudioSystem: :ENFORCED_AUDIBLE*/);
        mp->prepare();
    }
    LOGE ("bootMusic\n");
    
    AudioSystem::initStreamVolume(AUDIO_STREAM_ENFORCED_AUDIBLE, 0,7);
    AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, 7, device);
    AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE/*AudioSystem::ENFORCED_AUDIBLE*/, &index, device);
    LOGE ("index %d",index);
    if (index != 0)
    {
        LOGD("playing %s", fileName);
        mp->setVolume(0.4f, 0.4f); // 调整左右声道的声音
        mp->seekTo(0);
        mp->start();
    }
}

标签:STREAM,int,默认,final,修改,static,Android,audio,public
来源: https://www.cnblogs.com/schips/p/set_default_volume_in_android.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有