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




  

相关话题

  WIN7网络连接成功后,有个白框一闪而过,这方面的大神能帮忙看看,给个原因或可能有效的探索方向么? 
  如何看待微软不再给OEM提供32位的Windows? 
  视频RAM与IO内存映射的问题,大家可以指导一下吗? 
  如何看待开源计算器 Numworks 禁止安装第三方操作系统? 
  为什么电脑厂商不将 Windows 系统进行定制? 
  能否给Nokia手机直接编程? 
  为什么要引入子进程,有线程不就行了吗? 
  游戏机模拟器的具体原理是什么? 
  如果美帝软件上制裁,禁止使用一切 MADE in USA 的代码、软件(包括开源软件)会怎样? 
  如何评价华为发布的鸿蒙OS 2.0需要导入安卓部分SDK等功能? 

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





© 2025-01-18 - tinynew.org. All Rights Reserved.
© 2025-01-18 - tinynew.org. 保留所有权利