百科问答小站 logo
百科问答小站 font logo



音频程序是如何在现代操作系统抢占式时间分片机制下持续输出信号的? 第1页

  

user avatar   yang-leonier 网友的相关建议: 
      

一般播放PCM是异步回调机制,系统通知应用程序缓冲区播放完了,应用程序往缓冲区里面写新数据。Windows从最早Windows 3.0 MME的MMSYSTEM接口开始就是这样的了。


user avatar   lu-zheng-yang-23 网友的相关建议: 
      

先说一下我的水平很差,只是做一些概念上的讨论。如果你认为我讲的不对,欢迎指正和讨论。

首先,计算机内部没有一个真正的“连续”时间的概念。计算机的本质是数字系统,它的时间和空间都是离散的。

比如说CD音质,16bit,双声道,44100Hz的音频,那就是每秒钟输出44100个32bit的数据。理论来说,CPU只需要每秒钟输出44100次数据就行了。假设CPU是3GHz的时钟,那么也就是大约68000个时钟输出一次。

试想一个音乐播放软件,它在硬盘上读取FLAC音频文件后,通过解码器将其转换成LPCM存储在内存里。基本上,没有任何现代的良好设计的音乐播放器会在内存里完整存储一首歌解码后的内容,可能最多就是几秒钟的buffer。存储全部的数据是非常没有意义且浪费CPU的运算能力的。

对于以GHz计算的CPU来说,I/O的时间几乎相当于无限长。CPU不会等待I/O的完成,它会先去处理其他的计算任务,等I/O完成后再试图去解码数据并存储回内存。

声卡也不会直接劳烦CPU去传输这个数据,要不然这个开销实在太大,让CPU去等待I/O结束这是不可想象的事情。现代的计算机会使用DMA,使得外部设备可以通过DMA通道直接读写内存,工作流程类似于:

  1. CPU收到I/O请求,设置DMA的数据块大小和起始地址的寄存器;
  2. I/O开始,CPU可以开始处理其他的计算任务而无需等待I/O结束;
  3. I/O完毕,DMA控制器发送中断给CPU,重置相关寄存器,CPU继续其他任务。

user avatar   martin1994 网友的相关建议: 
      

是缓冲。Windows 游戏卡死前的最后一小段声音会循环播放,盲猜那就是缓冲区的大小。




  

相关话题

  为什么 Windows 的音量调节弹出来很慢? 
  如果计算机没有浮点运算能力,系统能正常启动吗? 
  微软宣布 Windows 11 全部免费升级,还有哪些值得关注的信息? 
  32位保护模式下,段基地址应尽量选取16字节对齐的那些地址,可使访问的性能最大化? 
  完全自主的制作一个可以商用的操作系统有多难? 
  关于malloc返回值的问题? 
  鸿蒙系统能做小屏手机吗? 
  如何建设国产操作系统生态圈? 
  如果 Microsoft Windows 不给中国使用,我们会怎样? 
  打印机使用什么系统?自己开发的系统?还是Windows系统? 

前一个讨论
对苹果用原神来宣传性能,你有何看法?
下一个讨论
莆田一病例此前「9次核酸1次血清均阴性」,应该将隔离期延长吗?病毒为什么这么狡猾?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利