alsa的音频输出过程

alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中。alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer中取走period个音频数据帧输出到codec。

音频最后的数据不足一个period

alsa驱动从buffer中是按照一个完整的period个数据帧取走数据的,如果取走的一个period数据中,并不都是音频数据,可能有其他脏数据,那就可能在最后一帧产生噪音。

首先关于buffer和frame的概念还不知道的请参考:

https://huohongpeng.blog.csdn.net/article/details/116235192

具体举一个例子:

一个音频文件中包含10240个frame音频数据,alsa的硬件参数中period大小设置为1024。buffer大小是5120。那么应用程序通过snd_pcm_writei()每次向buffer中写入1024个frame音频帧,写入10次就将音频文件的数据全部送入到了buffer中(如果buffer没有空间应用会阻塞),然后alsa驱动每次从buffer中取走1024个frame,取走10次,这样音频就正常播放完成了。

但是如果音频文件中包含10246个frame音频数据,输入到buffer中的音频就是10个完整的period帧和一个不完整的只包含6个frame的period帧。所以alsa驱动要取11次才能把所有数据取走,而且最后一个period取走的时候,里面只包含了6个frame数据,其他1018个都是未定义的数据,这时候1018个数据输出到codec那就是产生噪声。如果想避免这个情况,应用层就需要将1018个frame填充为静音数据,然后发送给buffer。这样播放最后一个period的时候就不会有噪声了。生成静音数据的api是snd_pcm_format_set_silence().

alsa播放结束时的杂音问题相关推荐

  1. Ubuntu20.04 外接音响播放音频时出现杂音或滋滋滋电流声解决方法

    Ubuntu20.04 外接音响播放音乐时出现杂音解决方法 引言 在Ubuntu 20.04及以上版本中使用Pipewire. 更新系统内核等 安装最新的Pipewire库 用Pipewire替换Pu ...

  2. ALSA播放时杂音问题

    1.alsa的音频输出过程 alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中.alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer ...

  3. html5视频播放怎么结束,html5设置或返回音频/视频是否应该在结束时再次播放的属性loop...

    实例 将视频设置为循环播放:myVid=document.getElementById("video1");myVid.loop=true; 定义和用法 loop 属性设置或返回音 ...

  4. Glide加载webp动画及监听动画播放结束

    Glide加载图片非常方便,使用也非常广泛,但是并不能直接支持webp动图. 可能很多人会使用Fresco来加载webp,但是对于已经使用Glide的项目,总感觉再使用Fresco有点冗余,如果能用G ...

  5. 树莓派播放音频时3.5mm接口没有声音怎么办?

    树莓派有两种声音输出方式,一种是通过HDMI口外接有输出设备的显示器输出,另一种是通过3.5mm接口连接耳机或者音箱输出. 网上一查发现不少人会遇到树莓派播放音频时3.5mm接口没有声音的情况,建议先 ...

  6. 互联网晚报 | 11/28日 星期一 | 蜜雪冰城客服回应喝出虫子店家态度消极;抖音回应世界杯直播时出现杂音;微信内测新功能...

    蜜雪冰城客服回应喝出虫子店家态度消极 11月26日,有媒体报道,湖北仙桃蜜雪冰城被曝喝出虫子商家态度引争议.记者27日致电蜜雪冰城全国热线,客服表示:暂时还不了解这个情况,需要记录反馈一下.客服还记录 ...

  7. 解决 后台播放音乐时,设置手机铃声,后台音乐不会暂停

    2019独角兽企业重金招聘Python工程师标准>>> 手机后台播放音乐时,设置手机铃声,后台音乐不会暂停,此现象的为设置手机铃声界面,并没要加入播放的foucs机制, 此修改在pa ...

  8. [J2ME]Nokia播放音乐时发生MediaException的解决办法

     [J2ME]Nokia播放音乐时发生MediaException的解决办法 现象 在Nokia7610上播放音乐时遇到了-18的MediaException错误! J2ME中播放音乐资源的代码很容易 ...

  9. 计算机上播放时没声音什么故障,事实:在笔记本电脑上播放歌曲时如果没有声音怎么办...

    在笔记本电脑上播放时如果没有声音该怎么办?关于在笔记本电脑上播放时无声音的问题,有些网民仍然不知道该怎么办,所以让我告诉您如何在笔记本电脑上播放无声音时解决问题.希望我能为您服务!播放歌曲时,笔记本电 ...

最新文章

  1. java数值运算后精度丢失问题
  2. 深度优先搜索c语言详解,深度优先搜索 — C语言版
  3. 函数dup和dup2
  4. SpringBoot2 整合MinIO中间件,实现文件便捷管理
  5. Mysql/Mariadb本地不可以登录,远程可以登录问题的解决
  6. c语言的常用英语单词和翻译,c语言通用英语词汇带翻译
  7. php webm文件头,webm EBML文件头分析
  8. 永恒之蓝漏洞补丁-MS17010补丁列表KB号
  9. 震撼!七大议题全数入选!九州云与您相约温哥华
  10. 领域驱动设计落地经验
  11. 17-什么是资源服务器
  12. 如何将 Ubuntu 配置为Ap模式
  13. Snip ntrip caster差分数据传输,rtklib差分数据传输,rtk2go
  14. flv转换mp4最简单方法
  15. 1880-2010年间全美婴儿姓名
  16. JSON数据交互和RESTful支持
  17. 水木-如何解压.iso文件
  18. html help文档制作,HTML Help Workshop(文件制作工具)
  19. 超详细分析Windows变慢原因及解决方法
  20. MATLAB画区域专题地图(省边界)

热门文章

  1. Mac电脑如何开启任何来源选项?
  2. python中小于号的重载_Python操作符重载
  3. ArcGIS for Android 100.3.0(6):动态地图图层(ArcGISMapImageLayer和ArcGISMapImageSublayer)
  4. 微信小程序登录-手机号授权并获取手机号
  5. Qt Quick Qml 之QML与C++ 混合编程学习
  6. mupdf源码分析(一)简介
  7. python制作照片_Python-制作抖音图片
  8. 晚上十点以后发快手有影响吗?上热门有哪些技巧?
  9. 计算机网络出行711,请问电脑联网时总是出现:711 是什么意思啊?
  10. 六石编程学:抄代码是个技术活,大多数人不传抄