Directsound 与 Waveout 有何不同

作者&投稿:习败 (若有异议请与网页底部的电邮联系)
Directsound 与 Waveout 有何不同?~

A Waveout 是在32位的Windows上的一种老旧且过时,用来播放数字音讯的应用程序接口。Directsound 是种较新、较现代化的声音播放 API,都已经内建在最近的32位Windows操作系统中。
1、DirectSound是DirectXAudio的一个较底层的部件,提供了丰富的接口函数,实现.wav格式的波形声音数据的播放控制。
2、创建对象:要取得次缓冲区,首先需要创建一个IDirectSound8接口对象。为此,调用DirectXAPI函数提供的DirectSoundCreate8进行创建。该函数用到DSound.h和Dsound.lib文件,如下是它的使用原型。
3、协调级别:IDirectSound声卡设备创建出来以后,需要调用DirectXAPI函数SetCooperativeLevel,进一步设置设备的协调级别,以决定声卡设备以哪种方式与Windows其他程序分享。

先放结论:
ASIO:硬件支持+对应驱动程序
DS:兼容性最好,一般也是默认的。
WASAPI:是Vista之后的,较佳选择输出方式。
再来详细看:
ASIO、WDM都是指音频通道,就是音频数据走的路。
ASIO指的是ASIO音频通道;WDM是指WDM类型的音频通道,具体包括WaveOut、DirectSound(简称DS)、Kernel Streaming(简称KS),Windows Vista和7 还比XP多了WASAPI。
具体体现在各个音频播放、录音软件的设置里,比如Foobar2000等。
打形象的比喻,音频数据是车,操作系统的音频部分是一条路。
WaveOut、DirectSound(简称DS)就好比最一般的公用车道,大家可以并行走(程序可以一起发声),但要受到一些旁车的影响。
Kernel Streaming(简称KS),WASAPI好比在这条操作系统音频之路上划出一条专用道,只允许一个车走,虽然还走着一条路,但没有干扰了,程序独占。
ASIO就好比我压根不走操作系统那条路了,我自己专门再修一条新路,自己走自己的,不过操作系统公共音频部分了。
其实ASIO最有价值的地方在于录音,它的最大特点在于声音数据在通道里通行快,延时小(音频传输是需要若干毫秒的时间的,对于精确录音和声音混音合成,很是敏感)。
DS就是DirectSound的首字母缩写,DirectSound是DirectX的一部分,而DirectX则是被很多游戏玩家所熟知,DirectX是由微软创建的多媒体编程接口,由C++编程语言实现,遵循COM。DirectX是Windows平台下最通用最成熟的接口,多媒体软件大多采用了DirectX API。通过DS输出可为开发者和用户带来许多便利,FB2K下使用DS输出则是可以实现渐响、淡出等功能,还能支持声卡所带的音效,所以小编并不是推荐各位网友使用DS输出来播放无损音乐。
ASIO全称Audio stream input output,是德国Steinberg公司所提出的,主要目的是为了解决PC音频方面的输入输出的延迟问题,由于系统自带的音频输出方式一般延迟都大于10ms,虽然10ms并不算长,但仍旧是无法满足专业领域的严苛需求的,于是ASIO便针对延迟问题进行了深度设计,使其输出输入延迟能够低于10ms,甚至还能低于1ms,完全能够满足专业音乐制作的需求,聆听音乐选择该方法输出,主要目的肯定不是降低延迟了,而是为了能避开系统重采样、音效以及规格化处理,由于ASIO低延迟设计,所以在输出过程当中不会引入任何处理,但ASIO缺点也是很明显的,ASIO是需要驱动层面的支持,并不是所有声卡都带有ASIO驱动,虽然有第三方驱动,但效果可能不尽如人意。
WASAPI全称Windows Audio Session API,是微软Vista之后所引入的,Vista当中微软重写了音频架构,提出了一套新的通用架构,Universal Audio Architechture(UAA),并增加了全新的WASAPI,WASAPI为程序开发者提供了两种模式,共享模式(Shared Mode)和独占模式(Exclusive Mode),使用独占模式时可以和ASIO输出达到相似的效果,此时声卡被某一程序独占,只有该程序能使用声卡,其他程序均不能占用声卡,而且独占模式时,系统不也会干涉音频流,直接将其交给声卡驱动进行输出,声卡自带的音效以及系统重采样均不会起到作用,可输出纯净的声音,
【在过去,声卡厂商例如Creative、Realtek等,为了让使用者透过自家编写的控制台来进行各方面关于音频设备的设定,所以编写驱动程序时,必须在Kernel Mode(内核模式)这个层级撰写相当多的代码来提供调用,使得使用者的操作设定能够直达硬件层。然而这对于系统的稳定度是一个很不好的影响,稍微有一点点意外状况,会因为这些功能跑在Kernel Mode而导致系统死机。在 Vista 时代有所改善了。Microsoft要求所有音频设备的厂商必须遵循UAA的架构来开发驱动程式,也为了配合UAA架构,Vista可以说是整个翻新了音讯处理流程,许多原本需要写在Kernel Mode的声卡功能,需要改写到User Mode(用户模式)去,进而增加了系统稳定度。】
KS(Kernel Streaming)输出是一种比较老旧的输出方式,主要使用在没有WASAPI的XP以及之前版本的Windows系统当中,KS最早出现在Windows 98当中,它允许程序员能够为多媒体设备实时的处理音频流,效果和ASIO、WASAPI类似,都可以避开系统对音频的音效处理或是规格化,从Vista开始KS已经逐渐被WASAPI所取代了,目前支持的软件并不多。

