Click here to Skip to main content
15,884,176 members
Articles / Multimedia / DirectX

Sound Experiments in Managed DirectX

Rate me:
Please Sign up or sign in to vote.
4.85/5 (46 votes)
16 Feb 200726 min read 267.5K   4K   118  
Using static and streaming sound buffers in Managed DirectX.
using System.Text;
using Microsoft.DirectX.DirectSound;

namespace StreamComputers.Riff
{
	/// <summary>
	/// Contains static functions for developers working with MDX WAVE files and Buffers.
	/// </summary>
	public class MdxInfo
	{
		private MdxInfo() {}

		/// <summary>
		/// Returns a string representation of MDXWaveFormat properties.
		/// </summary>
		/// <param name="wf">MDX WaveFormat struct instance</param>
		/// <returns>7-line string representation of properties</returns>
		public static string WaveFormatAsString(WaveFormat wf)
		{
			StringBuilder wfs = new StringBuilder("MDX WaveFormat Properties:\n");
			wfs.AppendFormat("AverageBytesPerSecond:  {0}\n", wf.AverageBytesPerSecond);
			wfs.AppendFormat("BitsPerSample:          {0}\n", wf.BitsPerSample );
			wfs.AppendFormat("BlockAlign:             {0}\n", wf.BlockAlign );
			wfs.AppendFormat("Channels:               {0}\n", wf.Channels );
			wfs.AppendFormat("FormatTag:              {0}\n", wf.FormatTag );
			wfs.AppendFormat("SamplesPerSecond:       {0}\n", wf.SamplesPerSecond );
			return wfs.ToString();
		}

		/// <summary>
		///  Returns a string representation of BufferCaps properties.
		/// </summary>
		/// <param name="bc">MDX BufferCaps struct instance</param>
		/// <returns>19=line string representation of properties</returns>
		public static string BufferCapsAsString(BufferCaps bc)
		{
			StringBuilder bufCaps = new StringBuilder("MDX BufferCaps Properties:\n");
			bufCaps.AppendFormat("BufferBytes:             {0}\n", bc.BufferBytes);
			bufCaps.AppendFormat("CanGetCurrentPosition:   {0}\n", bc.CanGetCurrentPosition);
			bufCaps.AppendFormat("Control3D:               {0}\n", bc.Control3D);
			bufCaps.AppendFormat("ControlEffects:          {0}\n", bc.ControlEffects);
			bufCaps.AppendFormat("ControlFrequency:        {0}\n", bc.ControlFrequency);
			bufCaps.AppendFormat("ControlPan:              {0}\n", bc.ControlPan);
			bufCaps.AppendFormat("ControlPositionNotify:   {0}\n", bc.ControlPositionNotify);
			bufCaps.AppendFormat("ControlVolume:           {0}\n", bc.ControlVolume);
			bufCaps.AppendFormat("GlobalFocus:             {0}\n", bc.GlobalFocus);
			bufCaps.AppendFormat("LocateInHardware:        {0}\n", bc.LocateInHardware);
			bufCaps.AppendFormat("LocateInSoftware:        {0}\n", bc.LocateInSoftware);
			bufCaps.AppendFormat("LocationDefer:           {0}\n", bc.LocationDefer);
			bufCaps.AppendFormat("Mute3DAtMaximumDistance: {0}\n", bc.Mute3DAtMaximumDistance);
			bufCaps.AppendFormat("PlayCpuOverhead:         {0}\n", bc.PlayCpuOverhead);
			bufCaps.AppendFormat("PrimaryBuffer:           {0}\n", bc.PrimaryBuffer);
			bufCaps.AppendFormat("StaticBuffer:            {0}\n", bc.StaticBuffer);
			bufCaps.AppendFormat("StickyFocus:             {0}\n", bc.StickyFocus);
			bufCaps.AppendFormat("UnlockTransferRate:      {0}\n", bc.UnlockTransferRate);
			return bufCaps.ToString();

		}
	}

}




By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Software Developer (Senior)
United States United States
My life and career have been a bit unusual (mostly in good ways). So, I'm grateful every day for the opportunities God's given me to do different things and see different aspects of life.

Education: B.S. Physics '73 (atmospheric physics, sounding rockets), M.S. Computer Science '76 (radio astronomy, fuzzy controllers, music pattern recognition and visualization) New Mexico Tech; Ph.D. Engineering '83 (parallel computer architecture, digital signal processing, economics) U.C. Berkeley.

I'm married to Susan, a wonderful woman whom I met in a Computer Architecture class at U.C. Berkeley.

Professional activities: Digital systems engineer, digital audio pioneer, founder or key in several tech startups, consulting engineer, expert witness. I'm currently developing a multithreading framework in C# .NET, that makes it almost easy to write correct programs for multicore processors. I'm also implementing a new transform for recognizing, editing, and processing signals, especially sound.

I'm an occasional essayist, public speaker, and podcaster, and free-market space advocate. I enjoy good wine, good music, good friends, and cats.

If you think your project could use a different point of view, I'm available for consulting work in the San Francisco Bay area, or (preferrably) via the net.

Comments and Discussions