百科问答小站 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 游戏卡死前的最后一小段声音会循环播放,盲猜那就是缓冲区的大小。




  

相关话题

  我们为什么不尽早施行国产 CPU+国产 Linux 系统战略呢? 
  为什么很多人不相信鸿蒙系统是真的? 
  为什么很多人要禁止 Windows 10 自动更新? 
  为什么栈相对于堆很小? 
  阿里巴巴没有能力开发出媲美linux的操作系统吗?有的话为什么不开发? 
  为什么基于Android深度定制的系统有的叫UI有的叫OS? 
  操作系统能否知道自己处于虚拟机中? 
  如何评价中航计算机所研制的天脉操作系统? 
  Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 
  长期使用 macOS 的人再回来用 Windows 的时候会有什么不适应? 

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





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利