A Waveout 是在32位的Windows上的一种老旧且过时,用来播放数字音讯的应用程序接 口(Application
Programming Interface,简称API)。旧的Windows操作系统(如Win9x WinNT4)在 Wav eout 的完成度很高(因为 waveout 是针对这些操作系统设计的),如果你想获得最好 的效能,你应该在这些操作系统上使用 Waveout 输出。然而 Waveout 的功能有所局限 ,它无法支持「混和多重音讯流」的功能。这显示在Win2kXP下的 Waveout,只是为了 旧的软件的兼容性所提供的,也因此Win2kXP下 Waveout 的完成度很糟,它没有使用任 何的硬件加速功能,所有的混音动作都是用软件来执行(因此当CPU的使用率很高时,常 常会发生类似CD跳针的断音现象)。
Directsound 是种较新、较现代化的声音播放 API,都已经内建在最近的32位Windows操 作系统中。
Directsound 支持混和多重音讯流、独立的音量控制、硬件加速层及硬件仿真层(如果 某些功能硬件无法支持,可以用软件来仿真,因此程序设计师无须担心他们的新 l33t 码无法在旧的声霸卡16上运作)。一般来说,只要你的操作系统安装了适当的声卡驱动 程序及最新的 DirectX,Direstsound 都应该可以运作的很好(除了WinNT4以外)。在 Win2kXP下,Directsound 比 waveout 更好,因为在这些操作系统里,Directsound 的 完成度相对的比 waveout 来的更高(比 waveout 占用较少的CPU资源,自由度较高,且 不会有 Waveout 常见的小毛病)。Directsound 原本是被设计来让游戏利用系统的硬件 加速功能,而无须直接接触低阶的硬件函数(就如同 DirectX 其它的组件)。 Q 为何 Directsound 总是比 waveout 来的小声?
A 在Win2kXP中,改变 waveout 的音量似乎会改变整体音量的设定,然而 Directsou nd 的音量是独立控制的。换句话说,你用 waveout 来播放音乐,你将音量设为50%,你 就会得到50%的音量,然后你用 Directsound 来播放,你将音量设为50%,你只会得到最 大音量的25%。解决之道:别使用 waveout,并在Windows的音量控制中将音量设为最大 。
Q Directsound 及 waveout 之间的声音输出品质有所不同吗? A1 在Win2kXP下(或者使用WDM驱动程序),waveout 及 Directsound 只有在传输 P CM 资料给 Windows kernel mixer 上有两点不同。waveout 只使用软件混音,因此较少 造成系统中的特殊问题,而 Dircetsound可以使用硬件混音,因此会造成某些已知的, 声音品质的问题。
A2 在Win9x下,Directsound 驱动系统完全的与 waveout 分离,并使用低阶的方式来 控制硬件,因此这就像拿两种不同的驱动程序来配合 waveout 及 Directsound。在使用 某些老旧的ISA接口的声卡时,Directsound 为了节省 ISA 总线的频宽,有着会将音讯 资料降低取样率至 22khz 8bit (或者其它相近的取样率)的问题。 Q 对于 Directsound 而言,软件混音及硬件混音有何不同?
A 在 WinXP sp1、DirectX 8.1 中,无论是使用微软的 Directsound 核心或者是驱动 程序来进行硬件混音,都很容易碰到问题。目前已经证实,在 Winxp 下使用硬件混音来 传输音讯资料时,即使是使用不同的声卡,皆会碰上「取样频率」的问题。特别是某些 驱动程序存在已久的问题(著名的创新未来 Audigy 声卡 Skipping 问题,在某些设定 中会出现不间断、静态的杂音,甚至在某些例子中,会发生声音品质骤降的情形,天晓 得为何会如此!)。如果你想稳定的运作计算机,那建议你最好把硬件加速给关掉。硬
件混音可以 foobar2000 的偏好设定中的 Driectsound 这个字段里找到 "allow

