最近项目中要用到AudioTrack来控制音量,但是尝试了很多次都没弄成功.

后来总算弄成功.

不错的却是通过AudioManager 和 AudioTrack来进行控制,但是有个注意事项.

就是他们的Stream_type必须匹配.

对于AudioTrack我个人做监控的时候,基本是来源于网络然后播放PCM数据,AudioTrack有2种初始化模型: MODE_STATIC,MODE_STREAM.

MODE_STREAM没write一次就要和NDK交互一次,比较耗费资源,但是MODE_STATIC就是事先分配一块固定的内存,以后大家只管往这块内存区塞入语音数据就可以了.

咱们在网络上接受数据然后播放通常采用的MODE_STREAM.

其实AudioTrack的setStereoVolume是可以控制音量的,但是这个音量的总量却是受AudioManager来管理的.

因此如果我们要控制AudioTrack的大小,首先通过AudioManager来调整音量.

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

intmax = audioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);

audioManager.adjustStreamVolume(AudioManager.STREAM_SYSTEM

, AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND) ;

intcurrent = audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);

audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);

这里需要特别主意的是 AudioManager的streamType

以后AudioTrack用的是MODE_STREAM,那么AudioMnager的streamType就要用AudioManger.STERAM_SYSTEM,这个专门用于控制播放流数据的,否则设置是无效的.

(秩名)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