DirectSound以DMO(DirectX Nedua Objects)的方式提供了对原始音频数据的处理,开发者能够通过VC6.0里的Audio Effect DMO Wizard
来开发自定义的DMO。实际上这个DMO开发向导已经不在Visual Studio里面提供了,并且已经被MFT(Media Foundation Transforms)替代了,但这个不是我们今天的重点。
除此之外,DirectSound提供了以下标准DMO音效(原谅鄙人对音效这块不是很了解,因此没有翻译这些术语):
- Chorus
- Compression
- Distortion
- Echo
- Environmental Reverberation
- Flange
- Gargle
- Parametric Equalizer
- Waves Reverberation
1. 音效使用逻辑
所有标准音效都按照一致的方式来使用,首先先调用DirectSoundCreate8()
获取设备对象接口并设置协作级别:
if (DirectSoundCreate8(&DSDEVID_DefaultPlayback, &m_directSound8, NULL) != DS_OK) {
throw std::exception("Error: maybe no default audio device in your system");
}
if (m_directSound8->SetCooperativeLevel(windowHandle, DSSCL_PRIORITY) != DS_OK) {
throw std::exception("set cooperative level on default audio device failed!");
}
容纳后通过设备对象接口获取播放声音的次缓冲区接口:
if (soundBuffer->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*)&m_soundBufferInterface) != S_OK)
throw std::exception("IDirectSoundBuffer8 interface not supported!");
接着通过次缓冲区接口的GetObjectInPath()
函数获取想要的音效接口:
IUnknown* interfacePtr;
if (m_soundBufferInterface->GetObjectInPath( guid, guidIndex, interfaceGuidMaps[guid], (LPVOID*)&interfacePtr ) != DS_OK)
throw std::exception( "GetObjectInPath error" );
最后,调用SetFX()
函数, 传入类型为DSEFFECTDESC的音效参数一个或多个音效参数:
DSEFFECTDESC effectDescriptions = { 0 };
effectDescriptions.dwSize = sizeof(effectDescriptions);
effectDescriptions.dwFlags = DSFX_LOCSOFTWARE;
effectDescriptions.guidDSFXClass = effectGuid;
...
auto callResult = m_soundBufferInterface->SetFX(m_effects.size(), m_effects.data(), resultCodes.data());
if (callResult != DS_OK) {
...
}
2. Chorus音效简介
Chorus音效即合声,标准音效参数由以下几个参数构成:
- Wet/Dry 比例:Wet代指被音效处理过的音频信号;Dry代指原始的音频信号。
- Depth: 延迟时间被低频振荡器调整的百分比。
- Feedback: 输出音频信号反馈到音效输入的百分比。
- Fraquency: 低频振荡器的频率。
- Waveform: 低频振荡器的波形形状:三角、正弦。
- Delay: 音效的延迟播放时间。
- Phase: 左右低频振荡器的相位差。
3. Chorus音效展示
Demo中我只实现了Chorus音效的应用:
大家可以编译完整代码来体验一下。
DirectSound---音效使用的更多相关文章
-
3D音效
摘自:http://baike.baidu.com/view/1330437.htm?fr=aladdin 3D音效就是用扬声器仿造出似乎存在但是虚构的声音.例如扬声器仿造头顶上有一架飞机从左至右飞过 ...
-
DirectSound的应用
假设仅仅使用PlaySound()这个API函数来表现声音效果的话,那么就无法表现出声音的混音效果,由于PlaySound在播放还有一个声音时,必定会导致现有声音的停止.因此,使用 PlaySound ...
-
DirectSound播放PCM(可播放实时采集的音频数据)
前言 该篇整理的原始来源为http://blog.csdn.net/leixiaohua1020/article/details/40540147.非常感谢该博主的无私奉献,写了不少关于不同多媒体库的 ...
-
最简单的视音频播放示例8:DirectSound播放PCM
本文记录DirectSound播放音频的技术.DirectSound是Windows下最常见的音频播放技术.目前大部分的音频播放应用都是通过DirectSound来播放的.本文记录一个使用Direct ...
-
最简单的视音频播放演示样例8:DirectSound播放PCM
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...
-
DirectSound应用
只是使用的假设PlaySound()这个API函数来显示的声音效果,然后,然后,它不会出现在混合声音,因为PlaySound还有播放期间声音,这将不可避免地导致现有声音停止. 因此,使用 PlaySo ...
-
WASAPI、DirectSound/DS、WaveOut、Kernel Streaming/KS
先放结论: ASIO:硬件支持+对应驱动程序 DS:兼容性最好,一般也是默认的. WASAPI:是Vista之后的,较佳选择输出方式. 再来详细看: ASIO.WDM都是指音频通道,就是音频数据走的路 ...
-
C++播放wav音乐和音效
1. #include <mmsystem.h>#pragma comment(lib,"winmm.lib")PlaySound(TEXT("c:\\te ...
-
Android 学习笔记之三—— 音效的使用
在开发手电筒应用的处理音效的过程中,看网上使用的是MediaPlayer,因为音效一般都比较短,所以这里使用的是SoundPool,如下: SoundPool soundPool=new SoundP ...
-
WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)
刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. D ...
随机推荐
-
Python之实用的IP地址处理模块IPy
实用的IP地址处理模块IPy 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 别担心,Ipy模块拯救你.Ipy模块可以很好的辅助我们高效的完成IP的规划工 ...
-
STM32 Unicode 与 GBK 转换 .bin文件放到SD卡是啥意思
2个数组 : }; }; 一个是Unicode 编码,一个是GBK编码: 用c2b软件转成.bin 二进制文件放到SD卡里: SD卡放入字库 .FON STM32 代码: 代码中SD卡字库和二进制路径 ...
- python核心编程学习记录之模块
-
安装与配置 Elasticsearch
环境:centos6.7 #查询已经安装的JDK rpm -qa | grep jdk #卸载 yum -y remove java-1.8.0-openjdk-headless-1.8.0.91- ...
-
[转]开发者需要了解的WebKit(mark)
以下内容转自:http://www.infoq.com/cn/articles/webkit-for-developers -------------------------------------- ...
-
网站开发常用jQuery插件总结(13)定位插件scrollto
一.scrollto插件功能 scrollto用于定位页面中元素的位置,并使滚动条滚动到当前元素. 二.scrollto官方地址 https://github.com/flesler/jquery.s ...
-
mongodb常用操作语句
mongodb常用操作语句 A:创建数据表 db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean&g ...
-
DOM attributes and properties
element :attributes : DOM objects : properties 一个是元素属性的叙述性说明,它是对象属性的叙述性说明 版权声明:本文博客原创文章,博客,未经同意,不得转载 ...
-
Win10系统提示对于目标文件系统过大
Win10系统提示对于目标文件系统过大 今天在复制MAC系统文件时,系统弹出窗口提示“对于目标文件系统,文件XXX过大”.出现这种情况的原因是FAT32的文件系统不支持复制大于4g的单个文件,而NTF ...
-
Linux root密码忘记了怎么办?
一.找回root密码: 1. 开机出现 Booting Red Hat Enterprise Linux Client (…) in 3 seconds … 按任意键进入menu菜单: 2. 选择当前 ...