var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);

void function(e,t){for(var n=t.getElementsByTagName("img"),a=+new Date,i=[],o=function(){this.removeEventListener&&this.removeEventListener("load",o,!1),i.push({img:this,time:+new Date})},s=0;s< n.length;s++)!function(){var e=n[s];e.addEventListener?!e.complete&&e.addEventListener("load",o,!1):e.attachEvent&&e.attachEvent("onreadystatechange",function(){"complete"==e.readyState&&o.call(e,o)})}();alog("speed.set",{fsItems:i,fs:a})}(window,document);

hardw
are acceleration"。开启它不代表你就真的激活了这个功能(Directsound 会在没有可
用资源时自动使用软件混音)。 关于重新取样(resampling)
Q 如果我使用重新取样的功能,能够增进(improve)声音的品质吗?
A 不行,你无法利用重新取样来「增进」声音的品质,重新取样是个有耗损的过程。你 可以试看看改变一张 bmp 图片的大小,改过大小的图片会和原本的图片极为相似,不过 假如你把两张图都放大(zoom-in)来看,你会发现它们在细节上并不相同。在某些硬件上 ,如果你使用高品质的重新取样软件,来避免让你的驱动程序硬件处理重新取样的过程 ,你可以避免大量资料的损失(也就是避免音讯品质降低)。我知道某些人在他们的声 霸卡16上将取样率提升为 96khz 24bit,并且声称这样能听到较「明亮」的声音(事实 上Windows kernel mixer会将取样率降回 44khz 16bit),别听他们所说的话。 Q 我应该将重新取样的参数设为多少比较好?
A 首先,你应该查询你声卡的硬件资料。某些声卡(例:在 Awesome系列以前发售的 声霸卡)不需要重新取样,这表示你不需要额外的重新取样就已经得到最好的品质了( 不会有重新取样造成的品质降低)。所有的 Live!系列Audigy系列AC97兼容的声卡 ,都已经将输出的取样频率固定为 48khz,重新取样的品质会因为驱动程序硬件装置 Windows混音设定而改变。在许多例子中,SSRC重新取样软件会优先于你的硬件驱动程 序,因此你需要将重新取样的参数设为 48khz16bits,以避免你的硬件驱动程序来进 行它们较差的重新取样。
Q 但是我在我的声霸卡上可以重新取样为 96khz24bits ...
A 当然可以,Windows混音器会将取样率降回你硬件能够接受的格式(例如: 48khz1 6bits),这会造成额外的品质降低。不要提升取样率,除非你的硬件真的能够接受这些 格式。 Dithering
dither 在计算机绘图上称为「递色」,而在处理音讯上,也有着相似的意思。以下有三 张图,大家可以看看 dither 的差异在何处。 原始的图(24bit 高彩),左上角的小方块是从黑框中放大的。 有 dither 的图(8bit 256色),较远处看可以说看不出与原图的差异。 无 dither 的图(8bit 256色),色彩的分布不平顺,与原图可以看出根本的差异。(图 略)
启用这个功能,将会在播放波形时Dithering。如果dithering没有激活,那么foobar20 00将会改用切平。这意指没有用到的位会被砍掉并丢弃。在许多较安静的音乐中有淡入 或淡出的情况时,会造成「断裂」的听觉效果(也就是淡入出的效果不平顺)。
Dithering只有在你将高位(例如:32bit)的音讯以低位(例如:16bit)来播放时才真 正有用。
输出位设定(Output bit depth)
这里有个下拉式选单,可以让你选择输出的位率。如果你有张 24bit 的声卡,你当然会 想让那些没有用到的位使用 dither to 24bit 来输出。即使是 16bit 的声卡,在播放 32bit 的音讯时使用 dither to 16bit 也能增进音质。 foobar2000 处理音讯资料的管道如下
decoder(32 bit fp)=>[replaygain]=>[DSP]=>downsample to 1624 bit with option

