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




  

相关话题

  linux 操作系统和 windows 操作系统哪个对科研更有效,有前辈能详细讲讲吗? 
  为什么这么多人认为win7比win10好用? 
  如何看待程序员的三大浪漫被认为是操作系统、编译原理和图形学? 
  如何看待任正非称华为操作系统超越苹果安卓需要的时间不超过 300 年? 
  Windows 操作系统中的公文包是什么?有什么作用? 
  微软英特尔是怎样配合开发操作系统和处理器的,处理器如何按照操作系统设计,操作系统如何利用处理器特性? 
  剪切板、文件拖拽这些功能桌面环境是怎么实现的? 
  操作系统中原子操作和锁的底层原理分别是什么?提供了哪些原子语义保证? 
  计算机执行一条指令要多长时间? 
  发展我们的国产操作系统,有没有必要从内核写起,deepin 到底属不属国产操作系统? 

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





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