// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace SharpDX.DirectSound { public partial class DirectSound { /// /// Initializes a new instance of the class. /// public DirectSound() : base(IntPtr.Zero) { DSound.Create8(null, this, null); } /// /// Initializes a new instance of the class. /// /// The driver GUID. public DirectSound(Guid driverGuid) : base(IntPtr.Zero) { DSound.Create8(driverGuid, this, null); } /// /// Verifies the certification. /// /// Return true if the driver is certified public bool IsCertified { get { int verify; this.VerifyCertification(out verify); return verify == 0; } } /// /// Retrieves the speaker configuration of the device. /// /// /// public void GetSpeakerConfiguration(out SpeakerConfiguration speakerSet, out SpeakerGeometry geometry) { int speakerConfig; GetSpeakerConfiguration(out speakerConfig); speakerSet = (SpeakerConfiguration)(speakerConfig & 0xFFFF); geometry = (SpeakerGeometry)(speakerConfig >> 16); } /// /// Sets the speaker configuration of the device. /// /// /// public void SetSpeakerConfiguration(SpeakerConfiguration speakerSet, SpeakerGeometry geometry) { SetSpeakerConfiguration(((int)speakerSet) | (((int)geometry) << 16)); } /// /// Enumerates the DirectSound devices installed in the system. /// /// A collection of the devices found. public static List GetDevices() { var callback = new EnumDelegateCallback(); DSound.EnumerateW(callback.NativePointer, IntPtr.Zero); return callback.Informations; } /// /// Duplicates the sound buffer. /// /// The source buffer. /// A duplicate of this soundBuffer. /// HRESULT IDirectSound::DuplicateSoundBuffer([In] IDirectSoundBuffer* pDSBufferOriginal,[Out] void** ppDSBufferDuplicate) /// IDirectSound::DuplicateSoundBuffer public SoundBuffer DuplicateSoundBuffer(SoundBuffer sourceBuffer) { IntPtr soundBufferPtr; var result = DuplicateSoundBuffer(sourceBuffer, out soundBufferPtr); SoundBuffer soundBuffer = null; if (result.Success && soundBufferPtr != IntPtr.Zero) { soundBuffer = QueryInterfaceOrNull(soundBufferPtr) ?? (SoundBuffer)QueryInterfaceOrNull(soundBufferPtr); } if (soundBuffer != null) { Marshal.Release(soundBufferPtr); } return soundBuffer; } } }