var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;

al dithering
因此当你选择 dither to 1624bit 时,建议你激活dithering。然而如果设为 32bit 是不需要激活dithering,因为从译码器直接传送过来的资料就是 32bit。 关于 Kernel Streaming
Q 何谓 Kernel Streaming ?
A Kernel Streaming 会绕过 Windows kernel mixer,直接输出音讯资料给声卡。这种 方式有着较低的输出延迟,也许可以被视为 ASIO output 之外的另一种选择。 Q 我应该用 Kernel Streaming 吗?
A 如果你的声卡及驱动程序能支持,且你使用 Kernel Streaming 没有什么问题的情况 下,我会建议你使用Kernel Streaming 。 Q 为何使用 Kernel Streaming 来输出,比使用 Directsound 输出,感觉声音变的更大声或者明亮?
A 声音并没有变的明亮,只有变大声。因为输出资料给声卡的方式不同,因为绕过了 Windows 的混音器
,音量控制(wave)对于 Kernel Streaming 是无效的,而且都以最大音量来输出。如果 你将音量控制中的 wave 音量设为最大,并使用 Directsound 输出,你会发现音质和 Kernel Streaming 输出没什么不同。
Q 哪些操作系统可以使用 Kernel Streaming ?
A Kernel Streaming 只能在 Windows 2000 及 Windows XP 上运作,有人说应该可以 在Windows ME 上运作。 如何设置
一打开 foobar2000, 你会发现它连 play, stop 这些基本的按钮都没有, 你可以到 Fo obar2000>Preferences>Display 里, 选 Show buttons, 接着到 DSP Manager, 把右边
的 Resampler 移到左边, 然后在 DSP Manager 下的 Resampler 里, 把 Target sampl e rate 设定成你 soundcard 本身的 sample
rate 以下是一些建议数值 (参考自 DearHoney 的 RMAA 数据库) 44100 - 16, AWE32, AWE64 和其它类似的 ISA soundcard
48000 - PCI, Live, Audigy1, Audigy2, Extigy, Philips AE, Sonic Fury, Ya maha 7x4 和一般的 onboard soundcard
96000 - Audigy2 和一些真正支持 96khz 的 soundcard, 例如 Terratec 的
在使用 Resampler 之后, 再试试播放上面提及的两个测试讯号, 听听是否只听到很纯很 尖的超高频声音, 而且听不出两个档案的分别。如果是的话, 高质素的 src 已经成功了 。否则请到 foobar2000>preferences>Output 里, 试试选用不同的 Output, 如 Kerne
l Streaming (只限 WDM driver), 变更 DirectSoundWaveOut 里的各种设定再试试看
, 如果仍然失败的话, 试试在 Windows 音量控制里按选项>进阶控制, 看看是否有高低 音控制, 如果有的话, 把高低音都移到正中间再试试看 (如果本身已经在中间就不用移 了), 如果还是不行的话, 我也无话可说。注意使用 Kernel Streaming 时 Windows 音 量控制里的 wave 输出可能会无法控制, 那是正常的现象。
接着到 Playback 一栏, 会有一个 Output bit depth 的选项, 只有 soundcard 真正支 持 24-bit 时才选择 24-bit (Audigy1 是 16-bit, Audigy2 才是 24-bit), 因为在不 支持 24-bit 的 soundcard 上选 24-bit 只会令音质比 16-bit 更差, 即使你可能听 不出。

