Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 媒体时间线应用程序在幕后是如何工作的?_Audio_Media_Midi - Fatal编程技术网

Audio 媒体时间线应用程序在幕后是如何工作的?

Audio 媒体时间线应用程序在幕后是如何工作的?,audio,media,midi,Audio,Media,Midi,有许多基于时间的应用程序示例,它们可以发送事件或执行复杂的处理,以达到非常高的分辨率和准确性。想想MIDI排序应用程序,音频和视频编辑应用程序 所以我很好奇,从编程的角度来看,这些应用程序是如何准确地完成它们的核心功能的呢?MIDI和媒体播放在本质上完全不同,处理方式也不同 对于MIDI,需要处理的数据非常少。创建一个具有高优先级的线程来处理MIDI I/O。这就是所需的全部 对于音频,准确度不是问题,但延迟是问题。声音接口上有一个缓冲区,由播放音频的软件定期写入。对于典型的媒体播放器,此缓冲区

有许多基于时间的应用程序示例,它们可以发送事件或执行复杂的处理,以达到非常高的分辨率和准确性。想想MIDI排序应用程序,音频和视频编辑应用程序


所以我很好奇,从编程的角度来看,这些应用程序是如何准确地完成它们的核心功能的呢?

MIDI和媒体播放在本质上完全不同,处理方式也不同

对于MIDI,需要处理的数据非常少。创建一个具有高优先级的线程来处理MIDI I/O。这就是所需的全部

对于音频,准确度不是问题,但延迟是问题。声音接口上有一个缓冲区,由播放音频的软件定期写入。对于典型的媒体播放器,此缓冲区可存储大约300毫秒的音频。软件只是将PCM编码的音频波形写入缓冲器。声音接口不断地从缓冲区读取数据,并以恒定速率播放

对于低延迟音频应用程序,此缓冲区大小可能非常小,处理的音频只有5或10毫秒。生成音频数据的软件必须再次由具有高优先级的线程处理,并且通常具有许多优化功能,以便在其他软件(效果或其他)无法跟上的情况下保持其运行。缓冲区不足很常见。特殊驱动程序通常用于跳过信号链中不需要的软件。ASIO和DirectX在Windows上很常见。Windows Vista/7和OSX都将其音频API称为“核心音频”,并提供无需特殊驱动程序的低延迟功能

视频是一种完全不同的野兽。在可能的情况下,视频解码由硬件处理。这就是像手机这样的慢速设备能够播放720p视频的方式。如果硬件可以处理编解码器,软件只需要向其发送数据。在不支持编解码器的情况下,必须使用速度慢得多的软件对视频进行解码。即使在现代个人电脑上,软件解码也常常会导致视频的起伏或滞后


音频与视频的同步也是一个问题。我对它知之甚少,但据我所知,音频是主时钟,视频与之同步。你不能简单地开始播放,并期望时间能实现,因为不同的声音接口对于44.1kHz(或任何其他采样率)有不同的想法。你可以通过在两台不同的设备上同时播放相同的音频,并随着时间的推移听它们漂移来证明这一点。

谢谢。让我更具体地说明我在寻找什么。让我们把延迟从等式中去掉,说我想播放一个视频文件,并将一些音频增益事件同步到它。因此,在5.010秒时,我希望增益为100%,在7.850秒时,我希望增益为75%,关键帧之间发生线性变化。这是如何工作的?@martinjbaker,你的时间(以秒为单位)对应于音频流中的特定采样偏移量。这些样本被操纵了。