searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Android音频播放开发

2024-06-17 04:09:06
4
0

1、android音频通道

     android系统按照使用场景的不同,区分不同的通道模式,主要有媒体音,通话音和铃声。媒体音主要应用于音乐和视频播放的,具有高清晰度的特点。通话音主要用于语音通话的场景,具有背景降噪、回声消除,自动增益的3A算法,但在音质方面相比媒体音较差,采样率低于16k。android应用开发切换两种音频通道的代码如下:

AudioManage audiomanage = context.getSystemService(Context.AUDIO_SERVICE)
audiomanage.mode = AudioManager.MODE_NORMAL ; //媒体音
audiomanage.mode = AudioManager.MODE_IN_COMMUNICATION ;   //通话音

同时在创建AudioTrack时,将streamType置为STREAM_VOICE_CALL

 

2、音频播放

     系统上层提供音频播放的 API: AudioTrack,另外如果是c++开发,安卓系统也支持OpenSL的音频播放协议。下面将介绍AudioTrack,AudioTrack是java层音频播放接口,其提供了音频播放,音频流样式选择,音量调节、和音频设备选择功能。

2.1、音频播放

     首先创建AudioTrack实例 

AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setLegacyStreamType(AudioManager.STREAM_MUSIC) //媒体音
                    .build();
            AudioFormat audioFormat = new AudioFormat.Builder()
                    .setSampleRate(48000)  //采样率48k
                    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)  //PCM_16位编码格式
                    .setChannelMask(AudioFormat.CHANNEL_IN_STEREO)  //双声道
                    .build();
            AudioTrack audioTrack = new AudioTrack(audioAttributes, audioFormat, 1024,
                    AudioTrack.MODE_STREAM, AudioManager.AUDIO_SESSION_ID_GENERATE);
            if (audioTrack.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
                audioTrack.play();
            }

 

2.2 播放

//同步写数据
            byte[] audioData = new byte[1024];
            audioTrack.write(audioData, 0, 1024);

2.3 调节音量

audioTrack.setVolume(1); //设置音量

2.4 设置音频设备

AudioManager audioManager = context.getSystemService(Context.AUDIO_SERVICE);
            AudioDeviceInfo[] audioDeviceInfos = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                audioTrack.setPreferredDevice(audioDeviceInfos[0])
            }

2.5 释放播放器

audioTrack.flush();  
audioTrack.release(); //释放
0条评论
0 / 1000
c****m
1文章数
0粉丝数
c****m
1 文章 | 0 粉丝
c****m
1文章数
0粉丝数
c****m
1 文章 | 0 粉丝
原创

Android音频播放开发

2024-06-17 04:09:06
4
0

1、android音频通道

     android系统按照使用场景的不同,区分不同的通道模式,主要有媒体音,通话音和铃声。媒体音主要应用于音乐和视频播放的,具有高清晰度的特点。通话音主要用于语音通话的场景,具有背景降噪、回声消除,自动增益的3A算法,但在音质方面相比媒体音较差,采样率低于16k。android应用开发切换两种音频通道的代码如下:

AudioManage audiomanage = context.getSystemService(Context.AUDIO_SERVICE)
audiomanage.mode = AudioManager.MODE_NORMAL ; //媒体音
audiomanage.mode = AudioManager.MODE_IN_COMMUNICATION ;   //通话音

同时在创建AudioTrack时,将streamType置为STREAM_VOICE_CALL

 

2、音频播放

     系统上层提供音频播放的 API: AudioTrack,另外如果是c++开发,安卓系统也支持OpenSL的音频播放协议。下面将介绍AudioTrack,AudioTrack是java层音频播放接口,其提供了音频播放,音频流样式选择,音量调节、和音频设备选择功能。

2.1、音频播放

     首先创建AudioTrack实例 

AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setLegacyStreamType(AudioManager.STREAM_MUSIC) //媒体音
                    .build();
            AudioFormat audioFormat = new AudioFormat.Builder()
                    .setSampleRate(48000)  //采样率48k
                    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)  //PCM_16位编码格式
                    .setChannelMask(AudioFormat.CHANNEL_IN_STEREO)  //双声道
                    .build();
            AudioTrack audioTrack = new AudioTrack(audioAttributes, audioFormat, 1024,
                    AudioTrack.MODE_STREAM, AudioManager.AUDIO_SESSION_ID_GENERATE);
            if (audioTrack.getPlayState() != AudioTrack.PLAYSTATE_PLAYING) {
                audioTrack.play();
            }

 

2.2 播放

//同步写数据
            byte[] audioData = new byte[1024];
            audioTrack.write(audioData, 0, 1024);

2.3 调节音量

audioTrack.setVolume(1); //设置音量

2.4 设置音频设备

AudioManager audioManager = context.getSystemService(Context.AUDIO_SERVICE);
            AudioDeviceInfo[] audioDeviceInfos = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                audioTrack.setPreferredDevice(audioDeviceInfos[0])
            }

2.5 释放播放器

audioTrack.flush();  
audioTrack.release(); //释放
文章来自个人专栏
chenwa的Android学习
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0