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

博主在这里怀着对雷霄骅最高的敬意修复了雷神的一点点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]
关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题_第1张图片
1924年奈奎斯特(Nyquist)推导出在理想低通信道的最高码元传输速率的公式。
1928年美国电信工程师H.奈奎斯特推出采样定理,因此称为奈奎斯特采样定理。
1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。
1948年信息论的创始人C.E.香农对这一定理加以明确地说明并正式作为定理引用,因此在许多文献中又称为香农采样定理。采样定理有许多表述形式,但最基本的表述方式是时域采样定理和频域采样定理。
采样定理在数字式遥测系统、时分制遥测系统、信息处理、数字通信和采样控制理论等领域得到广泛的应用。

奈奎斯特采样定理
以下为该篇博客的详情:
香农采样定理(奈奎斯特采样定理)
月疯
于 2022-03-31 12:02:50 发布
定义:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。
关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题_第2张图片

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

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

关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题_第4张图片

网上找到图片

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

举个例子:
关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题_第5张图片

采样定理的作用和意义:

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

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

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

你可能感兴趣的:(c++,ffmpeg,音视频,c++)