Operating system 两个以上的音频程序如何在一个扬声器上同时发声?

Operating system 两个以上的音频程序如何在一个扬声器上同时发声?,operating-system,resource-management,Operating System,Resource Management,我在学习操作系统时有个问题 据我所知,操作系统是一种资源管理器,在我的电脑中运行的音频程序将使用扬声器作为资源。所以音频程序将使用操作系统分配的扬声器 当我在PC上执行两个以上的音频程序时,扬声器会同时发出声音 我想知道这是什么机制。当进程处于运行和就绪状态时,它们是否持有和释放资源?或者进程通过操作系统共享资源?多个声音可以额外混合在一起。对于软件来说,这主要意味着一个小的样本缓冲区,在将结果发送给扬声器之前,在其中添加(饱和)来自2个或更多数字化音频流的样本。当然,声卡本身也可能能够进行这种

我在学习操作系统时有个问题

据我所知,操作系统是一种资源管理器,在我的电脑中运行的音频程序将使用扬声器作为资源。所以音频程序将使用操作系统分配的扬声器

当我在PC上执行两个以上的音频程序时,扬声器会同时发出声音


我想知道这是什么机制。当进程处于运行和就绪状态时,它们是否持有和释放资源?或者进程通过操作系统共享资源?

多个声音可以额外混合在一起。对于软件来说,这主要意味着一个小的样本缓冲区,在将结果发送给扬声器之前,在其中添加(饱和)来自2个或更多数字化音频流的样本。当然,声卡本身也可能能够进行这种混音(在可处理的最大流数量上有一些特定于硬件的限制)


对于“PC扬声器”,不支持数字化声音或其他许多功能(它只支持“一次一个固定频率的音调”)。如果这就是你要问的,那么你可以(以相对较高的开销)使用脉宽调制(使用一对定时器)来强制它播放数字化声音,并且仍然在软件中进行混音。或者,您可以削弱音频,使其一次只出现一个音调(例如,如果有两个音调,请选择最高频率的音调或让其中一个等待另一个音调完成)。

非常感谢您的回答。那么声卡中是否存在小缓冲区?或者,如果软件中有小缓冲区,那么这是否意味着进程(而不是线程)共享小缓冲区?谁在小缓冲区中添加音频样本?操作系统执行还是扬声器(mcu?)执行?声卡可能有一个很小的缓冲区(特别是当数据流具有不同的采样率,并且它需要将一个数据流中的值保存的时间长于另一个数据流中的值时)。对于软件来说,因为CPU不能集中注意力(并且必须处理诸如IRQ和运行正常程序之类的事情),所以缓冲区必须足够大,以覆盖CPU集中注意力所需的时间(例如,如果声音的采样率为22 KHz或每秒22000个样本,CPU每100毫秒进行一次混音,那么CPU将需要一个足够大的缓冲区,至少可以容纳2200个样本)。对于软件混音,谁进行/在哪里进行都取决于操作系统的设计。我本人(作为微内核的粉丝)很想拥有一个“声音服务”作为一个进程运行,完成这类工作,然后将音频流发送到每个不同的声卡驱动程序。其他可能包括让每个独立的声卡驱动程序执行,或在库中执行,或在每个应用程序中执行。