当前位置:

首页 > 系统应用 > 10.3 AudioManager(音频管理器)

10.3 AudioManager(音频管理器)

本节引言: 在多媒体这一节里,前面已经用SoundPool做过一个“Duang”的小示例:小猪点一下按钮,结果“Duang”地一声突然冒出来,而且音量还特别大,真能把人吓一跳。不过也正因为这个小插曲,声音控制这件事就绕不过去了。既然提到了音量大小,接下来正好看看Android提供的音量控制相关 AP

本文目录

    本节引言:

    在多媒体这一节里,前面已经用SoundPool做过一个“Duang”的小示例:小猪点一下按钮,结果“Duang”地一声突然冒出来,而且音量还特别大,真能把人吓一跳。不过也正因为这个小插曲,声音控制这件事就绕不过去了。既然提到了音量大小,接下来正好看看Android提供的音量控制相关 API。

    AudioManager(音频管理器)这个类位于Android.Media包下,主要负责音量控制以及铃声模式这类操作。接下来就把它的基本用法捋一遍,顺手也可以写个Demo来练练手。比如做一个简单的静音功能,看小电影之前先打开Demo点一下静音,然后,当然,这里只是开个玩笑。好了,闲话少说,直接进入本节内容。

    官方API文档:AudioManager

    1.获得AudioManager对象实例

    AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

    2.相关方法详解

    常用方法:

    • adjustVolume(int direction, int flags): 控制手机音量,调大或者调小一个单位,根据第一个参数进行判断 AudioManager.ADJUST_LOWER,可调小一个单位; AudioManager.ADJUST_RAISE,可调大一个单位
    • adjustStreamVolume(int streamType, int direction, int flags): 同上,不过可以选择调节的声音类型 1)streamType参数,指定声音类型,有下述几种声音类型: STREAM_ALARM:手机闹铃 STREAM_MUSIC:手机音乐
      STREAM_RING:电话铃声 STREAM_SYSTEAM:手机系统
      STREAM_DTMF:音调 STREAM_NOTIFICATION:系统提示
      STREAM_VOICE_CALL:语音电话 2)第二个参数和上面那个一样,调大或调小音量的 3)可选的标志位,比如AudioManager.FLAG_SHOW_UI,显示进度条,AudioManager.PLAY_SOUND:播放声音
    • setStreamVolume(int streamType, int index, intflags):直接设置音量大小
    • getMode( ):返回当前的音频模式
    • setMode( ):设置声音模式 有下述几种模式: MODE_NORMAL(普通), MODE_RINGTONE(铃声), MODE_IN_CALL(打电话),MODE_IN_COMMUNICATION(通话)
    • getRingerMode( ):返回当前的铃声模式
    • setRingerMode(int streamType):设置铃声模式 有下述几种模式: 如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)
    • getStreamVolume(int streamType): 获得手机的当前音量,最大值为7,最小值为0,当设置为0的时候,会自动调整为震动模式
    • getStreamMaxVolume(int streamType):获得手机某个声音类型的最大音量值
    • setStreamMute(int streamType,boolean state):将手机某个声音类型设置为静音
    • setSpeakerphoneOn(boolean on):设置是否打开扩音器
    • setMicrophoneMute(boolean on):设置是否让麦克风静音
    • isMicrophoneMute():判断麦克风是否静音或是否打开
    • isMusicActive():判断是否有音乐处于活跃状态
    • isWiredHeadsetOn():判断是否插入了耳机

    其他方法:

    • abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放弃音频的焦点
    • adjustSuggestedStreamVolume(int,int suggestedStreamType intflags): 调整最相关的流的音量,或者给定的回退流
    • getParameters(String keys):给音频硬件设置一个varaible数量的参数值
    • getVibrateSetting(int vibrateType):返回是否该用户的振动设置为振动类型
    • isBluetoothA2dpOn():检查是否A2DP蓝牙耳机音频路由是打开或关闭
    • isBluetoothScoA vailableOffCall():显示当前平台是否支持使用SCO的关闭调用用例
    • isBluetoothScoOn():检查通信是否使用蓝牙SCO
    • loadSoundEffects():加载声音效果
    • playSoundEffect((int effectType, float volume):播放声音效果
    • egisterMediaButtonEventReceiver(ComponentName eventReceiver): 注册一个组件MEDIA_BUTTON意图的唯一接收机
    • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 请求音频的焦点
    • setBluetoothScoOn(boolean on):要求使用蓝牙SCO耳机进行通讯
    • startBluetoothSco/stopBluetoothSco()():启动/停止蓝牙SCO音频连接
    • unloadSoundEffects():卸载音效

    3.使用示例

    嘿嘿,属性蛮多的,有些还涉及到蓝牙这些东东,这里我们只讲解最常见的一些方法!

    遇到一些特殊的没见过的,我们再来查文档!

    简单的示例:使用Mediaplayer播放音乐,通过AudioManager调节音量大小与静音!

    对了,先在res下创建一个raw的文件夹,往里面丢一个MP3资源文件!

    运行效果图:

    代码实现:

    布局代码activity_main.xml:

    
    

    MainActivity.ja va:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_start;
        private Button btn_stop;
        private Button btn_higher;
        private Button btn_lower;
        private Button btn_quite;
        private MediaPlayer mePlayer;
        private AudioManager aManager;
        //定义一个标志用来标示是否点击了静音按钮
        private int flag = 1;
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            //获得系统的音频对象
            aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
            //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
            mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
            //设置循环播放:
            mePlayer.setLooping(true);
            bindViews();
        }
    private void bindViews() {
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_stop = (Button) findViewById(R.id.btn_stop);
            btn_higher = (Button) findViewById(R.id.btn_higher);
            btn_lower = (Button) findViewById(R.id.btn_lower);
            btn_quite = (Button) findViewById(R.id.btn_quite);
    btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
            btn_higher.setOnClickListener(this);
            btn_lower.setOnClickListener(this);
            btn_quite.setOnClickListener(this);
        }
    @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_start:
                    btn_stop.setEnabled(true);
                    mePlayer.start();
                    btn_start.setEnabled(false);
                    break;
                case R.id.btn_stop:
                    btn_start.setEnabled(true);
                    mePlayer.pause();
                    btn_stop.setEnabled(false);
                    break;
                case R.id.btn_higher:
                    // 指定调节音乐的音频,增大音量,而且显示音量图形示意
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                    break;
                case R.id.btn_lower:
                    // 指定调节音乐的音频,降低音量,只有声音,不显示图形条
                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
                    break;
                case R.id.btn_quite:
                    // 指定调节音乐的音频,根据isChecked确定是否需要静音
                    flag *= -1;
                    if (flag == -1) {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);   //API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
    //                            AudioManager.FLAG_SHOW_UI);   //23以后的版本用这个
                        btn_quite.setText("取消静音");
                    } else {
                        aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23过期- -
    //                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
    //                            AudioManager.FLAG_SHOW_UI);  //23以后的版本用这个
                        aManager.setMicrophoneMute(false);
                        btn_quite.setText("静音");
                    }
                    break;
            }
        }
    }

    代码还是非常简单的,另外设置静音的方法setStreamMute()在API 23版本过期, 可以使用另一个方法adjustStreamVolume(int, int, int),然后第三个属性设置:

    ADJUST_MUTE 或 ADJUST_UNMUTE!

    对了,还有:

    如果adjustStreamVolume()的第三个参数你设置了振动(Vibrator), 需要在AndroidManifest.xml中添加这个权限哦!

    <**uses-permission android:name="android.permission.VIBRATE"**/>

    本节小结:

    好的,本节给大家演示了AudioManager用于调节音量的一个简单用法,这个类笔者也不常用 到,以后如果有什么新get的技能再加上吧~嘿嘿,静音Demo写好没?要结合实际需求哈~

    另外,本周博客可能不会更新得太频繁,本周要把公司的WebSocket库替换掉,有得头痛了~ 好的,就说这么多,谢谢~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    位列 Artificial Analysis 榜首 阿里千问发布语音合成大模型 Qwen-Audio-3.0-TTS
    位列 Artificial Analysis 榜首 阿里千问发布语音合成大模型 Qwen-Audio-3.0-TTS

    阿里千问近日发布语音合成大模型,包含闪速版与增强版两大版本。增强版在人工智能分析榜单夺冠,支持细粒度标签控制、十六种语言、二十种方言,音频采样率提升至四十八千赫兹,单次合成最长三分钟。

    HTML5视频播放标签video和音频播放标签audio标签的正确用法
    HTML5视频播放标签video和音频播放标签audio标签的正确用法

    HTML5的video和audio标签通过controls属性提供控制条,支持autoplay、loop和preload缓存策略。使用多个source元素应对不同浏览器格式兼容。JavaScript可控制播放、暂停、定位及终止下载。通过URL片段语法指定播放范围,poster属性设置视频封面,error事件处理加载失败。

    为什么Safari浏览器的Web Audio API在设备静音模式下完全没有声音?
    为什么Safari浏览器的Web Audio API在设备静音模式下完全没有声音?

    先抛结论:在iOS/macOS系统里,只要设备处于静音模式,Web Audio API就是不出声的。这不是代码的问题,是底层音频路由直接把它给拦截了。所以,解决问题的路径只有三条:要么先把静音关掉,要么确保AudioContext是在用户手势之后创建的,要么干脆换方案,用HTML5的audio标签。

    win10 64位Realtek HD Audio音频驱动怎么设置
    win10 64位Realtek HD Audio音频驱动怎么设置

    Win10系统可通过Realtek高清晰音频管理器优化音质。依次进入控制面板打开管理器,在扬声器设置中调整喇叭组态、音效、室内校正和默认格式。重点包括选择立体声环境、启用耳机虚拟化、设置均衡器为“无”,并将默认格式调整为高采样率选项如“24位,48000Hz”。完成基础设置后可提升声音细节与层次感。

    win10安装Realtek HD Audio音频驱动失败怎么办
    win10安装Realtek HD Audio音频驱动失败怎么办

    Windows10安装Realtek音频驱动失败时,可依次尝试以下步骤:首先在控制面板中彻底卸载旧版驱动;随后重启电脑,在设备管理器中扫描检测硬件改动;最后从可靠来源下载并安装最新版驱动,按提示完成安装后重启即可。

    Win10如何重新安装Realtek HD Audio音频驱动
    Win10如何重新安装Realtek HD Audio音频驱动

    电脑无声时,可尝试重装Realtek高清音频驱动。在设备管理器中找到该设备,右键卸载并勾选删除驱动程序。重启后,前往官网下载对应系统版本的最新驱动,安装完成再次重启即可恢复声音。

     两款新品齐发,MEZE AUDIO 为耳机发烧友带来全新听觉盛宴
    两款新品齐发,MEZE AUDIO 为耳机发烧友带来全新听觉盛宴

    2024年8月20日,「伯韵聆动,熠熠双奏/DuetSymphonyofMEZE」2024MEZEAUDIO线上新品发布会圆满结束,发布会全程在微信视频号(帝捷电子科技)和哔哩哔哩(帝捷科技)直播进行。广州帝捷电子科技有限公司的总经理王朝阳先生、销售经理邓静女士作为特邀代表出席了本次发布会,MEZEAUDIO的创始人AntonioMeze先生和多名音频业内嘉宾也以视频的形式参与其中。众多音频爱好者们共同见证了MEZEAUDIO两款备受瞩目的新品——LIRIC二代和ALBA的正式上市,为广大音频爱好者带来了

    如何在 Windows 10 和 11 上重新安装最新的 Realtek 高清音频管理器
    如何在 Windows 10 和 11 上重新安装最新的 Realtek 高清音频管理器

    瑞昱高清音频管理器是一种轻松控制和快速调整音频适配器的便捷方式。更重要的是,它会自动检测新添加的音频配件,让您的音频设置更加方便。它还具有许多音乐爱好者每次都会发现有用的功能,从噪音抑制和回声消除到录音机等等。但是,它就像其他有时会遇到问题的程序一样。如果您是最近发现Windows系统上缺少它的人之一,有一个简单的解决方法:在您的Windows中下载并重新安装RealtekHDAudioManager。大多数Windows机器都安装了RealtekHDAudioMan

    如何在 Apple AirPods 上使用空间音频
    如何在 Apple AirPods 上使用空间音频

    如何在AirPods上配置空间音频一旦您拥有上面显示的允许SpatialAudio兼容性的所有内容,就可以开始享受它了。好消息是AppleMusic支持SpatialAudio。要在兼容的AirPods上通过AppleMusic使用SpatialAudio:确保您的AirPods已连接到您的iPhone。如果没有,请打开蓝牙(如果尚未打开),打开iPhone附近的外壳,然后按照屏幕上的说明进行操作。打开“设置”并选择列表顶部附近的AirPods设置。在屏幕上向下滑动

    Apple Music 推出带有 Spatial Audio 的新 DJ 混音
    Apple Music 推出带有 Spatial Audio 的新 DJ 混音

    AppleMusic今日推出了一套以杜比全景声(DolbyAtmos)录制的新DJ混音,让AppleMusic订阅者能够聆听SpatialAudio中的混音。你可以在这里听第一个。每个月都会推出新的SpatialAudio混音。除了发布之外,Apple还重新发布了“OneMix”系列,展示了来自世界各地的最佳DJ。第一个SpatialAudio混音来自technoDJJeffMills,题为OutertoInnerAtmosphere:TheEs

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。