博主在这里怀着对雷霄骅最高的敬意修复了雷神的一点点bug。
雷神的以下博客,在播放时会造成卡顿。

最简单的基于FFmpeg的音频播放器系列文章列表:
《最简单的基于FFMPEG+SDL的音频播放器》

————————————————
版权声明:本文为CSDN博主「雷霄骅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leixiaohua1020/article/details/10528443

简言之,就是雷霄骅博士的博客在播放的时候,会有杂音,杂音听起来像是兹拉兹拉的声音。
经过作者的多次实验,最终修复了雷神的一点小小的bug。
修复方法如下:

关于杂音的问题:
while(audio_len>0) SDL_Delay(1);
应该改为
while(audio_len>0) SDL_Delay(0.5);
这样就不会有兹啦啦的声音。有杂音的原因是 SDL_Delay(1);会让回调延迟1毫秒,导致播放延迟,就会感觉不连贯。把延迟缩短为SDL_Delay(0.5);这样不会导致播放延迟,就会感觉连贯了。SDL_Delay(0.5)并不是必须要是0.5ms,你也可以试试别的延迟时间。反正只要保证播放不延迟即可。
事实证明你把延迟改为SDL_Delay(0.9)都可以无杂音播放,但只要延迟SDL_Delay(1)>=1ms时,就会出现卡顿。
你可以用采样定理理解为什么必须要SDL_Delay()至少为0.9。那是因为
while(audio_len>0) SDL_Delay();
作为主线程的阻塞代码,在等待线程播放音频流的时候,如果SDL_Delay()的时间太长,就会导致在SDL_Delay()的期间,音频播放线程就已经播放结束了,导致卡顿,不连贯。所以你必须把SDL_Delay()的时间变短,应用采样定理,这样才可以让音频播放线程播放结束后,马上开启新的播放,无缝衔接,这样才不会卡顿。

附录奈奎斯特采样定理:

采样定理是E.T.Whittaker(1915)、Kotelnikov(1933)、Shannon(1948)提出的,在数字信号处理领域中,采样定理是连续时间信号(通常称为“模拟信号”)和离散时间信号(通常称为“数字信号”)之间的基本桥梁。该定理说明采样频率与信号频谱之间的关系,是连续信号离散化的基本依据。 它为采样率建立了一个足够的条件,该采样率允许离散采样序列从有限带宽的连续时间信号中捕获所有信息。
采样过程所应遵循的规律,又称取样定理、抽样定理。采样定理说明采样频率与信号频谱之间的关系,是连续信号离散化的基本依据。
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍;采样定理又称奈奎斯特定理。 [1]
如果对信号的其它约束是已知的,则当不满足采样率标准时,完美重建仍然是可能的。 在某些情况下(当不满足采样率标准时),利用附加的约束允许近似重建。 这些重建的保真度可以使用Bochner定理来验证和量化。 [2]

1924年奈奎斯特(Nyquist)推导出在理想低通信道的最高码元传输速率的公式。
1928年美国电信工程师H.奈奎斯特推出采样定理,因此称为奈奎斯特采样定理。
1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。
1948年信息论的创始人C.E.香农对这一定理加以明确地说明并正式作为定理引用,因此在许多文献中又称为香农采样定理。采样定理有许多表述形式,但最基本的表述方式是时域采样定理和频域采样定理。
采样定理在数字式遥测系统、时分制遥测系统、信息处理、数字通信和采样控制理论等领域得到广泛的应用。

奈奎斯特采样定理
以下为该篇博客的详情:
香农采样定理(奈奎斯特采样定理)
月疯
于 2022-03-31 12:02:50 发布
定义:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。

香农采样定理,又称奈奎斯特采样定理,是信息论,特别是通讯与信号处理学科中的一个重要基本结论。采样是将一个信号(即时间或空间上的连续 函数)转换成一个数值序列(即时间或空间上的离散函数)。采样得到的离散信号经保持器后,得到的是阶梯信号,即具有零阶保持器的特性。如果信号是带限的,并且采样频率高于信号最高频率的一倍,那么,原来的连续信号可以从采样样本中完全重建出来。公式为:fs≥2fmax。采样率越高,稍后恢复的波形就越接近原信号,但是对系统的要求就更高,转换电路必须具有更快的转换速度。

分别是采样频率大于、等于和小于奈奎斯特采样的情况,小于的情况下直接出现了混叠。

网上找到图片

所以说:采样定理是连续信号和离散信号之间的桥梁。

举个例子:

采样定理的作用和意义:

   采样过程所应遵循的规律,又称取样定理、抽样定理。采样定理说明采样频率与信号频谱之间的关系,是连续信号离散化的基本依据。采样定理是1928年由美国电信工程师H.奈奎斯特首先提出来的,因此称为奈奎斯特采样定理。1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。1948年信息论的创始人C.E.香农对这一定理加以明确地说明并正式作为定理引用,因此在许多文献中又称为香农采样定理。采样定理有许多表述形式,但最基本的表述方式是时域采样定理和频域采样定理。

采样定理在数字式遥测系统、分时制遥测系统、信息处理、数字通信和采样控制理论等领域得到广泛的应用。
————————————————
版权声明:本文为CSDN博主「月疯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chehec2010/article/details/123865626

