GreenArrowMan
这个作者很懒,什么都没留下…
展开
-
DirectX 因素:在 Windows 8 中流式载入和处理音频文件
Charles Petzold下载代码示例如今,许多 Windows 用户的硬盘中都有一个音乐库,其中包含多达数千甚至上万个 MP3 和 WMA 文件。 若要在电脑上播放此音乐,这类用户一般运行 Windows Media Player 或 Windows 8 Music 应用程序。 但对于程序员来说,知道我们可以编写自己的程序来播放这些文件再好不过了。 Windo转载 2016-08-02 10:17:36 · 1634 阅读 · 0 评论 -
DirectX 因素:模拟合成器的仿真
Charles Petzold下载代码示例大约在 50 年前,一名物理学家和工程师名叫罗伯特 · 穆格电子音乐合成器功能创建的颇不寻常:器官型键盘。 一些电子音乐的作曲家轻视这种平淡和老式的控制设备,同时其他作曲家 — — 和特别是表演者 — — 对此发展表示欢迎。 1960 年代末,由温卡洛斯的 Switched-On 巴赫已成为最畅销的古典专辑的所有时间,和 M转载 2016-07-29 11:39:40 · 1576 阅读 · 0 评论 -
DirectX 因素:构建用于 Windows 8 的音频振荡器
Charles Petzold下载代码示例我一直在制造电子乐器作为一种爱好现在大约 35 年。 我开始在晚 20 世纪 70 年代布线了 TTL 和 CMOS 芯片,于是晚得多的软件路由 — — 第一次与多媒体扩展到 1991 年的 Windows 和 Windows 演示文稿基础 (WPF) 中,和在 Silverlight 和 Windows Phone 7 的转载 2016-07-12 14:27:26 · 1202 阅读 · 0 评论 -
DirectX 因素:了解 XAudio2 中的筛选器
Charles Petzold下载代码示例在著名的波形的万神殿,简单的正弦曲线至高无上。 只是看着它,您可以看到其精髓的顺利起伏性质 — — 当它达到其峰值、 几乎停止,它冠,然后逐步加快速度减慢,达到它的最大速度横渡水平轴开始另一个经济放缓。这种视觉印象更深的数学分析所证实。 正弦曲线在任意点的瞬时速度是对曲线切线。 图的那些速度,并可以得到另一个正弦曲线,由转载 2016-07-08 19:09:12 · 2248 阅读 · 0 评论 -
DirectX 因素:使用 XAudio2 的 Windows 8 发声功能
Charles Petzold下载代码示例对于 Windows 8 的 Windows 商店 app 可以播放 MP3 或 WMA 声音文件时轻松地使用 MediaElement — — 你只是给它一个 URI 或流的声音文件。 Windows 存储区的应用程序也可以访问 API 发挥到流媒体视频或音频与外部设备。但是,如果您需要更多先进的音频处理呢? 也许转载 2016-07-07 18:04:00 · 3269 阅读 · 0 评论 -
把音频数据写入wave文件
使用DirectX SDK中带的CWaveFile类可以进行wave文件的读写,新建一个wave文件,并将头信息和音频数据写入文件:CWavefile *g_pWaveFile; WAVEFORMATEX wfxInput; ZeroMemory(&wfxInput,sizeof(wfxInput)); wfxInput.wFormatTag = WAVE_FORMAT_PCM; wf原创 2016-05-06 19:23:20 · 3090 阅读 · 0 评论 -
(提交音频太快导致崩溃)应该是SubmitSourceBuffer允许的最大buffer值XAUDIO2_MAX_QUEUED_BUFFERS的限制
使用IAudio2SourceVoice->SubmitSourceBuffer来提交音频数据,会有一个数据队列,可以使用XAUDIO2_VOICE_STATE来获取状态,可以看到当前待播放的等待队列中还有多少Buff,提交音频数据过快的话,会导致程序崩溃,应该是因为下面的buffer最大值限制:// Numeric boundary values#define XAUDIO2_M原创 2016-04-28 16:52:06 · 4396 阅读 · 0 评论 -
DirectX XAudio2之音频图关键点
The set of all voices, with their contained effects and their interconnections, is referred to as the audio processing graph. The graph takes a set of audio streams from the client as input, processes转载 2016-04-28 14:39:52 · 1770 阅读 · 1 评论 -
DirectX Audio之XAudio2及XAPO 示例
With the inclusion of XAudio2 in Windows 8, there’s been renewed interest in learning how to use this API. The documentation on MSDNis of course a great place to start, and be sure to read through转载 2016-04-27 14:51:12 · 3540 阅读 · 0 评论 -
C++编程:XAudio2 API应用示例
C++编程:XAudio2 API应用示例XAudio2是一个跨平台的API,在Xbox 360及Windows中得到支持。在Xbox 360上, XAudio2作为一个静态库编译到游戏可执行文件中。在Windows上,XAudio2提供一个动态链接库(DLL)。以下例子只使用了其中的一部分功能,并不全面。详情请看微软技术页的XAudio2编程相关(英文)。使用XAudio2来播放转载 2016-04-26 17:45:02 · 5961 阅读 · 0 评论 -
XAPO中LockForProcess 音频格式设置以及数据处理后的音频格式
XAPO中LockForProcess 格式 是由与之绑定的IXAudioSubmixVoice来影响的。但是貌似只能影响通道数和采样率,其中的WAVEFORMATEX.wBitsPerSample是Float型,32bit,暂时没有发现怎么去修改这个数值。创建IXAudioSubmixVoice时会加入通道数和采样率,这两个数据要流向XAPO的话,通过IXAudioSubmixVoi原创 2016-04-26 14:23:21 · 1615 阅读 · 0 评论 -
DirectX 因素:音频处理对象简介
中文原文地址:https://msdn.microsoft.com/zh-cn/magazine/dn201755.aspx英文原文地址:https://msdn.microsoft.com/en-us/magazine/dn201755.aspx?utm_source=tuicool&utm_medium=referralDirectX 的 XAudio2 组件更多只是方式在 W转载 2016-04-21 10:35:20 · 2630 阅读 · 0 评论 -
XAudio2学习之MonitorAPO
MonitorAPO 通过一种锁无关由应用程序初始化的通讯通道的方式来将音频数据传递给主线程。将MonitorAPO添加到上一篇的源码中,给一个source voice添加了两个特效。主要是使用管道,在APO中的DoProcess函数中将数据写入,然后在主线程中就可以读出来了。#include "DXUTLockFreePipe.h"typedef DXUTLockFreePipe Mo原创 2016-04-20 17:31:49 · 3454 阅读 · 0 评论 -
XAudio2学习之SimpleAPO
SimpleAPO通过与处理的样本数据相乘,应用一个简单的增益因子到音频数据。DirectX SDK中带了示例,我将其中的实例进行拆分后,来分开进行说明,也是将代码分离开。struct SimpleAPOParams{ float gain;};class __declspec( uuid("{5EB8D611-FF96-429d-8365-2DDF89A7C1CD}")) CS原创 2016-04-20 16:36:37 · 1936 阅读 · 0 评论 -
XAudio2学习之自定义音频特效
XAPO API允许创建跨平台音频处理对象(XAPO)以及微软跨平台音频创建工具(XACT)在Windows和Xbox 360上给XAudio2使用。XAPO API提供了IXAPO接口和CXAPOBase类,可以用来创建新的XAPO类型。IXAPO接口包含了创建一个新的XAPO所需要实现的所有方法。CXAPOBase类简单的继承实现了IXAPO接口,除了IXAPO::Process方法,因为原创 2016-04-20 08:54:13 · 2262 阅读 · 0 评论 -
XAudio2学习之音频特效库XAPOFX
XAPOFX是一个继承自XAPO接口的音频效果集合,用于XAudio2。XAPOFX包含了几种效果以及一个通用的创建音效实例的机制。XAPOFX中包含的效果如下表:EffectDescriptionParameter StructureParameter ConstantsRequirementsFXECHO原创 2016-04-19 09:09:00 · 2036 阅读 · 0 评论 -
XAudio2学习之内置音效:混响
XAudio2提供了两种内置音频特效,这两种音频特效以及它们的创建方式如下:1.创建XAPO对象;2.创建XAPO对象描述结构体对象,用于对XAPO信息进行描述;3.创建效果链结构体对象,用于持有描述结构体对象:包括两个成员变量:一个是持有的对象个数,一个是所有对象的数组;4.将效果链传递给XAudio2;5.释放XAPO对象;6.创建音效参数结构体对象,并设置需要的值;7.将参数结构体对象传递给XAudio2对象;8.启用或者禁用效果。对于参数结构体各个成员变量,上一篇文章也有说明,如果原创 2016-04-18 13:56:10 · 3912 阅读 · 0 评论 -
XAudio2学习之音效相关结构体
任何XAudio2 voice都可以持有一个音频效果链。你可以使用XAUDIO2_EFFECT_DESCRIPTOR数组来指定效果链。每个描述因子都包含了由客户端提供的指向音效对象的指针。这些对象必须实现APO接口。结构体定义为:typedef struct XAUDIO2_EFFECT_DESCRIPTOR { IUnknown *pEffect; BOOL Init原创 2016-04-16 18:07:55 · 1573 阅读 · 0 评论 -
XAudio2音频特效
一个音频特效是这样一个对象,它获取输入的音频数据,在将数据继续传下去之前会在数据上做一些操作。一个音效可以用来执行各种不同的任务,包括向音频流添加混响以及监视音量的峰值。翻译 2016-04-10 10:20:12 · 2792 阅读 · 0 评论 -
XAudio2学习之流化音频文件
流化是一个过程,在这个过程中,我们只需要在内存中维护一小块内存来播放音频文件。这样我们就可以使用很大的音频文件作为背景音乐,而不占用很大的内存。当我们流化一个音频文件的时候,音频数据是从硬盘上一块一块的读取,而不是将整个文件一次性全部加载。流化是通过异步读取音频数据到硬盘缓冲区队列来完成的。当一个缓冲区填充好数据后,提交给source voice。当source voice播放完成一个缓冲区后,这原创 2016-04-07 18:01:41 · 4043 阅读 · 0 评论 -
XAudio2学习之循环播放音频数据
有时候一个音频特效需要多次播放,比如一个连击动作的声效。当然你可以多次打开文件,读取内容然后播放;也可以读取一次,创建多个XAUDIO2_BUFFER,提交多次进行播放;最好的方法是使用XAUDIO2_BUFFER的Loop功能来进行播放,只需要读取一次文件,创建一个XAUDIO2_BUFFER,提交一次,就可以实现播放多次的需求。原创 2016-04-05 18:08:24 · 2813 阅读 · 0 评论 -
XAudio2学习之混音
XAudio2不仅可以进行采样率转换,还可以进行混音。所谓混音就是将多路音频混合成一路进行输出。混音主要是IXAudio2SubmixVoice进行此项功能。数据由IXAudio2SourceVoice提交后,流向IXAudio2SubmixVoice进行采样率转换(如果需要的话),并且进行音频混合,最后形成一路采样率和IXAudio2MasteringVoice一致的音频流,由IXAudio2MasteringVoice输出到音频输出设备。原创 2016-04-03 17:41:37 · 2452 阅读 · 0 评论 -
XAudio2学习之组合音频方法作为操作集
多个XAudio2方法可以作为一个操作集的一部分被调用。这些方法都使用OperationSet作为参数,这样可以允许他们作为延迟组的一部分被调用。在某个特定的时刻,需要改变的整个集合可以被同时应用,通过调用函数IXAudio2::CommitChanges时使用那组的OperationSet识别码。这样,就允许客户端代码的不同部分分别应用原子改变到音频图而不相互冲突。推荐的做法是,客户端使用一个全原创 2016-04-02 22:31:11 · 1180 阅读 · 0 评论 -
XAudio2学习之动态添加删除Voice
你可以随时通过添加或者删除Voices来改变音频图,一个voice可以输出到几个voices或者voices组成的一个长链。添加或者删除voices对于音频图有很大的影响。音频图如下:往音频图中添加或者删除voices和往链表中添加或者删除节点是相似的。添加voice:设置音频图中一个voice(例如pParentVoice)的输出voice为新添加的voice(例如pNe原创 2016-04-02 17:02:01 · 1105 阅读 · 0 评论 -
XAudio2学习之调节音调
频率比有两个地方可以设置。一个是在创建IXAudio2SourceVoice对象的时候,一个是调用IXAudio2SourceVoice::SetFrequencyRatio来调节。在创建IXAudio2SourceVoice对象的时候,第三个参数影响音高(音调)和第四个参数会影响频率比的设置。HRESULT CreateSourceVoice( IXAudio2So原创 2016-04-02 15:17:33 · 1949 阅读 · 0 评论 -
XAudio2学习之调节音量
XAudio2音量调节分为全局和声道调节以及连接音量调节。所谓全局就是说设置了音量后会影响整个音频流的声音大小;声道调节就是说只调节某一个声道的音量大小;连接音量设置是说设置voice与其输出voice之间的声道映射音量。举个例子来说明:IXAudio2SourceVoice->IXAudio2SubmixVoice->IXAudio2MasteringVoice由三个voice组成的音频原创 2016-04-01 18:23:07 · 2359 阅读 · 0 评论 -
XAudio2音量和音调控制
音量电平表示为浮点振幅乘数因子,位于-XAUDIO2_MAX_VOLUME_LEVEL(-2的24次方)和XAUDIO2_MAX_VOLUME_LEVEL(2的24次方)之间,最大增益是144.5dB.音量为1.0表示没有衰减或者增益;0表示静音;负音量来表示反转音量的相位。翻译 2016-03-30 12:31:30 · 1635 阅读 · 0 评论 -
XAudio2学习之采样率转换
使用IXAduio2SubmixVoice可以对wave文件进行采样率转换,以满足设备对波形音频采样率的要求。在XAudio2学习三之获取音频输出设备信息可以看到音频播放设备是有自己支持播放的wave文件的格式的。以将2通道/44.1k采样率的wave转为2通道/48k的wave为例:首先,初始化COM组件; HRESULT hr = CoInitializeEx(NULL, COIN原创 2016-03-27 09:45:07 · 1928 阅读 · 0 评论 -
XAudio2采样率转换
如果XAudio2 voices的输入采样率和它们输出向的voices的输入采样率不一致的话,它们会自动进行采样率转换。翻译 2016-03-26 15:32:55 · 1631 阅读 · 0 评论 -
XAudio2学习之IXAudio2VoiceCallback回调
使用IXAudio2VoiceCallback回调的好处是,在音频数据播放完的时候,可以通知外部程序进行其他操作。使用IXAudio2VoiceCallback需要继承此接口,然后重新实现,因为内部所有函数都是纯虚函数。所有函数中使用比较多的是OnStreamEnd函数,当音频数据播放完成的时候,OnStreamEnd会触发一个事件。如果需要多次提交数据,那么就需要很频繁的调用SubmitSourceBuffer,但是IXAudio2SourceVoice等待播放的音频数据队列最大不能超过XAUDIO2原创 2016-03-24 14:49:22 · 2103 阅读 · 9 评论 -
XAudio2的三种Voice
总共有三种XAudio2 voice对象:source(源)、submix(子混合)、mastering(主)声音。Source声音对客户端提供的音频数据进行操作。Source和submix声音将它们的输出发送到一个或者多个submix或者mastering声音。Submix和mastering声音混合所有其他声音提供给他们的音频数据,并且对结果进行操作。Mastering声音将音频数据写到音频输出设备。翻译 2016-03-15 18:14:42 · 1705 阅读 · 0 评论 -
How to: Use Submix Voices
How to: Use Submix Voices:https://msdn.microsoft.com/en-us/library/windows/desktop/ee415794(v=vs.85).aspxThis topic shows you how you can set groups of voices to send their output to the same su翻译 2016-03-15 16:18:08 · 984 阅读 · 0 评论 -
XAudio2学习七之工程迁移错误
然后就对比了一下两个工程的属性页配置的区别,发现区别是字符设置:第二次新建(win32->Empty project)是Use Unicode Character Set,第一次新建(general->empty project)是:Use Multi-Byte Character Set。 出现错误是因为编码方式不一样,从而导致类型有差别:LPSTR是ASCII编码,LPWSTR是Unicode编码。原创 2016-03-05 18:01:25 · 1353 阅读 · 0 评论 -
XAudio2学习六之播放WAV文件
前面已经加载了WAV文件到内存中,那么如果想要播放这些数据,需要怎么实现呢?大致步骤如下: 1.初始化COM组件; 2.创建XAudio2声音引擎; 3.创建主声音IXAudio2MasteringVoice; 4.加载WAV文件到内存; 5.创建源声音IXAudio2SourceVoice,并提交数据,启动播放; 6.获取播放状态,等待播放完成; 7.释放资源。原创 2016-03-04 15:37:43 · 2442 阅读 · 3 评论 -
XAudio2学习五之加载WAV文件到内存
前面说了wave文件的格式。想要播放WAV文件,需要使用上一篇所说的CWaveFile类,将文件内容读取到内存,然后才能进行播放。本篇就展示如何将WAV文件加载进内存。原创 2016-03-03 15:41:20 · 1598 阅读 · 0 评论 -
XAudio2学习四之wave文件格式
wave文件也称波形文件,是非常常用的音频格式。和很多文件一样,包括头信息和音频数据。原创 2016-02-29 17:30:09 · 1920 阅读 · 0 评论 -
XAudio2学习三之获取音频输出设备信息
输出设备信息包括输出输出设备支持的音频格式、设备ID、设备名称、以及扮演角色。音频格式:通道数、采样率、有效位、音频类型等等。设备ID:每个设备独一味二的标识,扮演角色:用来表明音频设备的用途,下面会详细说明。设备名称:就是指音频输出设备的全称。打开自己的音频合成器,点击设备中的下拉按钮,可以看到所有设备以及全称。原创 2016-01-22 17:06:37 · 3238 阅读 · 0 评论 -
XAudio2学习二之获取输出设备数
本篇主要讲如何获取输出设备数:所谓输出设备,就是播放设备,比如扬声器。原创 2016-01-21 16:17:10 · 1762 阅读 · 2 评论 -
XAudio2学习一之平台搭建
前段时间使用XAudio2开发,在网上找资料也是很少,很多问题都是自己去研究。耗费了大量时间和精力,但是还是没有很精进。现在我想把一些方法和功能写出来,一方面是自己学习,另一方面也给需要的朋友做个参考。原创 2016-01-20 18:44:37 · 1711 阅读 · 0 评论