本文主要是介绍Android高仿iOS Messages声音播放波形效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Android高仿iOS Messages声音播放波形效果
- 一、目标
- 二、功能分析
- 三、实现效果
- 四、实现过程
- 1. 创建波形
- 2. Waveform
- 3. Wave
- 4. 播放声音
- 五、开发过程回顾
- 六、接下来
- 七、Finally
文接《Android低仿iOS Messages录音波形效果》。
上一次开发中,因为无法完美实现波形的收敛效果,因此只能算是一个低仿的版本。
声音波形效果对比之下,比较容易实现。
一、目标
实现声音播放的波形效果,为神马笔记增加录音及播放功能做准备。
二、功能分析
截图 | 描述 |
---|---|
停止时的波形显示为全白色。 | |
播放过程中,波形有暗变亮,以呈现进度。 |
三、实现效果
基本上实现了播放的波形效果。
四、实现过程
1. 创建波形
绘制波形的前提条件是有波形数据。
波形数据的来源有2种。
- 从音频文件读取数据,然后转换为波形数据
- 录音时进行采样保存
通过MediaRecorder
实现录音时,通过getMaxAmplitude()
获取最近最大的振幅,通过一段时间的连续调用,最终可以组成一个波形数据。
有了波形数据后,还需要根据控件大小转换为目标数据。
2. Waveform
从波形数据创建Waveform
,用来显示完整波形。
sample()
是Waveform
的核心方法,实现转换波形数据的功能。
/****/
private static class Waveform {ArrayList<Wave> list;ArrayList<Wave> recycler;TapePlayView parent;Waveform(TapePlayView parent) {this.parent = parent;this.list = new ArrayList<>(100);this.recycler = new ArrayList<>(100);for (int i = 0; i < 100; i++) {recycler.add(new Wave());}}void clear() {this.recycler.addAll(list);list.clear();}void sample() {this.recycler.addAll(list);this.list.clear();int count = parent.getWidth() / parent.getWaveWidth();if (count == 0) {
这篇关于Android高仿iOS Messages声音播放波形效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!