个人感想:
本文不想再这里参杂任何政治性的讨论。诚然,美国在上世纪开启了信息化革命,但是苏联的科学家们做出了更多贡献。
如果完全否定苏联科学家的贡献,那真的就是心胸狭隘。美国各界甚至包括影视界都在诋毁苏联,否定加加林。个人觉得这真的是一种心胸狭隘的表现。
事实证明,科学无国界是很难的。

关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题相关推荐

  1. 沉痛哀悼雷霄骅博士!

    今天下班后打开QQ群,看到惊人的噩耗,群主雷霄骅博士已于上个月离开了我们!看到新闻报道,我们都怀疑是假新闻.但却不幸是确切的消息.如此大神,如此年经,竟如此不经意地走了!英年早逝,痛心!痛惜! 国内做 ...

  2. 学习雷霄骅博士博客之分离YUV420P像素数据中的Y、U、V分量时遇到的问题及对应

    今天算是正式的第一天开始这方面的学习,以前在公司没活干就很难受,现在则不会了,FFmpeg让我有种焕发第二春的感觉,第一次这种感觉是学习嵌入式C linux等的时候.必须要感谢前辈的引路,告诉我有这么 ...

  3. 沉痛悼念CSDN博主、年仅26岁的音视频专家雷霄骅

    CSDN的老朋友.连续两届CSDN博客之星.微软MVP.博客排名52位.在中国传媒大学通信与信息系统专业攻读博士的雷霄骅,于2016年7月17日凌晨猝死在学校主楼五层,并于7月23号安葬.据相关报道称 ...

  4. 纪念音视频界前辈-雷霄骅

    这是一篇记录文,纪念一位在音视频领域研究的博士雷霄骅. 雷霄骅生前是中国传媒大学通信与信息系统博士在读生,于2016年7月17日凌晨猝死在学校主楼五层,10月就将迎来自己26岁的生日. 雷霄骅在音视频 ...

  5. 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)

    基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅) 前几天写了几篇关于ffmpeg 编程转封装的入门文章,下一步本来是要写转码或者编码的.但是发现无论是转码还是编码,都会遇到图像像素格式 ...

  6. 基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅)

    基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅) 本文参考了雷博士的博客: 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265)) 还参考了另一篇博客: ...

  7. 天妒英才,雷霄骅走了。

    昨晚通过业内自媒体才知道雷霄骅去世的消息. 震惊,天妒英才,不夸张的说,如果不知道雷霄骅,可能你音视频还没入门. 在当今音视频编解码封闭技术领域,你专注,勤奋,分享,传播,奉献.在中文音视频技术圈留下 ...

  8. 雷霄骅开源视音频项目汇总

    from: http://blog.csdn.net/leixiaohua1020/article/details/42658139# 作者:雷霄骅, 一个值得怀念的人 本文汇总一下自己视音频编解码学 ...

  9. java opencv 轮廓检测,OpenCV 轮廓检测 - 雷霄骅(leixiaohua1020)的个人页面 - OSCHINA - 中文开源技术交流社区...

    使用OpenCV可以对图像的轮廓进行检测.这是之前用过的代码,挺简单的,回顾一下.主要要进行以下2步操作: 1.cvThreshold():对图像进行二值化处理 2.cvFindContours(): ...

  10. 静态博客网页中的网易云音乐播放器

    见我的博客 https://blog.wyue.site/2020/04/12/1/ 转载前请联系我,联系方式请见我博客 https://blog.wyue.site/ 一直想做个博客中的音乐播放器, ...

最新文章

  1. ubuntu下安装redis
  2. c#中WebBrowser控件的使用方法
  3. LeetCode5382. HTML 实体解析器
  4. .Net开源工作流Roadflow的使用与集成
  5. 怒卸python3.4.1
  6. ./ffmpeg: error while loading shared libraries: libx264.so.138: cannot open shared object file: No s
  7. 【迁移2018-05-08 14:14:27】全局唯一ID生成
  8. PHP set_error_handler()函数的使用【转载】
  9. 1 | GNN基础理论
  10. python系统下载-pythonox下载
  11. Lightroom Classic mac版怎样创建全景图和HDR全景图?
  12. Flex应用性能优化
  13. android开发笔记之多媒体—播放音频(音乐)
  14. C语言数据结构与算法-------查找(二)哈希法
  15. MYSQL圆角矩形表示_圆角矩形“RoundRectShape”使用详解
  16. win10 添加打印机页面打不开,闪一下就没有了 怎么办
  17. 暄桐教室的50本必读书 | 39《前朝梦忆》
  18. Web漏洞-XXE漏洞(详细)
  19. 线性时不变(LTI)系统
  20. 为什么高频交易被俄罗斯人垄断?

热门文章

  1. Visual C++课程设计选题
  2. 苏州外壳防护试验IP防尘防水测试IP65 IP66 IP69K
  3. 本周赠书:卓有成效的工程师
  4. vmware 桌面 服务器版,VMware Workstation
  5. php李炎恢第二季视频_李炎恢PHP视频教程第二季资源推荐
  6. GANs(生成对抗网络)简介与案例
  7. 第三篇: DDcGAN-用于多分辨率图像融合的双判别器生成对抗网络
  8. 清华学生的编程能力有多强?大一学生 C++作业引爆全网,特奖得主、阿里P6:我们也做不到...
  9. rapidminer java_在Java应用程序RapidMiner的整合(Integration of RapidMiner i
  10. godspeed机器人_cs1.6kz地图包下载