DirectSound开发手册
directsound 用法
![directsound 用法](https://img.taocdn.com/s3/m/8429084cbfd5b9f3f90f76c66137ee06eff94ed1.png)
directsound 用法英文回答:DirectSound is a software component of Microsoft's DirectX API that provides a way for applications to access audio devices, such as sound cards, and play and manipulate audio data. It is commonly used in video games and multimedia applications to provide sound effects, background music, and voiceovers.To use DirectSound, you need to include the necessary header files and link against the DirectSound library in your development environment. Once you have set up the development environment, you can create a DirectSound object, which represents the audio device, and initialize it with the desired settings.Once the DirectSound object is initialized, you can create secondary sound buffers, which are used to store and play audio data. You can load audio data from files orcreate it programmatically. DirectSound supports various audio formats, such as WAV and MP3.To play audio, you need to fill the secondary sound buffer with the audio data and call the Play method. Youcan control various aspects of the playback, such as volume, panning, and frequency, using methods provided by the DirectSound interface.DirectSound also provides features for managingmultiple sound sources and applying effects to the audio. You can create multiple sound buffers and mix them together to create a complex audio environment. You can also apply effects, such as reverb or echo, to individual soundbuffers or the entire audio output.In addition to playing audio, DirectSound also provides features for capturing audio from a microphone or otherinput devices. You can create a capture buffer, set the desired format and properties, and then start capturing audio data.Overall, DirectSound is a powerful and flexible API for working with audio in Windows applications. It provides a wide range of features and options for playing, manipulating, and capturing audio data.中文回答:DirectSound是微软DirectX API的一个软件组件,它提供了一种让应用程序访问音频设备(如声卡)并播放和操作音频数据的方式。
数字声音从属设备用户手册说明书
![数字声音从属设备用户手册说明书](https://img.taocdn.com/s3/m/3ff2d34bbb1aa8114431b90d6c85ec3a87c28b3e.png)
User's Manual Digital Digital Sound SlaveInhaltsverzeichnisEinführung (3)Hardware (5)Schaltplan und Layout (5)Architektur (6)Programmierung (7)Integrierte Voice-Prompts (7)Integrierte Voice-Macros (8)Ansteuerung des Digital Sound Slaves (20)Abbildungsverzeichnis (21)Literaturverzeichnis (22)EinführungDiese Beschreibung richtet sich an Entwickler von Mikrocontroller-Systemen. Zielsetzung hier beschriebenen Digital Sound Slaves ist es, einem Mikrocontroller-gesteuertem Kleinstsystem eine …Stimme“ zu geben und so eine zeitgemäße Benutzerführung auch in kleinen Anwendungen zuermöglichen.Dies ist zumeist mit Board-Mitteln eines MC-Systems nicht, oder nur mitgroßem Aufwand möglich. Häufig konsumiert diese Funktion dann den Großteil der Systemressourcen, wobei die Sound-Wiedergabe meistens ein Kompromiss bleibt.Die Entwicklung des Digital Sound Slaves soll die angesprochenen Nachteile in einfacher Weise beheben.Das Digital Sound Slave besitzt folgende Eigenschaften:•Einfache Programmierung•Wiedergabe von beliebigen WAV-Files und damit gut verständliche Sprachwiedergabe•Einfacher elektrischer Anschluss des Digital Sound Slaves an das MC-System•Einfache Nutzung des Digital Sound Slaves mittels API•Minimale Systembelastung durch die Sound-Wiedergabe•Direkter Betrieb eines Kleinlautsprechers bis 1 WAbbildung 1: Modul-Vorderseite Abbildung 2: Modul-RückseiteAbbildung 3: Modul mit externem LautsprecherAbbildung 4: Beispiel mit PCB-Lautsprecher und Horn (Unterseite)Das Digital Sound Slave ist in der Abbildung mit einem SMD-Miniatur-Lautsprecher mit Horn bestückt. Das Modul verfügt aber auch über einen externen Anschluss für einen Lautsprecher der Wahl.Abbildung 5: Beispiel mit PCB-Lautsprecher und Horn (Oberseite)HardwareDer Analogkreis des Moduls wird in der Regel mit 5 V versorgt um die nominale Leistung von einem Watt zu erreichen. Der Digitalteil des Moduls wird mit 3,3 V direkt versorgt. Soll das komplette Modul mit 3,3 V versorgt werden, so ist der Löt-Jumper entsprechend zu setzen.Schaltplan und LayoutAbbildung 6: SchaltplanAbbildung 7: LayoutArchitekturDas Digital Sound Slave verwendet einen integrierten Signalprozessor ISD2360 (ISD-Chip-Corder) von Fa. Nuvoton zur Signalerzeugung. Dieser Chip kann ohne Verstärker direkt einen 1W Kleinlautsprecher (bei 5V) an den Chipausgängen SPK+ und SPK- betreiben. Ferner ist der Chip mit 3,3-5V (max. 1 W) zu versorgen.Als Interface dienen entweder 5 GPIO Pins, mit denen Voice-Files getriggert (steigende/fallende Flanken) werden können, oder der Chip wird über SPI direkt angesteuert. Die zweite Möglichkeit bietet einen sehr flexiblen Einsatz.Dabei können in dem 2Mbit großen Speicher auf dem Chip ca. 64 Sekunden Voice-Prompts hinterlegt werden.Ein direktes …streamen“ über SPI zur direkten Ausgabe ist ebenfalls möglich. Dies setzt aber große Speicherressourcen in dem Mikrocontroller-System voraus. Dabei verwaltet der Chip-Corder bis zu 3 unabhängige Sound-Kanäle die bei Bedarf überlagert simultan ausgegeben werden.Die Ausgaben werden entweder direkt über Voice-Prompts (Wave-File) aus dem internen Chip-Speicher, oder per SPI-Streaming bedient.Dabei kennt der Chip Voice-Prompts, welche die ultimative Sound-Ressource darstellt und Voice-Macros, mit deren Hilfe Voice-Prompts aneinander gehängt werden können (Script-Sprache z.B. ganze Sätze aus Wortschnipsel). Voice-Macros können neben linearen Abrufen von Voice-Prompts auch Wiederholschleifen oder prozedurale Schleifen abarbeiten und sind damitmächtige Werkzeuge in der Wiedergabetechnik.Der ISD-Chip-Corder funktioniert im Stand-alone Modus, als auch im SPI-Modus (simultan). Der Chip muss aber, bevor er ins Zielsystem eingebracht wird, entsprechend programmiert werden. Dies findet mit der Software …Voice Prompt Editor“ von Nuvoton statt. Diese kann von der Nuvoton-Web-Seite heruntergeladen werden.Für weiterführende Informationen siehe [ISD2360 DESIGN GUIDE].ProgrammierungUm den Einstieg möglichst einfach zu gestalten, ist das Digital Sound Slave bereits mit einem Satz Voice-Prompts und Voice-Macros geladen und kann direkt verwendet werden.Soll dieser Inhalt verändert oder durch einen anderen ersetzt werden, ist das mit der oben erwähnten Software möglich.Integrierte Voice-PromptsVoice-Prompts sind komprimierte und für den ISD2360 aufbereitete Wave-Files. Sie stellen die ultimative Sound-Quelle dar und nehmen erfahrungsgemäß den größten Platz im internen Speicher des ISD2360 ein. Daher muss die Auswahl der zu integrierenden Voice-Prompts mit Bedacht getroffen werden.Allgemein ist eine Sample-Rate von 8kHz bei 16 Bit/sample und Mono zuwählen.Die folgenden Voice-Prompts sind im Auslieferungszustand programmiert.VP Westminster – BigBenDiese Tonaufnahme des Westminster-Glockenspiels wurden als kompletter Satz aller Spielmuster im Internet zum lizenzfreien Download angeboten. Diese wurden dann in die einzelnen Glocken zerlegt und hier nach Glocken geordnet abgespeichert.Dabei gibt es 2 Arten von Samples:1.Anschlag der Glocke mit der Dauer y bis zum nächsten Glockenschlaginnerhalb eines Blocks.2.Anschlag und Ausklingen der Glocke mit der Dauer y + x bis Blockende Siehe auch “Integrierte Voice-Macros“Mit diesem Satz von Voice Prompts kann das komplette Glockenspiel zusammengesetzt werdenIntegrierte Voice-MacrosVoice-Macros sind Skripte, mit denen man Voice-Prompts zusammenhängen kann, so dass komplexe Klangaggregate entstehen. So werden gesprocheneSätzen aus einzelnen Wortschnipseln, oder eine Komposition aus einzelnen Noten zusammengesetzt.VM_POISystem-Macro: Power On InitDieses wird immer nach Spannungswiederkehr von der Hardware gestartet.•Initialisiert GPIO #5 zum Trigger Eingang. Bei steigender Flanke wird Voice-Macro #3 getriggert.•In R7 wird 0x21 hinterlegt, als Vorbesetzung, dass nur initialisierte Aufrufe der Stundenfunktion vorkommen können•Als Fertigmeldung der Initialisierung kommt ein FastBeepVM_PUSystem-Macro: Power UpDieses Makro wird durch das PU-Kommando x10 (SPI) gestartet.•Initialisiert den Signalpfad auf Playback und schaltet den PCM frei•Setzt die Lautstärke auf das Maximum•In R7 wird 0x21 hinterlegt, als Vorbesetzung, dass nur initialisierte Aufrufe der Stundenfunktionen vorkommen können.•In diesem Fall muss …Finish“ gewählt werden, da bei …PD“ der Chip nicht mehr ansprechbar wäre.VM_WAKEUPSystem-Macro: Wake UpDieses Makro wird durch Hardware gestartet und weckt den Chip aus dem Power Down Mode auf. Dies findet dann statt, wenn an einem initialisiertenGPIO-Eingang ein Trigger Ereignis erkannt wird.•Initialisiert den Signalpfad auf Playback und schaltet den PCM frei•Setzt die Lautstärke auf das MaximumVM_GPIO5User-Macro: Aktion bei steigender Flanke an GPIO5Dieses Makro wird bei dem in POI initialisierten Trigger Ereignis an GPIO5 von der Hardware aufgerufen.•Führt das VM mit der #2E aus. Das sind 2 Glockenschläge, kann z.B. als Türglocke verwendet werden.VM_PU_CH0 / 1User-Macro: Platzhalter, derzeit leerVM_SysStartupInitiatedUser-Macro: gesprochener Satz …System Start up Initiated“VM_ShutdownInitInTmUser-Macro: gesprochener Satz …System Shutdown Initiated in T minus“.In den Registern R2, R3, R4 wird jeweils der Index der Sekundenstellen Hunderter, Zehner, Einer übergeben.VM_SysResetSeqInProcessUser-Macro: gesprochener Satz …System Reset in Process“VM_SysShutdownSeqTermiUser-Macro: gesprochener Satz …System Shutdown Sequence Terminated“VM_TelefonXUser-Macro: Klang eines alten Glocken-TelefonVM_EIN / AUSUser-Macro: EIN, derzeit leerVM_SirenVM Westminster – BigBenExkurs Westminster:Das Westminster – Glockenspiel hat eine durchaus komplexe Abfolge von Glockenanschlägen, deren Struktur hier kurz analysiert werden soll.•Die kleinste Einheit des Glockenspiels ist der Glockenschlag.• 4 Glockenschläge mit der Dauer y (= 1,1s) bilden einen Block, der durch die Zeitdauer x (= 2,2s Ausschwingzeit) vom nächstenBlock getrennt ist.Blocklänge = 4 * y + x•Ein Satz ist 1 – 4 Blöcke lang:1st Quarter: Satzlänge = 1 Block Satzlänge = 1 (4 * y + x)2nd Quarter: Satzlänge = 2 Blocks Satzlänge = 2 (4 * y + x)3rd Quarter: Satzlänge = 3 Blocks Satzlänge = 3 (4 * y + x)4th Quarter: Satzlänge = 4 Blocks Satzlänge = 4 (4 * y + x)•Dabei wird die volle Stunde (4th Quarter) mit der Stundenzahl an BigBen-Schlägen quittiert.Dies startet nach einer Wartezeit tw von 1,1s nach Satzende.•Die Zeitdauer zzwischen den Stundenschlägen beträgt 2,2s.•Die Ausschwingdauer zx von BigBen beträgt ca. 5,5sFür den Stundenschlag wird nur das Makro VM_WM_h aufgerufen. Zuvor muss ins Register R7 noch der Wert 0x20 + <Stundenzahl(1..13)> eingeschrieben werden (alles per SPI).1.CFG(R7_L, 0x2<h>)0xB8,0x2E,0x2<h>0x2<h> R7_L2.CFG(R7_H, 0x00)0xB8,0x2F,0x000x00 R7_L3.PLAY # VM_WM_h0xB0,0x00,0x20Spielt VM_WM_hVM_TöneUser-Macro: EIN, derzeit leerVM_SirenVM_00 – 10User-Macro: gesprochenes Wort: Zahl 0 – 10 in EnglishVM Westminster – BigBenExkurse Westminster:Das Westminster – Glockenspiel hat eine durchaus komplexe Abfolge vonGlockenanschlägen, deren Struktur hier kurz gezeigt werden soll.•Die kleinste Einheit des Glockenspiels ist der Glockenschlag.• 4 Glockenschläge mit der Dauer y (= 1,1s) bilden einen Block, der durch die Zeitdauer x (= 2,2s Ausschwingzeit) vom nächstenBlock getrennt ist.Blocklänge = 4 * y + x•Ein Satz ist 1 – 4 Blöcke lang:1st Quarter: Satzlänge = 1 Block Satzlänge = 1 (4 * y + x)2nd Quarter: Satzlänge = 2 Blocks Satzlänge = 2 (4 * y + x)3rd Quarter: Satzlänge = 3 Blocks Satzlänge = 3 (4 * y + x)4th Quarter: Satzlänge = 4 Blocks Satzlänge = 4 (4 * y + x)•Dabei wird die volle Stunde (4th Quarter) mit der Stundenzahl an BigBen-Schlägen quittiert.Dies startet nach einer Wartezeit tw von 1,1s nach Satzende.•Die Zeitdauer z zwischen den Stundenschlägen beträgt 2,2s.•Die Ausschwingdauer zxvon BigBen beträgt ca. 5,5sFür den Stundenschlag wird nur das Makro VM_WM_h aufgerufen. Zuvor muss ins Register R7 noch der Wert 0x20 + <Stundenzahl(1..13)> eingeschrieben werden (alles per SPI).1.CFG(R7_L, 0x2<h>)0xB8,0x2E,0x2<h>0x2<h> R7_L2.CFG(R7_H, 0x00)0xB8,0x2F,0x000x00 R7_LSpielt VM_WM_h3.PLAY # VM_WM_h 0xB0,0x00,0x20VM Tür-Glocken ExtraktVM TöneUser-Macro: EIN, derzeit leerVM_SirenVM_TestDas Test-Voice-Makro ist das letzte Makro das genutzt wird. Es sollte nicht umbenannt, oder in der Sequenz nach vorne geschoben werden, da dieser Name als Ende Marke im Programm genutzt wird.Ansteuerung des Digital Sound SlavesFür die ersten Schritte bei der Integration wird ein ARDUINO-Example inklusive einer Arduino-Library zur Vergnügung gestellt. Dieses kann im Download-Bereich heruntergeladen werden.Der GPIO 5 Anschluss löst bei Betätigung (Verbindung zu GND) ein Test-Macro aus. Dieses demonstriert das zusammensetzen von Wort-Schnipsel zu vollwertige Sätze und gibt auch den kompletten Voice-Prompt-Inhalt des internen Speichers aus. Dadurch ist auch im Stand-alone-Betrieb der programmierte Inhalt des Chips leicht zu prüfen.AbbildungsverzeichnisAbbildung 1: Modul-Vorderseite (3)Abbildung 2: Modul-Rückseite (3)Abbildung 3: Modul mit externem Lautsprecher (4)Abbildung 4: Beispiel mit PCB-Lautsprecher und Horn (Unterseite) (4)Abbildung 5: Beispiel mit PCB-Lautsprecher und Horn (Oberseite) (4)Abbildung 6: Schaltplan (5)Abbildung 7: Layout (6)Literaturverzeichnis[ISD2360 DATA SHEET]ISD2360 Data SheetRev. 1.00, 15.01.2020Nuvoton[ISD2360 DESIGN GUIDE]ISD2360 Design GuideRev. 1.15, 03.08.2016Nuvoton[ISD2360 DEMO USERM]ISD-DEMO2360 User ManualRev. 1.1, 13.04.2016Nuvoton[ISD2360 ESMINIUSB UM]ISD-ES_MINI_USB User ManualRev. 1.0, 18.02.2016Nuvoton[ISD2360 WIN IDE]ISD-VPE2360 for Windows7 64bitIDE-Software... Made in GermaySignalgeneratorenTastköpfePräzisionsverstärkerMessbereichserweiterungenDSP-SystemeDoc. Nr.: 0130-001v1.0, 04.10.2020, Änderungen vorbehalten HUBER SIGNAL PROCESSINGUnternbergstr. 1383278 TraunsteinGermany Tel:+49 (0)861.213978-0 Fax:+49 (0)861.213978-40**********************© HUBER SIGNAL PROCESSING。
交互DircetX DirectSound 以及 Direct3Dsound音频媒体的程序设计
![交互DircetX DirectSound 以及 Direct3Dsound音频媒体的程序设计](https://img.taocdn.com/s3/m/05bacfd6d4d8d15abf234e0b.png)
微软所提供开发工具包括一系列专为游戏和交互DircetX DirectSound 以及Direct3Dsound音频媒体的程序设计人员开发的强有力的工具。
DirectX充分利用了声音加速硬件以尽可能的提高其运行速度,减少CPU 的占用时间。
但是,音频信号仍然对整个系统的运行产生着重大影响。
本文所描述的技术将帮助用户使用DirectSound 以及Direct3DSound以减少音频重放对系统运行的影响。
前言微软所提供的开发工具中DirectX 波形声音重放设备是为支持在Windows 95 和Windows NT 中开发游戏和交互媒体应用程序而设计的。
DirectSound 和Direct3DSound允许你在同一个三维空间中同时运行多个声音文件和移动声音源。
只要有可能DirectX ,将充分利用声音加速设备来改善运行状况和减少CPU的使用。
但这并不是说你可在三维程序空间运行、编译充斥着大量声音代码的程序,并且随心所欲地将其移来移去。
如果你并没有注意如何使用计算机的声音资源你将很快发现,你的计算机的CPU周期绝大部分被你自己添加的一个户外历险游戏的44.1khz,16位立体声的优美声音所占去。
技巧和技术首先,我们来谈谈一些有关的定义。
你所熟悉的DirectSound包括以下一些术语:从缓冲区:是指用来执行波形数据的应用程序缓冲区。
每个执行的波形文件都有一个从缓冲区,每个这样的缓冲区都有自己特定的格式。
主缓冲区:是DirectSound的输出缓冲区。
一般说来,应用程序并非将波形数据直接写入主缓冲区。
相反,DirectSound 首先在从缓冲区中将波形数据加以合成,然后输入主缓冲区中。
注意:仅有一个主缓冲区,并且其格式决定了其输出格式。
静态缓冲区:包含了内存中的一个完整的声音。
因为,通过一次简单操作,你能在缓冲区中写入一个完整的声音。
所以,他们对于用户十分方便。
静态缓冲区通过声卡的合成加速执行。
流缓冲区:仅仅为声音的一部分,利用它,我们并不需要大量的内存就能运行较长的声音文件。
windows声音应用程序开发指南_张新宇_第1章 DirectX Audio之DirectSound
![windows声音应用程序开发指南_张新宇_第1章 DirectX Audio之DirectSound](https://img.taocdn.com/s3/m/aaf9a2257375a417866f8fd2.png)
第1章
1.1.3 DirectX Audio新特征 前面曾提到,在新的DirectX Audio体系结构中加入 了不少新的特征,增加了控制的灵活性和功能的完善 性。下面对这些新特征予以总结。 (1) WAV文件和基于消息的声音集成在一个播放机 制中。WAV文件和资源现在可以通过 DirectMusic 加 WAV 载器加载,并通过DirectMusic演奏器播放。应用程序 不 再 需 要 分 解 WAV 文 件 , 并 将 其 复 制 或 流 入 DirectSound 缓存。
第1章
2.DirectX的发展 DirectX的发展历程如图1-1所示。
DirectX的发展历程 …… DirectX 8.0 DirectX 7.0 DirectX 6.0 DirectX 5.0 DirectX 3.0 DirectX 2.0 DirectX 1.0 Game SDK
图1-1 DirectX 的发展历程
第1章
(3) 让游戏也成为真正的Windows应用程序,即支持 多任务。你可以从一个游戏切换到同时运行的另一个 应用程序,然后还可以返回该游戏。 (4) 要有能超过或者达到DOS环境下所能达到的性能。 在使用Game SDK的情况下,游戏开发者不必关心游戏 要运行在哪个制造商的硬件上,因为Microsoft把这些 特性都封装在了硬件驱动程序和一系列API中,当然很 多是由硬件制造商完成的,达到了开发时的硬件独立 性。
第1章
6) DirectX 7.0 DirectX 7.0在图形功能方面创建的图形多边形数目 比以前版本都要多,这使得计算机生成的数字世界的 人物和物体的表面更加平滑。DirectX 7.0提供高级3D 加速支持,使得多边形的变化更快,它所产生的动画 效果非常逼真irectX 8.0是Microsoft公司于2000年11月9日正式推 出的一款DirectX的最新版本。它具有多项令人兴奋的 功能特性。下面将对它的新增特性进行全面详细的介 绍。 DirectX 8.0是Windows操作系统下的最新的多媒体 系统链接库。通过DirectX 8.0,其它软件能够尽情发挥 系统的效能,并且带给我们最棒的多媒体体验和震撼 效果。
DirectSound---简易Wav播放器
![DirectSound---简易Wav播放器](https://img.taocdn.com/s3/m/440c71c148649b6648d7c1c708a1284ac85005ca.png)
DirectSound---简易Wav播放器这篇⽂章主要给⼤家介绍下如何⽤DirectSound打造⼀个简易播放器,因为篇幅有限且代码逻辑较为复杂,我们只介绍下核⼼技术内容。
该播放器主要包括以下功能:播放、暂停播放进度提⽰。
1. DirectSound播放概念简介1.1 播放相关概念⾸先要介绍下DirectSound的设计理念:在DirectSound中,你需要播放的⾳频⼀般需要(也可以直接放⼊主缓冲区,但是操作上⽐较困难⽽且对其他DirectSound程序不太友好)放⼊⼀个被称为次缓冲区(Secondary Buffer)的地址区域中,该缓冲区由开发者⼈为创建操控。
由于DirectSound⽀持多个⾳频同时播放,所以我们可以创建多个缓冲区并同时播放。
在播放时,放⼊次缓冲区的⾳频先会被送⼊⼀个叫做主缓冲区(Primary Buffer)的地⽅进⾏混⾳,然后在送⼊硬件声卡中进⾏播放。
在Windows driver model,即WDM模式下,DirectSound实际上不能直接操作声卡硬件,所有的混⾳操作不是送给主缓冲区⽽是被送往内核混⾳器(Kernel Mixer)进⾏混⾳,然后由内核混⾳器送往硬件。
在WDM模式下,内核混⾳器替代了主缓冲区的功能位置。
1.2 缓冲区相关概念DirectSound的缓冲区类别⼤体可以分为两种:1) 静态缓冲区,2) 流缓冲区。
静态缓冲区就是⼀段较短的⾳频全部填充到⼀个缓冲区中,然后从头到尾播放;流缓冲区可以描述为⾳频流,实际上这种流也是通过单个有长度的缓冲区来抽象模拟的。
在流缓冲区模式下,单个缓冲区会被重复填充和播放,也就是说当DirectSound播放到缓冲区的最后⼀个尾部时,它会回到缓冲区的头部继续开始播放。
因此,在播放较长的⾳频⽂件时需要开发者⼿动循环填充缓冲区。
DirectSound中还有游标(cursor)的概念,游标分两种:1) 播放游标(play cusror),2) 写⼊游标(write cursor)。
directshow教程(新整理)
![directshow教程(新整理)](https://img.taocdn.com/s3/m/7f630e4ce518964bcf847c87.png)
Directshow教程0.11MSDN翻译系列作者:黄丁杰说明:如果有任何问题请联系din-je@。
是本人业余翻译的如果有错误请直接发到我邮箱我会立刻改正,directshow的其他文章我会在以后不断翻译出来。
如果觉得好请帮我作作宣传。
欢迎转载,但是禁止修改。
Directshow起步。
本章主要介绍diirectshow在编写程序时所需的基本概念。
在本章你可以总揽下directshow 技术。
你必须在总体上对本章的编程和媒体有所了解。
本章将介绍。
设置编译环境。
介绍directshow应用程序编程。
如何播放一个文件设置编译环境:你可以编译工程在命令行模式下或者在vs集成环境中头文件所有的directshow应用程序都使用下面的头文件。
Dshow。
H部分directshow接口需要附加的头文件。
这些文件会在接口的注意中给出。
所需的库文件directshow需要如下的库文件strmiidl。
Lib 该库包含CLSIDs和IIDs的接口。
所有的directshow都需要该库。
Quartz。
Lib 该库包含AMGetErrorText函数。
如果你没有调用该函数,该库没有用。
记住在你的编译环境中必须把directx SDK 的头文件库和连接库的目录作为vs优先搜索的路径。
这样可以保证编译的时候用的是最新版本的文件。
介绍directshow应用程序编程本章介绍编写一个directshow程序的基本技术和概念,读完本章你就可以写个你自己的directshow的应用程序了。
滤镜和图像滤镜directshow是由被称作滤镜的东西构成的。
滤镜是一个软件包用来执行对多媒体流的一些操作。
比如directshow的滤镜可以读出一个文件从视频捕捉设备获取视频流解码各种各样的多媒体格式,比如MPEG-1S视频。
传输视频和音频到屏幕和声卡。
滤镜几乎完成视频播放所需要的从输入到输出的所有功能。
比如一个MPEG-1的滤镜。
它可以输入MPEG码流然后输出图像帧用于后续显示在directshow程序中只要执行把滤镜连接在一起就可以了。
C# 中利用 DirectSound 录音
![C# 中利用 DirectSound 录音](https://img.taocdn.com/s3/m/9c2b1dee19e8b8f67c1cb9b6.png)
net设备对象每个应用程序只有一个设备对象用来管理设备创建辅助缓冲区microsoftdirectxdirectsoundcapture主缓冲区一个应用程序只有一个主缓冲区操控声音捕捉缓冲区和产生混音效果的区域microsoftdirectxdirectsoundcapturebuffer辅助缓冲区每一个声音对应一个辅助缓冲区可以有多个辅助缓冲区用来存储要播放的声音文件可建立多个辅助缓冲区来放多个要播放的声音文microsoftdirectxdirectsoundsecondarybuffer事件通知对象一个缓冲区可以有多个通知对象用于在缓冲区的特定点触发通知事件来通知程序执行操作microsoftdirectxdirectsoundnotify其它辅助对象对象作用
对以上内容有所了解后,我们接着来了解下利用
DirectSound 录制声音的基本步骤。
1 DirectSound 是什么? DirectSound 是微软提供的 DirectX API 的一部分。它使你能以极低的时延播放声 音,使应用程序可以高度利用硬件资源。 2 DirectSound 能做什么? 2.1 按照 WAV 格式播放声音。有多个通知对象Fra bibliotek序执行操作
4 其它辅助对象
对象
作用
.Net 中的类或结构体
定义 WAV 音频
directsoundcreatebufferfromfile
![directsoundcreatebufferfromfile](https://img.taocdn.com/s3/m/fbf58f33f342336c1eb91a37f111f18582d00c4f.png)
directsoundcreatebufferfromfile【实用版】目录1.引言:介绍 DirectSoundCreateBufferFromFile 函数2.函数参数3.函数功能4.使用方法5.示例代码6.结论:总结 DirectSoundCreateBufferFromFile 函数正文一、引言DirectSoundCreateBufferFromFile 函数是 DirectSound 库中的一个重要函数,它可以将文件中的音频数据读取到一个缓冲区,为播放音频做好准备。
本文将对该函数进行详细介绍,包括函数参数、功能、使用方法和示例代码。
二、函数参数DirectSoundCreateBufferFromFile 函数的原型为:HRESULT DirectSoundCreateBufferFromFile(_In_ LPDIRECTSOUNDBUFFER pParentBuffer,_In_ LPCSTR pszFileName,_In_ DWORD dwSize,_In_ DWORD dwFlags,_In_ DWORD dwFilter,_In_ DWORD dwPlayMode,_In_ DWORD dwCallbackReason,_In_ LPVOID pContext,_In_ DWORD cbSizeOFContext);参数说明:1.pParentBuffer:指向父缓冲区的指针。
2.pszFileName:指向音频文件路径的字符串指针。
3.dwSize:音频数据的大小,以字节为单位。
4.dwFlags:标志位,用于指定缓冲区的属性。
5.dwFilter:指定音频数据的处理方式。
6.dwPlayMode:指定音频数据的播放模式。
7.dwCallbackReason:指定回调函数的原因。
8.pContext:指向回调函数的指针。
9.cbSizeOFContext:回调函数的接口大小。
Directshow开发笔记
![Directshow开发笔记](https://img.taocdn.com/s3/m/fb077602f78a6529657d5300.png)
智慧的鱼--------DirctShow SDK 学习笔记
提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的功能 Filter 来扩展 Directshow 的应用。下面我们用一个例子来说明如何采取 Filter 来播放一个 AVI 的视频文件。 从一个文件读取数据,形成字节流。 (这个工作由源 Filter 完成) 检查 AVI 数据流的头格式,然后通过 AVI 分割 Filter 将视频流和音频流分开。 解码视频流,根据压缩格式的不同,选取不同的 decoder filters 。 重画视频图像,通过 Renderer Filter。 将音频流送到声卡进行播放,一般采用缺省的 DirectSound Device Filter。流程见下图。
所以才想起了要翻译这些东西希望在9状态改变graph中的filter的状态改变应该一致因此应用程序并将状态改变的命令直接发给filter而是将相应的状态改变的命令发送给filtergraphmanager由manager将命令分发给graph中每一个filterseeking也是同样的方式工作首先由应用程序将seeking命令发送到filtergraph管理器然后由其分发给每个filterdirectshow2020开发笔记智慧的鱼irctshowsdk学习笔记1directshow开发笔记翻译个人感觉开发自己的filter还是要对dshow的基类要熟悉一些
1
智慧的鱼--------DirctShow SDK 学习笔记
1 About Directshow 基础
1.1 设置 dshow 的开发环境
如果你用 VC 开发环境,一定要在 Setting 里设置下面的东西 包含头文件 Dshow.h 所有的 dshow 应用必须包含
DirectSound帮助文档(中文版)
![DirectSound帮助文档(中文版)](https://img.taocdn.com/s3/m/a75e23232f60ddccda38a00a.png)
DirectSound 的帮助文档(中文版)(2006年4月28 日早)Copyright SONiX TEC H N OL O G Y C O., LTD.weihua_zhangWhat's New in DirectSoundDirectSound API 9.0增强了许多功能。
下面是改进的方面:·当操作系统支持时,缓冲区的最大频率从100khz增加到200KHZ,(DirectShow不支持高频率)·频率和音效控制(DSBCAPS_CTRLFREQUENCY and DSBCAPS_CRTLFX)已经与缓冲区绑定,通过绑定标志可以对缓冲区做多普勒音效变换。
·音频文件是通过WA VEFORMATEXTENSIBLE结构体来描述的。
·标准音效DMOs在模式WA VE_FORMAT_IEEE_FLOAT下能被处理。
·标准音效支持parameter curves 。
DirectSound介绍这节提供了帮助你快速浏览的DirectSound,并能开始学习API。
DirectSound 的功能。
DirectSound 和 DirectMusicDirectSound 的功能DirectSound 播放声音是通过较低的的功能实现,提供给应用程序一个较高的控制级,来访问硬件资源。
使用DirectSound 应用程序接口可以实现:从WA VE文件中播放声音。
同时播放多个声音赋予较高的权限去控制硬件缓冲区在3D环境中定位声音添加音效诸如回声合唱,可以动态改变音效从麦克风或其他输入设备捕获声音DirectSound 和 DirectMusicDirectSound和 DirectMusic时DirectX的两个分离部分,但是功能有部分重叠,都是播放wave声音,DirectMusic 最终实现合成所有声音并已WA VE格式存放在DirectSound 缓冲区,使其可以演奏。
DirectSound
![DirectSound](https://img.taocdn.com/s3/m/74a7f179f46527d3240ce05d.png)
DirectSoundDirectSound是DirectXAudio的一个较底层的部件,提供了丰富的接口函数,实现.wav格式的波形声音数据的播放控制。
与一般的WindowsAPI提供的声音播放函数不同,DirectSound 可实现多个声音的混合播放。
DirectSound可充分使用声卡的内存资源,同时也提供了3D声效算法,模拟出真实的3D立体声。
(1)添加头文件和库文件添加DirectSoundCreate8函数用到DSound.h和Dsound.lib文件。
另外还应添加Winmm.lib 以及mmsystem.h,mmreg.h头文件,因为加载WAVE文件时会用到。
(2) DirectSound对象的建立创建一个IDirectSound8接口对象。
为此,调用DirectXAPI函数提供的DirectSoundCreate8进行创建。
HRESULT DirectSoundCreate8(LPCGUID lpcGuidDevice, //声卡设备全局标志,一般是NULL,表示默认的声卡LPDIRECTSOUND8 * ppDS8, //返回的IDirectSound8接口对象指针LPUNKNOWN pUnkOuter //必须为NULL,因为集合不被支持)直观地说,IDirectSound8对象代表声卡设备1)建立DirectSound对象首先要建立一个代表声卡的DirectSound对象,我们先定义LPDIRECTSOUND pDS,然后用DirectSoundCreate(NULL, &pDS, NULL);2)设定共享层级然后要设定程序协调层级,使用pDS调用SetCooperativeLevel方法来实现,注意这个方法有两个参数,第一个参数代表应用程序的主窗口,而第二个参数则设定使用资源的优先权。
HRESULTSetCooperativeLevel(HWNDhwnd,//窗口句柄DWORDdwLevel//协调级别);协调级别:DSSCL_EXCLUSIVE对于DirectX8.0以上版本,此标志与DSSCL_PRIORITY具有相同的作用。
C#中使用DirectSound录音
![C#中使用DirectSound录音](https://img.taocdn.com/s3/m/58ea38240722192e4436f604.png)
C#中使用DirectSound录音一.声卡录音的基本原理为了实现一个录音的基本过程,至少需要以下对象的支持:1.录音设备,对我们的PC设备就是声卡。
这个录音设备可以进行的操作应该有开始和关闭。
2.缓冲区,也就是录制的声音放在哪里的问题。
二.DirectSound对录音的描述模型1.DirectSound对录音的支持类Ø Capture,设备对象,可以看作是声卡的描述。
Ø CaptureBuffer,缓冲区对象,存放录入的音频数据。
Ø Notify,事件通知对象,由于录音是一个长时间的过程,因此使用一个缓冲队列(多个缓冲区)接收数据,每当一个缓冲区满的时候,系统使用这个对象通知应用程序取走这个缓冲区,并继续录音。
以上三个对象是进行录音操作的主要对象,由于在C+ +中对DirectSound的操作DirectX帮助文档中已经有很详细的说明,这里就不再赘述了。
本文是针对Manage d Code。
除了以上三个主要的DirectSound类,还需要以下几个辅助类。
Ø WaveFormat,描述了进行录制的声音波形的格式,例如采样率,单声道还是立体声,每个采样点的长度等等。
Ø Thread,线程类,由于录音的过程是需要不断处理缓冲区满的事件,因此新建一个线程对此进行单独处理。
Ø AutoResetEvent,通知的事件,当缓冲区满的时候,使用该事件作为通知事件。
三.代码解析(SoundRecord类)1.需要引用的程序集using System;using System.Windows.Forms;using System.Threading;using System.IO;// 对DirectSound的支持using Microsoft.DirectX;using Microsoft.DirectX.DirectSound; 2.SoundRecord的成员数据public const int cNotifyNum = 16; // 缓冲队列的数目private int mNextCaptureOffset = 0; // 该次录音缓冲区的起始点private int mSampleCount = 0; // 录制的样本数目private int mNotifySize = 0; // 每次通知大小private int mBufferSize = 0; // 缓冲队列大小private string mFileName = string.Empty; // 文件名private FileStream mWaveFile = null; // 文件流private BinaryWriter mWriter = null; // 写文件private Capture mCapDev = null; // 音频捕捉设备private CaptureBuffer mRecBuffer = null; // 缓冲区对象private Notify mNotify = null; // 消息通知对象private WaveFormat mWavFormat; // 录音的格式private Thread mNotifyThread = null; // 处理缓冲区消息的线程private AutoResetEvent mNotificationEvent = null; // 通知事件3.对外操作的函数/// <summary>/// 构造函数,设定录音设备,设定录音格式./// </summary>public SoundRecord(){// 初始化音频捕捉设备InitCaptureDevice();// 设定录音格式mWavFormat = CreateWaveFormat();}对我有用[0]丢个板砖[0]引用举报管理TOP精华推荐:别说我闲,nothing啊, nothing ... ...whChi na(温温的手)等级:#2楼得分:0回复于:2009-07-16 21:00:17/// <summary>/// 初始化通知事件,将原缓冲区分成16个缓冲队列,在每个缓冲队列的结束点设定通知点./// </summary>/// <returns>是否成功</returns>private bool InitNotifications(){if (null == mRecBuffer){MessageBox.Show("未创建录音缓冲区");return false;}// 创建一个通知事件,当缓冲队列满了就激发该事件. mNotificationEvent = new AutoResetEvent(false);// 创建一个线程管理缓冲区事件if (null == mNotifyThread){mNotifyThread = new Thread(new ThreadStart(Wait Thread));mNotifyThread.Start();}// 设定通知的位置BufferPositionNotify[] PositionNotify = new BufferP ositionNotify[cNotifyNum + 1];for (int i = 0; i < cNotifyNum; i++){PositionNotify[i].Offset = (mNotifySize * i) + mNot ifySize - 1;PositionNotify[i].EventNotifyHandle = mNotificationEvent.Handle;}mNotify = new Notify(mRecBuffer);mNotify.SetNotificationPositions(PositionNotify, cNoti fyNum);return true;}/// <summary>/// 将录制的数据写入wav文件/// </summary>private void RecordCapturedData(){byte[] CaptureData = null;int ReadPos;int CapturePos;int LockSize;mRecBuffer.GetCurrentPosition(out CapturePos, out ReadPos);LockSize = ReadPos - mNextCaptureOffset;if (LockSize < 0)LockSize += mBufferSize;// 对齐缓冲区边界,实际上由于开始设定完整,这个操作是多余的.LockSize -= (LockSize % mNotifySize);if (0 == LockSize)return;// 读取缓冲区内的数据CaptureData = (byte[])mRecBuffer.Read(mNextCaptur eOffset, typeof(byte), LockFlag.None, LockSize);// 写入Wav文件mWriter.Write(CaptureData, 0, CaptureData.Length); // 更新已经录制的数据长度.mSampleCount += CaptureData.Length;// 移动录制数据的起始点,通知消息只负责指示产生消息的位置,并不记录上次录制的位置mNextCaptureOffset += CaptureData.Length;mNextCaptureOffset %= mBufferSize; // Circular bu ffer}/// <summary>/// 接收缓冲区满消息的处理线程/// </summary>private void WaitThread(){while(true){// 等待缓冲区的通知消息mNotificationEvent.WaitOne(Timeout.Infinite, true);// 录制数据RecordCapturedData();}}/// <summary>/// 创建保存的波形文件,并写入必要的文件头./// </summary>private void CreateSoundFile(){/******************************************** ******************************Here is where the file will be created. Awave file is a RIFF file, which has chunksof data that describe what the file contains.A wave RIFF file is put together like this:The 12 byte RIFF chunk is constructed like this:Bytes 0 - 3 : 'R' 'I' 'F' 'F'Bytes 4 - 7 : Length of file, minus the first 8 bytes of the RIFF description.(4 bytes for "WA VE" + 24 bytes for format chunk length +8 bytes for data chunk description + actual sampledata size.)Bytes 8 - 11: 'W' 'A' 'V' 'E'The 24 byte FORMAT chunk is constructed like this:Bytes 0 - 3 : 'f' 'm' 't' ' 'Bytes 4 - 7 : The format chunk length. This is alway s 16.Bytes 8 - 9 : File padding. Always 1.Bytes 10- 11: Number of channels. Either 1 for mon o, or 2 for stereo.Bytes 12- 15: Sample rate.Bytes 16- 19: Number of bytes per second.Bytes 20- 21: Bytes per sample. 1 for 8 bit mono, 2 for 8 bit stereo or16 bit mono, 4 for 16 bit stereo.Bytes 22- 23: Number of bits per sample.The DATA chunk is constructed like this:Bytes 0 - 3 : 'd' 'a' 't' 'a'Bytes 4 - 7 : Length of data, in bytes.Bytes 8 -...: Actual sample data.********************************************* ******************************/// Open up the wave file for writing.mWaveFile = new FileStream(mFileName, FileMode. Create);mWriter = new BinaryWriter(mWaveFile);// Set up file with RIFF chunk info.char[] ChunkRiff = {'R','I','F','F'};char[] ChunkType = {'W','A','V','E'};char[] ChunkFmt = {'f','m','t',' '};char[] ChunkData = {'d','a','t','a'};short shPad = 1; // File paddingint nFormatChunkLength = 0x10; // Format chunk l ength.int nLength = 0; // File length, minus first 8 bytes of RIFF description. This will be filled in later.short shBytesPerSample = 0; // Bytes per sample.// 一个样本点的字节数目if (8 == mWavFormat.BitsPerSample && 1 == mWavFormat.Channels)shBytesPerSample = 1;else if ((8 == mWavFormat.BitsPerSample && 2 = = mWavFormat.Channels) || (16 == mWavFormat.BitsP erSample && 1 == mWavFormat.Channels))shBytesPerSample = 2;else if (16 == mWavFormat.BitsPerSample && 2 = = mWavFormat.Channels)shBytesPerSample = 4;// RIFF 块mWriter.Write(ChunkRiff);mWriter.Write(nLength);mWriter.Write(ChunkType);// WA VE块mWriter.Write(ChunkFmt);mWriter.Write(nFormatChunkLength);mWriter.Write(shPad);mWriter.Write(mWavFormat.Channels);mWriter.Write(mWavFormat.SamplesPerSecond);mWriter.Write(mWavFormat.AverageBytesPerSecond);mWriter.Write(shBytesPerSample);mWriter.Write(mWavFormat.BitsPerSample);// 数据块mWriter.Write(ChunkData);mWriter.Write((int)0); // The sample length will be written in later.}5.外部窗体调用方式声明部分:private SoundRecord recorder = null; // 录音窗体构造函数:recorder = new SoundRecord();启动录音按钮:private void btnStart_Click(object sender, System.Event Args e){//// 录音设置//string wavfile = null;wavfile = “test.wav”;recorder.SetFileName(wavfile);recorder.RecStart();}中止录音按钮:private void btnStop_Click(object sender, System.Event Args e){recorder.RecStop();recorder = null;}6.需要添加的外部引用文件在系统的System32目录下添加以下两个引用文件,如果没有,在DirectX的开发包内可以找到。
DirectSound应用程序开发快速入门(完整版)
![DirectSound应用程序开发快速入门(完整版)](https://img.taocdn.com/s3/m/5ccc033c376baf1ffc4fad00.png)
Directsound应用程序开发快速入门摘要:DirectSound编程的入门介绍,通过实例讲解了如何利用DirectSound最基本的功能-----播放音频,并提供了DirectSound播放音频文件的两种方式(Static buffer 和Streaming buffer ),关键词: Directsound stream buffer ,static buffer wave 文件播放一、配置DirectDounf的开发环境在进行DirectSound开发之前,一定要设置好开发环境,否则编译时会提示你很多东西都找不到定义,DirectSound的开发环境很好设置,简单的说就是包含一些头文件,将lib 文件添加要工程中。
仅仅包含dsound.h肯定是不够的,一般来说,在你的工程中包含下面两个文件就够了。
如果你还想使用Dsound的API的话,那么你就要在你的vc开发环境中添加Dsound..lib 库,如果你的程序还提示有很多的外部链接找不到,那么我建议你可以将下面的库都添加到你的工程中comctl32.lib dxerr9.lib winmm.lib dsound.lib dxguid.lib odbc32.lib odbccp32.lib,这些是我从Dsound提供的例子中得到的,肯定够你用的,如下图开发环境配置好了。
你可以在你的工程中任意使用DirectSound提供的接口和函数了。
下面简单介绍DirectSound开发中要用到的对象。
二、DiectDound几个对象我们首先学习一下Directsound中常用的几个对象,简单学习一下哦DirectSound其实很简单的,主要有下面常用的几个对象。
首先,要创建一个设备对象,然后通过设备对象创建缓冲区对象。
辅助缓冲区由应用程序创建和管理,DirectSound会自动地创建和管理主缓冲区,一般来说,应用程序即使没有获取这个主缓冲区对象的接口也可以播放音频数据,但是,如果应用程序要想得到IDirectSound3DListener8接口,就必须要自己创建一个主缓冲区。
用DirectSound实现增强的音频特技效果
![用DirectSound实现增强的音频特技效果](https://img.taocdn.com/s3/m/e56858d6b14e852458fb57b9.png)
摘要:本文介绍了DirectSound提供的几个基本的音频特技以及其应用方法,并通过一个程序实例演示了如何应用这些特技为你的程序实现增强的音频效果。
关键词:DirectSound 音频特技前段时间写三篇关于DirectSound的文档,包括录音,混音,以及3D音效,也基本上将DirectSound 的开发主要内容涉及到了,因为关于特技这部分在DirectSound的开发文档中介绍的就很简单,加上应用起来也不是很难,本来不想介绍这部分的内容,但是,当我体验过DirectSound的音频特技后,我改变了想法,我觉得DirectSound提供的几个音频特技效果很好,很有震撼力,如果你将这些特技添加到你的程序中,肯定能为你的程序增色不少,况且,接口这么简单,应用起来这么容易。
所以这篇文档我给大家介绍一下DirectSound的基本特技。
DirectSound提供8个基本的音频特技。
1、Chorus 和声,这里说的和声不是指很多人合唱,而是指声音的重叠,即通过原声和回声的重叠,使得声音加宽,加厚。
2、Compression 压限,是针对声音不同部分的音量进行增减也就是说,可以对某段音频中音量低于某一限度的部分进行平滑的音量提升(其余部分不变);对音量高于某一限度的部分进行平滑的音量衰减(其余部分不变),或二者同时作用,简单说,就是平衡音量。
3、Distortion 失真。
4、Echo 回声,模拟声音被远处的平面反射回来的效果。
5、Environmental Reverberation反射(混响),简单说就是声音余韵,音源在空间反射出来的声音。
适当设置混响,可以更真实、更有现场感的再现声音源,也可以起到修饰、美化的作用。
表现宽阔的,传声真实的效果。
6、Flange,一般翻译为波浪特技,用于设置变调效果,通过拷贝失调的声音,或者把某个频率点改变,调节声音分离的时间、音调深度。
可以用来产生颤动、急促的声音。
7、Gargle ,咕噜效果处理。
[笔记]C下利用DirectSound实现声音播放
![[笔记]C下利用DirectSound实现声音播放](https://img.taocdn.com/s3/m/7e9be6046fdb6f1aff00bed5b9f3f90f76c64dee.png)
C#下利用DirectSound实现声音播放第1步:下载并安装DirectX 9 SDKDirectX 9 SDK下载地址:/directx/sdk/ ,目前最新版本是2006年8月,下载包500MB多。
第2步:建立C#应用程序新建一个C#的windows应用程序,名称这里输mydirectXtest。
解决方案管理器里,右击项目,“添加引用”,选中DirectX和DirectSound,如下图:在Form1.cs里面添加:using Microsoft.DirectX;using Microsoft.DirectX.DirectSound;往Form1上面拉一个Label和一个Button,在Button onclick事件里面写入:// 建立声音设备Microsoft.DirectX.DirectSound.Device dev =new Microsoft.DirectX.DirectSound.Device();dev.SetCooperativeLevel(this,Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);// 为声音建立二级缓冲区try...{Microsoft.DirectX.DirectSound.SecondaryBuffer snd =new Microsoft.DirectX.DirectSound.SecondaryBuffer("../../NewDrums.wav", dev);// 播放声音snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);}catch (Exception ex)...{label1.Text = ex.ToString();}Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); ——建立device的类;dev.SetCooperativeLevel(this, Microsoft.DirectX.DirectSound.CooperativeLeve l.Normal); ——设置CooperativeLevel。
DirectSound---3D环境
![DirectSound---3D环境](https://img.taocdn.com/s3/m/87811af8846a561252d380eb6294dd88d0d23de9.png)
DirectSound---3D环境DirectSound对于单声道的Wav⽂件(或者说对于单声道的PCM⾳频数据)提供了内置3D⾳效的模拟,你能够控制每⼀个声源和收听者的⽴体位置,对移动的物体应⽤多普勒效果等等。
在单个应⽤程序中,可以有多个声源,但是只能有⼀个收听者。
1. 3D⾳效概念简介1. 3D坐标:坐标采⽤左⼿笛卡尔坐标系,x轴向右延伸,y轴向上延伸,z轴向前延伸。
2. 3D处理模式: DirectSound由三种3D环境处理模式:普通模式、禁⽤模式、头部相关模式。
普通模式就是完整的3D模式,禁⽤模式不⾔⽽喻,头部相关模式是部分3D模式(因为该模式下所有的声源参数都是参考听者位置的,⽽不是参考原点)。
3. 延迟⽣效:因此每次应⽤3D配置,DirectSound都要进⾏⼤量的计算,可能会家中cpu的负担。
因此,声源和听者都⽀持⼀种叫做延迟设置的⽅式,多个以延迟设置设置的参数需要调⽤提交函数才能应⽤到⾳频数据上,这样可以避免多次重复计算。
1.1 声源(Source)相关概念最⼩距离:在最⼩距离范围内,听到的声源⾳量⼤⼩保持不变;在最⼩距离范围外,听到的⾳量开始成⽐例衰减(例如最⼩距离是10⽶,则听者站在距离声源20⽶处听到的声⾳是原始声⾳的1/2)。
最⼤距离:在最⼤距离外的听者,不管再怎么朝外移动,听到的⾳量都不会再减⼩。
朝向:朝向⽤来指定声源投射的⽅向,具体见下⼀点。
⾳量投射⾓度: 3D环境下的⾳量有⼀个锥形的投射⾓度(当设置朝向时),分内⾓和外⾓:内⾓的声⾳是正常的⾳量,外⾓的⾳量通常是衰减的⾳量,在内⾓边界向外⾓边界过渡时⾳量逐级衰减。
移动速度:移动速度在整个3D环境⾥主要是⽤来计算多普勒效应(Doppler Effect)的。
1.2 听者(Listener)相关概念朝向:听者的朝向⾓度由两个3维向量构成,实际上这个朝向是⼀个平⾯。
两个三维向量都以听者头部中⼼为原点,⼀个向顶部延伸,⼀个向前延伸。
DirectSound实现声卡录音
![DirectSound实现声卡录音](https://img.taocdn.com/s3/m/feac4e3e87c24028915fc32b.png)
利用DirectSound实现声卡录音2005-07-11 08:38?作者:智慧的鱼?出处:天极网?责任编辑:>方舟摘要:本文详细讲述了如何利用DirectSound对经过声卡和麦克风的数据进行捕获,进行录音,并保存为wave格式的文件。
?曾经学习过Directshow的开发,对于Dsound一直没有仔细的学习,以前只是知道Dsound 是做音频开发的,我一直以为它和Dshow的结构体系差不多,经过仔细学习后,发现,其实他们完全两码事。
DirectSound虽然也基于COM,但不象Dshow那样多个的filter组成链表。
闲话少说,下面我们看看DirectSound到底能帮我们做些什么。
1、播放WAVE格式的音频文件或者资源。
2、可以同时播放多个音频。
3、Assign high-priority sounds to hardware-controlled buffers4、播放3D立体声音5、在声音中添加特技效果,比如回声,动态的改变特技的参数等6、将麦克风或者其他音频输入设备的声音录制成wave格式的文件DirectSound就能做这么多事情,到这里,我都有点怀疑DirectSound是不是就是封装了mmio系列和wav系列的函数。
因为这些底层的API也能够完成这些事情。
这里我们主要讨论一下,如果使用Directsound进行录音,并保存成wave格式的文件。
在开始工作之前,要先介绍DirectSound录音用到的三个非常重要的对象:·IDirectSoundCapture8 ,设备对象,根据你录音的设备创建的设备对象,利用该对象可以获取设备的属性。
?·IDirectSoundCaptureBuffer8,缓冲区对象,该对象由设备对象创建,主要用来操作音频数据·IDirectSoundNotify8 ,事件通知对象,该对象用来通知应用程序从缓冲区中将数据取走,写入文件保存起来。
windows声音应用程序开发指南 张新宇 第0章 电脑声音基础
![windows声音应用程序开发指南 张新宇 第0章 电脑声音基础](https://img.taocdn.com/s3/m/fc214b4d2b160b4e767fcf7a.png)
第0章 电脑声音基础
9 ——数字CD音频输入接口(CD_SPDIF):作用是 接收来自光驱的数字音频信号,最大限度地减少声音 失真。光驱的Digital Out接口与声卡上的CD_SPDIF输 入端连接,可以得到比模拟CD音频要更纯净的音质。 10 ——辅助音频输入接口(AUX_IN):负责把来自电
的新一代标准。
第0章 电脑声音基础
3.Creative的AWE 32
Creative Sound Blaster系列声卡发展到Sound Blaster 16这一款,已经是非常成熟的产品体系了。但 是Sound Blaster 16与Sound Blaster、Sound Blaster PRO 一样,在MIDI(电子合成器)方面采用的都是FM合成 技术,对于乐曲的合成效果比较单调乏味。到了20世 纪90年代中期,一种名为“波表合成”的技术开始趋 于流行,在试听效果上远远超越了FM合成。
第0章 电脑声音基础
第0章 电脑声音基础
0.1 声音是一种波[1,2,3] 0.2 电脑如何发声[4,5,6,7,8,9]
0.3 音频基本知识[1, 5,6,7,8,9,10,11,12,13,14,15,16,17]
0.4 本 章 小 结
第0章 电脑声音基础
0.1 声音是一种波[1,2,3]
声音是什么? 在高中物理课里我们了解到,我们在日常生活中所 听见的声音是一种振动的波,波是起伏的,具有周期 性和一定的振动幅度(振幅)。声音的传播主要是由 空气振动完成的,空气振动造成大气压力的疏密变化,
第0章 电脑声音基础
图0-4 1000 Hz的声音波形图(振幅比图0-2的小)
第0章 电脑声音基础
0.2 电脑如何发声[4,5,6,7,8,9]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中华视频网: Ffmpeg 工程组: 佰锐科技:
DirectSound 开发指南
作者:智慧的鱼
中华视频网 整理
一、DirectSound 简介(Introduction to DirectSound)
六、Wave 文件格式以及底层操作函数 API 使用技巧 .................................................. 36
6.1RIFF 文件结构 .........................................................................................................................36 6.2WAVE 文件结构 .......................................................................................................................38 6.3avi 文件结构 .............................................................................................................................39 6.4 多媒体文件输入输出 ..............................................................................................................39 6.5 波形音频的编程(wave 系列函数) .....................................................................................40 6.6AVI 编程 ...................................................................................................................................40
五、DirectSound 接口函数和指针简介 ........................................................................... 35
5.1DSound 常用的接口指针 .........................................................................................................35 5.2Dsound 函数 .............................................................................................................................35 5.3Dsound 常用的结构 .................................................................................................................36
DirectSound 开发指南
作者:智慧的鱼
中华视频网 整理
绪言
DirectSound 是微软多媒体技术 DirectX 的组成部分,封装了大量音频处理 API 函数, 它可以提供快速的混音、 硬件加速功能, 并且可以直接访问相关设备, 当然,最主要的是它提供的功能与现有的设备驱动程序保持兼容性。 重放, 也可以通过控制硬件和相应的 DirectSound 允许进行波型声音的捕获、 驱动来获得更多的服务。 DirectSound 的优势当然和 DirectX 的其它组件一样——速度,它允许你最大 效率的使用硬件,并拥有良好的兼容性。 中华视频网 ( ) 一直致力于语音视频技术的研究和推广, 由于目前有关 DirectX 系列的编程资料比较少,最主要的参考资料还是 DirectX SDK 文档,特别是对于初学者来说,相对来说比较难以入门。早期也收编过多 篇“智慧的鱼”的文章,鉴于本册《DirectSound 开发指南》是一篇比较实用的 关于 DirectSound 编程手册,特收集整理成册,以供后来者学习。 非常感谢“智慧的鱼”前期的辛勤劳动和无私的分享精神!
#include <windows.h> #include <mmsystem.h> #include <mmreg.ht;
如果你还想使用 Dsound 的 API 的话, 那么你就要在你的 vc 开发环境中添加 Dsound..lib 库, 如果你的程序还提示有很多的外部链接找不到, 那么我建议你可以将下面的库都添加到你的 工程中 comctl32.lib dxerr9.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib,这些是我从 Dsound 提供的例子中得到的,肯定够你用的,ok,开发环境配置 好了。 下面我们简单的来学习一下如果通过 Directsound 的 API 播放声音,既然是 breif overview, 那么详细的内容你可以参考下面的一节内容,这里只是简单的介绍一下播放声音的步骤。 第一步,创建一个设备对象。 在你的代码中你可以通过调用 DirectSoundCreat8 函数来创建一个支持 IDirectSound8 接口 的对象,这个对象通常代表缺省的播放设备。当然你可以枚举可用的设备,然后将设备的 GUID 传递给 DirectSoundCreat8 函数。 注意,Directsound 虽然基于 COM,但是你并不需要初始化 com 库,这些 Directsound 都帮 你做好了,当然,如果你使用 DMOs 特技,你就要自己初始化 com 库了,切记。 第二步,创建一个辅助 Buffer,也叫后备缓冲区
3.1Dsound 设备对象(DirectSound Devices) ...................................................................................6 3.2Dsound 的 buffer 对象(DirectSound Buffers) ............................................................................9 3.3Using WAV Data .......................................................................................................................15 3.43-D Sound .................................................................................................................................16 3.5 增加声音特技 Using Effects ...................................................................................................21 3.6 录制 Capturing Waveforms......................................................................................................22
DirectSound 开发指南
作者:智慧的鱼 编辑:中华视频网
中华视频网: 佰锐科技:
DirectSound 开发指南
作者:智慧的鱼
中华视频网 整理
目 录
绪言 ....................................................................................................................................... 3 一、DirectSound 简介( 简介(Introduction to DirectSound) ................................................ 4 二、DirectSound 初体验( 初体验(Getting Started with DirectSound) ................................... 4 三、DirectSound 实用开发技巧 Using DirectSound........................................................ 5
四、DirectSound 开发高级技巧 ....................................................................................... 28
4.1Dsound 驱动模型(DirectSound Driver Models) .................................................................28 4.2 设置硬件的扩展属性(System Property Sets) ....................................................................28 4.3Property Sets for DirectSound Buffers......................................................................................28 4.4 如何优化 Directsound(Optimizing DirectSound Performance) .........................................30 4.5 向主缓冲区写数据(Writing to the Primary Buffer) ...........................................................32