ALSA播放时杂音问题
1.alsa的音频输出过程
alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中。alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer中取走period个音频数据帧输出到codec。
2.音频最后的数据不足一个period
alsa驱动从buffer中是按照一个完整的period个数据帧取走数据的,如果取走的一个period数据中,并不都是音频数据,可能有其他脏数据,那就可能在最后一帧产生噪音。
3.具体举一个例子:
一个音频文件中包含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播放时杂音问题相关推荐
- 七、解决FFmpeg播放时杂音
一.播放杂音的原因 音频数据buff的大小不正确 SDL_MixAudio拷贝stream的数据有问题 二.解决方法 1. 音频数据buff的大小不正确(重采样后samples的大小发生了变化) 源代 ...
- alsa播放结束时的杂音问题
alsa的音频输出过程 alsa播放音频的原理通过snd_pcm_writei()等函数将音频数据写到alsa的buffer中.alsa启动播放以后,alsa驱动会产生中断,每次中断从buffer中取 ...
- androidwakelock_Android音频播放时wakelock的实现
音频播放时 wakelock 的实现 作者 :Macro Liu 功能描述 : 当播放音乐时,按电源键只需要进入 early suspend, 以保持音乐播放状态. 实现方法 : 在上层和内核都加 w ...
- 计算机上播放时没声音什么故障,事实:在笔记本电脑上播放歌曲时如果没有声音怎么办...
在笔记本电脑上播放时如果没有声音该怎么办?关于在笔记本电脑上播放时无声音的问题,有些网民仍然不知道该怎么办,所以让我告诉您如何在笔记本电脑上播放无声音时解决问题.希望我能为您服务!播放歌曲时,笔记本电 ...
- Android 播放raw文件夹下音频文件,本地MP3文件播放,播放云端MP3文件,获取MP3文件播放时长
1.复制音频文件到raw文件夹下 2.实例化音频文件 private final MediaPlayer.OnCompletionListener beepListener = new MediaPl ...
- C# 获取视频文件播放时长
以前是用xp (32位)系统,获取视频文件长度是通过调用Shell32.dll来读取文件信息得到的,最近换win7(32位)系统,编译以前的项目代码发现无法读取了,代码没有改动,拿到在xp下运行也不行 ...
- 音频播放时,将前台服务和通知栏关闭
正在播放音频下,退出登录或被挤下线等情况下,就要遇到下列情况 问题:播放时设置服务前台运行,创建一个消息通知栏 service.startForeground(NOTIFICATION_ID, new ...
- Potplayer关闭播放时的信息
Potplayer关闭播放时的信息 https://blog.csdn.net/datou1691/article/details/101549849 https://blog.csdn.net/xu ...
- c语言实现alsa播放
c语言实现alsa播放 c语言实现alsa录音 这个比较简单直接上代码 #include <alsa/asoundlib.h> #include <math.h>#define ...
最新文章
- 北京 10 年,难说再见!
- 微信小程序API·目录
- js 调用父窗口的方法
- javascript总结9:JavaScript三目运算符
- 测试眉形的有哪个软件_这五款自动化软件测试工具,你最喜欢用哪个?
- java rhino_在Java 8中使用Rhino
- 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
- 作者:刘新海(1976-),男,中国人民银行征信中心副研究员
- cefsharp irequesthandler_CefSharp请求资源拦截及自定义处理
- 眼睛-摄像 科技-文学
- 谈谈技术原则,技术学习方法,代码阅读及其他的(引用)
- 【数据分析】你一定要掌握的Python七种数据清洗方法
- PYPL 1 月 IDE 榜单:Visual Studio Code 猛追 IntelliJ
- Rushcrm:CRM系统中的进销存管理
- 如何将优酷独享视频kux格式转换成mp4视频
- mousewheel事件
- 浙大pat | 浙大pat乙级 1005~1008
- MySQL 8.0.29安装版安装教程
- SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案
- 51单片机外部中断使用示例程序