|
///+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES
// OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// � 2006 Gary W. Schwede Stream Computers, Inc. All rights reserved.
// Contact: gary at streamcomputers dot com. Permission to incorporate
// all or part of this code in your application is given on the condition
// that this notice accompanies it in your code and documentation.
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
using System;
using Microsoft.DirectX.DirectSound;
namespace StreamComputers.MdxDirectSound
{
#region IPlayable declarations
/// <summary>
/// Defines the three classic audio player buttons and their functions.
/// </summary>
public interface IPlayable
{
/// <summary>
/// Start playing the sound file, or resume playing from paused state.
/// </summary>
void Play();
/// <summary>
/// Pause playing the sound file, or resume playing from paused state.
/// If sound file is not playing nor paused, has no effect.
/// </summary>
/// <returns>Buffer.PlayPosition at time of call [bytes]</returns>
int Pause();
/// <summary>
/// Stops play of the sound file and resets play position to the beginning.
/// If sound file is not playing, has no effect.
/// </summary>
void Stop();
}
#endregion
#region MdxSoundBuffer Base Class
/// <summary>
/// Base class for implementations of Managed DirectX ("MDX") DirectSound SecondaryBuffers.
/// Each instance is associated with a single RIFF WAVE file specified at construction.
/// </summary>
public abstract class MdxSoundBuffer : IPlayable, IDisposable
{
protected SecondaryBuffer m_SecondaryBuffer;
protected bool m_Paused;
private bool m_Disposed;
public int BufferLength
{
get
{
return m_SecondaryBuffer.Caps.BufferBytes;
}
}
protected MdxSoundBuffer()
{}
#region IPlayable Members
/// <summary>
/// Derived classes must call this method first.
/// </summary>
public virtual void Play()
{
if(Disposed)
{
throw new ObjectDisposedException("MdxSoundBuffer");
}
}
public virtual int Pause()
{
if(Disposed)
{
throw new ObjectDisposedException("MdxSoundBuffer");
}
return 0;
}
public virtual void Stop()
{
if(Disposed)
{
throw new ObjectDisposedException("MdxSoundBuffer");
}
}
#endregion
#region Finalization
// � 2005 IDesign Inc. Used by permission.
protected bool Disposed
{
get
{
lock(this)
{
return m_Disposed;
}
}
}
// � 2005 IDesign Inc. Used by permission.
public void Dispose()
{
lock(this)
{
if(m_Disposed == false)
{
Cleanup();
m_Disposed = true;
GC.SuppressFinalize(this);
}
}
}
protected virtual void Cleanup()
{
if (m_SecondaryBuffer != null)
{
m_SecondaryBuffer.Dispose();
m_SecondaryBuffer = null; // hint to GC
}
}
~MdxSoundBuffer()
{
Cleanup();
}
#endregion
}
#endregion
}
|
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.
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.