您当前的位置: 首页 >  ios

韩曙亮

暂无认证

  • 2浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android 高性能音频】AAudio 音频流 读写操作 ( 音频流读写数据 | 阻塞时间设定 | 注意事项 | AAudioStream_read | AAudioStream_write )

韩曙亮 发布时间:2019-11-27 16:53:01 ,浏览量:2

文章目录
        • I . AAudio 音频流 读写操作 简介
        • II . AAudio 音频流 读写操作 阻塞时间设定
        • III . AAudio 音频流 读取 固定帧数 操作 注意点
        • IV . AAudio 音频流 写出音频数据 操作 注意点
        • V . AAudio 音频流 读取方法 AAudioStream_read 原型
        • VI . AAudio 音频流 读取方法 简介
        • VII . AAudio 音频流 写出方法 AAudioStream_write 原型

I . AAudio 音频流 读写操作 简介

1 . 创建 AAudio 音频流 : 使用 AAudio 音频流构建器 AAudioStreamBuilder 创建 AAudio 音频流后 , 调用 AAudioStreamBuilder_openStream 打开 AAudio 音频流 , 此时音频流正式创建 ;

2 . 开启 AAudio 音频流播放 : 调用 AAudioStream_requestStart 方法 , 即可开始 AAudio 音频流的播放 ;

3 . 读写操作前提 ( Started 状态 ) : 当 AAudio 处于 Started 状态后 , 便可进行 AAudio 音频流的读写操作 ;

4 . 读写操作函数 :

  • ① 读取操作 : 从 AAudio 音频流中读取数据到内存中 , AAudioStream_read(stream, buffer, numFrames, timeoutNanos) ;
  • ② 写出操作 : 将内存中的数据写出到 AAudio 音频流中 , AAudioStream_write(stream, buffer, numFrames, timeoutNanos) ;

5 . 读写数据格式 : AAudio 音频流读写数据的格式 , 与 AAudioStream_getDataFormat() 方法返回的格式 的 采样率 , 样本格式 必须一致 , 否则会出错 ;

II . AAudio 音频流 读写操作 阻塞时间设定

阻塞时间设定 :

  • ① 指定帧数读写 : 如果要读写固定帧数的数据 , 需要设置一个大于 0 的超时时间 , 因为可能会在很长时间内无法读取到足够的数据 , 而一直阻塞 , 导致程序无法执行下去 , 这里设置一个超时时间避免这种情况发生 ;
  • ② 不限定帧数读写 : 如果读写数据不限定帧数 , 则可以将超时时间设置成 0 , 读写的帧数就是实际操作的帧数 ;
III . AAudio 音频流 读取 固定帧数 操作 注意点

AAudio 音频流数据读取 :

  • ① 帧数验证 : 从 AAudio 音频流中读取数据时 , 需要验证当前读取的帧数 ;
  • ② 超时读取 : 如果读取时在超时时间内未能读取到指定 的 numFrames 帧数的数据 , 则也会继续执行, 此时 audioData 中除了读取的数据之外 , 还有一部分未知数据 ;
  • ③ 未知数据 : 因为读取的数据中可能包含未知数据 , 如果将未知数据当做音频采样数据 , 会造成不可预知后果 , 出现电流等干扰 ;
  • ④ 处理方法 : 将非读取的数据使用 0 填充 , 这些数据播放出来就是静音的效果, 没有意外的电流或杂音 ;
  • ⑤ 代码示例 : 设定读取 numFrames 帧数据到 audioData 指针指向的内存中 , 如果 timeout 纳秒内还没读取完毕 , 继续执行下面的代码 , 之后首先判定是否完整读取了 numFrames 帧的数据 , 如果读取了帧数小于 numFrames 需要将后半部分的随机数据设置为 0 ;
//读取 numFrames 帧数据 , 如果帧数不够则一直阻塞 , 直到 timeout 毫秒后 超时 , 然后才能解除阻塞继续执行 ;
aaudio_result_t result =
    AAudioStream_read(stream, audioData, numFrames, timeout);
 
//如果出现了错误 , 进行错误处理逻辑 ;
if (result             
关注
打赏
1663594092
查看更多评论
0.0405s