A Waveout 是在32位的Windows上的一种老旧且过时,用来播放数字音讯的应用程序接口。
Directsound 是种较新、较现代化的声音播放 API,都已经内建在最近的32位Windows操作系统中。




请问我的电脑配置能玩中途岛之战太平洋吗??
中途岛之战太平洋的最底要求其实很低的!具体参数如下 CPU:Intel Pentium 4 3+GHz 或 AMD Athlon 2.5+GHz 以上 内存:1GB (Windows XP) \/ 2GB (Windows Vista) system memory 显卡:NVIDIA GeForce 6 series 6800GT (or better) \/ ATI 1800XT (or better)SOUNDirect X 9.0c compatible sound ...

动力区15161585450: 什么是Microsoft DirectX ? -
但蚀一清: 它能增强计算机的多媒体功能.DirectX 包括加速视频卡和声卡驱动程序,为不同类型的多媒体提供更好的播放效果,如全色图形、图像、三维动画、音乐以及剧场声音.DirectX 使用这些高级功能而不要求识别计算机中的硬件组件,并确保大多...

动力区15161585450: DirectX 8.0的DirectX Audio -
但蚀一清: Microsoft DirectX 8.0 Audio 为播放集成的音乐和声音效果提供了新的体系结构.尽管仍然使用名称 Microsoft DirectSound 和 Microsoft DirectMusic,但在它们之间已经没有明显的区别.希望将来 DirectMusic API 能够成为创建交互式声音效果的...

动力区15161585450: wav是什么文件?wav文件怎么打开? -
但蚀一清: WAV格式声音文件是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持. WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kz的采样频率,16位...

动力区15161585450: directx是什么
但蚀一清: DirectX是一种应用程序接口(API),它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用...

动力区15161585450: C++ directsound播放WAV 开头有一点杂音 -
但蚀一清: 是不是缓冲区参数没设置正确 ?? DirectSoundBuffer 缓冲区参数必须要和你的 wav 音频参数一致,不然会有杂音;

动力区15161585450: 不懂电脑术语,关于电脑配置···· -
但蚀一清: DirectX诊断工具 是XP自带的 重新安装Win XP也是有的 请放心 DirectX是Windows操作系统的一种扩展功能,微软定义为“硬件设备无关性”.通过它可以增强计算机的多媒体功能,比如3D图形的显示能力,增强声音处理能力等.其主要目的...

动力区15161585450: directX诊断工具是做什么用的? -
但蚀一清: 在Windows中,与游戏以及多媒体直接相关的就是DirectX,通过系统自带的DirectX诊断工具就可以对游戏和多媒体出现的显示、声音不正常等问题进行诊断,让它们运行得更顺畅. 一、认识DirectX DirectX是Windows操作系统的一种扩展功能...

动力区15161585450: 有没有c#做的利用Directsound流式缓冲区播放WAV文件的例子? 文档上没例子,表示很无奈... -
但蚀一清: 可以参考这 http://www.codeproject.com/KB/audio-video/DirectSoundAudioStream.aspx 可能遇到的问题,比如侦测wav文件是用什么格式放的音频 http://stackoverflow.com/questions/100654/why-do-some-wav-files-play-in-my-c-directsound-app-but-some-dont http://www.gamedev.net/topic/322115-directsound-c-generate-white-noise--single-tone/

动力区15161585450: python 播放 wav -
但蚀一清: 这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数.和matlab里的那个差不多.使用超级方便,自动就做好了短时傅立叶变换(short time fourier transform)~函数用法具体可参照http://matplotlib.sourceforge.net/api/pyplot...

动力区15161585450: directsound 播放wav文件问题
但蚀一清: libsndfile是个开源的声音文件操作的库.里面的例子有用callback函数来播放的例子.你可以参考一下. http://www.mega-nerd.com/libsndfile/

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网