为什么播放音频不会停止其他任务?


10

如果处理器一次只能执行一件事情,那么我怎么能连续播放音乐却仍然能够执行其他任务?

我了解中断系统,但不是不要求CPU持续处理音频以使其听起来不那么抖动/迟钝吗?

我问的是底层实现,这个问题与多线程有关吗?1核1线程CPU如何实现这种多任务处理?


我能理解“紧张”,但是“松懈”的声音听起来像什么?(PS,我的iPod nano的FM调谐器输出比调谐到同一电台的模拟FM广播的输出滞后大约四分之一秒,但是如果我只听iPod,我听不到延迟。)
所罗门慢

@jameslarge如果您正在玩电子游戏,那么声音滞后四分之一秒之类的东西就会非常明显。视频会议也是如此。
德里克·埃尔金斯

3
正如Ariel的答案所指出的,即使是相当老的CPU也具有足够的处理能力来处理此任务。但是,我非常确定,音频协处理器已经并且将继续处理此任务。然后,CPU的工作就是简单地填充音频协处理器缓冲区,这不需要CPU进行任何“连续”处理,尤其是对于音乐,其中所有数据都是预先可用的。
德里克·埃尔金斯

我会选择DMAC,声卡处理单元和缓冲区。
Evil

Answers:


9

由于CPU以固定的时钟周期工作,因此没有什么是真正连续的,只是因为离散化足够灵敏,所以看起来是连续的。

假设您的CPU时钟速率为。如果CPU仅将时钟周期中的一个专门用于处理音频(并将剩余的时钟周期用于无关的任务),则在执行的每个“音频处理任务”之间将有的延迟由cpu执行(为简单起见,我们假设cpu仅使用一个时钟周期执行此处理)。1GHz=109Hztt109s

假设我们允许的延迟(人类听到的频率在20Hz到20Khz范围内,因此人类的听力对这种延迟不敏感),那么我们需要要求,因此CPU可以同时处理以上的任务,同时保持的延迟。105st<104104105s


8

40年前,您可能有一台计算机,其中CPU直接控制扬声器。那些日子早已过去。

您可能有一台带有原始声卡的计算机。这样的声卡将具有一个用于立体声音频样本的缓冲区,该缓冲区可以被填充,输出功能将被启动,并且声卡开始从其缓冲区中的样本生成音频,而无需CPU做任何事情。CPU所需要做的就是在缓冲区用完之前用更多的音频样本填充缓冲区。如果您有一个1兆字节的缓冲区,则CD品质的250,000个立体声样本大约需要6秒钟。因此,每隔几秒钟,CPU必须再次填充这些缓冲区。

实际上,您的计算机将具有更高级的功能。原则上是相同的,但是缓冲区可以直接以mp​​3或aac格式的声音填充,例如,声卡会自行将这些数据解码为立体声样本。它很可能可以进行编程以产生各种不同的效果,例如音量,改善音质,独立改变音高或速度,产生环绕声等等。

CPU并没有做太多事情,只是不时地填充声音缓冲区。其余的工作由其他方式完成。当然,当我说“声卡”时,它们已经从声卡缩小到芯片,再到具有许多不同功能的大型芯片上的晶体管斑点。

对于此类卡的制造商,请参阅https://en.wikipedia.org/wiki/Wolfson_Microelectronics作为起点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.