Android低仿iOS Messages录音波形效果

一、目标

分析iOS Messages的录音波形效果,为神马笔记添加录音功能做准备。

二、功能分析

1. iOS Messages的波形效果

iOS Messages有2个波形效果

  1. 录音波形
  2. 播放波形
    在这里插入图片描述

2. 录音波形

截图 说明
在这里插入图片描述 波形从右向左移动,在左侧逐渐收敛。
在这里插入图片描述 左侧的收敛过程非常漂亮。
高度、宽度、位移同时进行收敛,形成一个非常漂亮的动态过程。

三、实现效果

实现录音波形效果最大的难度在于实现波形的收敛过程。

尝试了同时收敛高度、宽度和位移的几种方案,效果都不是很理想。

达不到iOS Messages的收敛效果,最后只是简单收敛了高度,宽度和位移保持不变。
在这里插入图片描述

四、实现过程

1. 录制音频

音频录制采用MediaRecorder方式,实现简单并且符合神马笔记的使用场景。

public boolean start() {
   
  boolean result = true;

  {
   
    sampler.clear();
    waveform.clear();
  }

  {
   
    mRecorder = new MediaRecorder();

    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

    mRecorder.setAudioChannels(1);
    mRecorder.setAudioSamplingRate(44100);
    mRecorder.setAudioEncodingBitRate(192000);

    mRecorder.setOutputFile(targetFile.getAbsolutePath());
  }

  try {
   
    mRecorder.prepare();
    mRecorder.start();

    mStartingTimeMillis = System.currentTimeMillis();
    mElapsedMillis = 0;

  } catch (IOException e) {
   
    e.printStackTrace();

    mRecorder.stop();
    mRecorder.release();
    mRecorder = null;

    result = false;
  }

  {
   
    this.invalidate();
  }

  return result;
}

2. 波形采样

波形数据通过调用MediaRecorder#getMaxAmplitude()获取。

public static class Sampler {
   

  int rate; // sample rate per second
  int interval; // sample interval in milliseconds

  int[] array;
  int size;

  public Sampler(int rate) {
   
    this.rate = rate;
    this.interval = 1000 / rate;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值