Skip to content

Commit

Permalink
adding missing XML comments to NAudio.WinMM
Browse files Browse the repository at this point in the history
  • Loading branch information
markheath committed Feb 13, 2024
1 parent ce64f27 commit fb1c044
Show file tree
Hide file tree
Showing 6 changed files with 188 additions and 2 deletions.
12 changes: 10 additions & 2 deletions NAudio.Core/FileFormats/Wav/WaveFileChunkReader.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using NAudio.Utils;
using NAudio.Wave;
using System.Diagnostics;

namespace NAudio.FileFormats.Wav
{
/// <summary>
/// Reader of RIFF chunks from a WAV file
/// </summary>
public class WaveFileChunkReader
{
private WaveFormat waveFormat;
Expand All @@ -19,12 +21,18 @@ public class WaveFileChunkReader
private readonly bool storeAllChunks;
private long riffSize;

/// <summary>
/// Creates a new WaveFileChunkReader
/// </summary>
public WaveFileChunkReader()
{
storeAllChunks = true;
strictMode = false;
}

/// <summary>
/// Read the WAV header
/// </summary>
public void ReadWaveHeader(Stream stream)
{
this.dataChunkPosition = -1;
Expand Down
7 changes: 7 additions & 0 deletions NAudio.Core/Wave/WaveStreams/Mp3FileReaderBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ public Mp3FileReaderBase(Stream inputStream, FrameDecompressorBuilder frameDecom

}

/// <summary>
/// Constructor that takes an input stream and a frame decompressor builder
/// </summary>
/// <param name="inputStream">Input stream</param>
/// <param name="frameDecompressorBuilder">Factory method to build a frame decompressor</param>
/// <param name="ownInputStream">Whether we own the stream and should dispose it</param>
/// <exception cref="ArgumentNullException"></exception>
protected Mp3FileReaderBase(Stream inputStream, FrameDecompressorBuilder frameDecompressorBuilder, bool ownInputStream)
{
if (inputStream == null) throw new ArgumentNullException(nameof(inputStream));
Expand Down
51 changes: 51 additions & 0 deletions NAudio.WinMM/MmeInterop/MmTime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,87 @@ namespace NAudio.Wave
[StructLayout(LayoutKind.Explicit)]
public struct MmTime
{
/// <summary>
/// Time in milliseconds.
/// </summary>
public const int TIME_MS = 0x0001;
/// <summary>
/// Number of waveform-audio samples.
/// </summary>
public const int TIME_SAMPLES = 0x0002;
/// <summary>
/// Current byte offset from beginning of the file.
/// </summary>
public const int TIME_BYTES = 0x0004;

/// <summary>
/// Time format.
/// </summary>
[FieldOffset(0)]
public UInt32 wType;
/// <summary>
/// Number of milliseconds. Used when wType is TIME_MS.
/// </summary>
[FieldOffset(4)]
public UInt32 ms;
/// <summary>
/// Number of samples. Used when wType is TIME_SAMPLES.
/// </summary>
[FieldOffset(4)]
public UInt32 sample;
/// <summary>
/// Byte count. Used when wType is TIME_BYTES.
/// </summary>
[FieldOffset(4)]
public UInt32 cb;
/// <summary>
/// Ticks in MIDI stream. Used when wType is TIME_TICKS.
/// </summary>
[FieldOffset(4)]
public UInt32 ticks;
/// <summary>
/// SMPTE time structure - hours. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(4)]
public Byte smpteHour;
/// <summary>
/// SMPTE time structure - minutes. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(5)]
public Byte smpteMin;
/// <summary>
/// SMPTE time structure - seconds. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(6)]
public Byte smpteSec;
/// <summary>
/// SMPTE time structure - frames. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(7)]
public Byte smpteFrame;
/// <summary>
/// SMPTE time structure - frames per second. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(8)]
public Byte smpteFps;
/// <summary>
/// SMPTE time structure - dummy byte for alignment. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(9)]
public Byte smpteDummy;
/// <summary>
/// SMPTE time structure - padding. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(10)]
public Byte smptePad0;
/// <summary>
/// SMPTE time structure - padding. Used when wType is TIME_SMPTE.
/// </summary>
[FieldOffset(11)]
public Byte smptePad1;
/// <summary>
/// MIDI time structure. Used when wType is TIME_MIDI.
/// </summary>
[FieldOffset(4)]
public UInt32 midiSongPtrPos;
}
Expand Down
12 changes: 12 additions & 0 deletions NAudio.WinMM/MmeInterop/WaveInCapabilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,22 @@ public bool SupportsWaveFormat(SupportedWaveFormat waveFormat)

}

/// <summary>
/// Wave Capabilities Helpers
/// </summary>
public static class WaveCapabilitiesHelpers
{
/// <summary>
/// Microsoft default manufacturer id
/// </summary>
public static readonly Guid MicrosoftDefaultManufacturerId = new Guid("d5a47fa8-6d98-11d1-a21a-00a0c9223196");
/// <summary>
/// Default wave out guid
/// </summary>
public static readonly Guid DefaultWaveOutGuid = new Guid("E36DC310-6D9A-11D1-A21A-00A0C9223196");
/// <summary>
/// Default wave in guid
/// </summary>
public static readonly Guid DefaultWaveInGuid = new Guid("E36DC311-6D9A-11D1-A21A-00A0C9223196");

/// <summary>
Expand Down
96 changes: 96 additions & 0 deletions NAudio.WinMM/MmeInterop/WaveInterop.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ namespace NAudio.Wave
/// </summary>
public class WaveInterop
{
/// <summary>
/// WaveInOut Open Flags
/// </summary>
[Flags]
public enum WaveInOutOpenFlags
{
Expand Down Expand Up @@ -46,6 +49,9 @@ public enum WaveInOutOpenFlags
//public const int TIME_SAMPLES = 0x0002; // number of wave samples
//public const int TIME_BYTES = 0x0004; // current byte offset

/// <summary>
/// Wave Message
/// </summary>
public enum WaveMessage
{
/// <summary>
Expand Down Expand Up @@ -78,89 +84,179 @@ public enum WaveMessage
// use the userdata as a reference
// WaveOutProc http://msdn.microsoft.com/en-us/library/dd743869%28VS.85%29.aspx
// WaveInProc http://msdn.microsoft.com/en-us/library/dd743849%28VS.85%29.aspx
/// <summary>
/// Wave Callback
/// </summary>
public delegate void WaveCallback(IntPtr hWaveOut, WaveMessage message, IntPtr dwInstance, WaveHeader wavhdr, IntPtr dwReserved);

/// <summary>
/// Convert a mmio string to FOURCC
/// </summary>
[DllImport("winmm.dll")]
public static extern Int32 mmioStringToFOURCC([MarshalAs(UnmanagedType.LPStr)] String s, int flags);

/// <summary>
/// Get number of WaveOut devices
/// </summary>
[DllImport("winmm.dll")]
public static extern Int32 waveOutGetNumDevs();
/// <summary>
/// Prepare wave out header
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutPrepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);
/// <summary>
/// Unprepare WaveOut header
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutUnprepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);
/// <summary>
/// Write to WaveOut device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutWrite(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

// http://msdn.microsoft.com/en-us/library/dd743866%28VS.85%29.aspx
/// <summary>
/// Open WaveOut Device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutOpen(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

/// <summary>
/// Open WaveOut Device with window callback
/// </summary>
[DllImport("winmm.dll", EntryPoint = "waveOutOpen")]
public static extern MmResult waveOutOpenWindow(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);


/// <summary>
/// Reset WaveOut device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutReset(IntPtr hWaveOut);

/// <summary>
/// Close WaveOut device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutClose(IntPtr hWaveOut);

/// <summary>
/// Pause WaveOut device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutPause(IntPtr hWaveOut);

/// <summary>
/// Restart WaveOut device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutRestart(IntPtr hWaveOut);

// http://msdn.microsoft.com/en-us/library/dd743863%28VS.85%29.aspx
/// <summary>
/// Get WaveOut device position
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutGetPosition(IntPtr hWaveOut, ref MmTime mmTime, int uSize);

// http://msdn.microsoft.com/en-us/library/dd743874%28VS.85%29.aspx
/// <summary>
/// Set WaveOut device volume
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutSetVolume(IntPtr hWaveOut, int dwVolume);

/// <summary>
/// Get WaveOut device volume
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveOutGetVolume(IntPtr hWaveOut, out int dwVolume);

// http://msdn.microsoft.com/en-us/library/dd743857%28VS.85%29.aspx
/// <summary>
/// Get WaveOut device capabilities
/// </summary>
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern MmResult waveOutGetDevCaps(IntPtr deviceID, out WaveOutCapabilities waveOutCaps, int waveOutCapsSize);

/// <summary>
/// Get number of WaveIn devices
/// </summary>
[DllImport("winmm.dll")]
public static extern Int32 waveInGetNumDevs();

// http://msdn.microsoft.com/en-us/library/dd743841%28VS.85%29.aspx
/// <summary>
/// Get WaveIn Device capabilities
/// </summary>
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern MmResult waveInGetDevCaps(IntPtr deviceID, out WaveInCapabilities waveInCaps, int waveInCapsSize);

// http://msdn.microsoft.com/en-us/library/dd743838%28VS.85%29.aspx
/// <summary>
/// Add WaveIn Buffer
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInAddBuffer(IntPtr hWaveIn, WaveHeader pwh, int cbwh);
/// <summary>
/// Close WaveIn device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInClose(IntPtr hWaveIn);

// http://msdn.microsoft.com/en-us/library/dd743847%28VS.85%29.aspx
/// <summary>
/// Open WaveIn Device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInOpen(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

/// <summary>
/// Open WaveIn Device with Window callbacks
/// </summary>
[DllImport("winmm.dll", EntryPoint = "waveInOpen")]
public static extern MmResult waveInOpenWindow(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

// http://msdn.microsoft.com/en-us/library/dd743848%28VS.85%29.aspx
/// <summary>
/// Prepare WaveIn Header
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInPrepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

/// <summary>
/// Unprepare WaveIn Header
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInUnprepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

// http://msdn.microsoft.com/en-us/library/dd743850%28VS.85%29.aspx
/// <summary>
/// Reset WaveIn Device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInReset(IntPtr hWaveIn);

// http://msdn.microsoft.com/en-us/library/dd743851%28VS.85%29.aspx
/// <summary>
/// Start WaveIn device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInStart(IntPtr hWaveIn);

// http://msdn.microsoft.com/en-us/library/dd743852%28VS.85%29.aspx
/// <summary>
/// Stop WaveIn Device
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInStop(IntPtr hWaveIn);

// https://msdn.microsoft.com/en-us/library/Dd743845(v=VS.85).aspx
/// <summary>
/// Get WaveIn Device Position
/// </summary>
[DllImport("winmm.dll")]
public static extern MmResult waveInGetPosition(IntPtr hWaveIn, out MmTime mmTime, int uSize);

Expand Down
12 changes: 12 additions & 0 deletions NAudio.WinMM/WaveOutUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@
// ReSharper disable once CheckNamespace
namespace NAudio.Wave
{
/// <summary>
/// WaveOutUtils
/// </summary>
public static class WaveOutUtils
{
/// <summary>
/// Get WaveOut Volume
/// </summary>
public static float GetWaveOutVolume(IntPtr hWaveOut, object lockObject)
{
int stereoVolume;
Expand All @@ -18,6 +24,9 @@ public static float GetWaveOutVolume(IntPtr hWaveOut, object lockObject)
return (stereoVolume & 0xFFFF) / (float)0xFFFF;
}

/// <summary>
/// Set WaveOut Volume
/// </summary>
public static void SetWaveOutVolume(float value, IntPtr hWaveOut, object lockObject)
{
if (value < 0) throw new ArgumentOutOfRangeException(nameof(value), "Volume must be between 0.0 and 1.0");
Expand All @@ -34,6 +43,9 @@ public static void SetWaveOutVolume(float value, IntPtr hWaveOut, object lockObj
MmException.Try(result, "waveOutSetVolume");
}

/// <summary>
/// Get position in bytes
/// </summary>
public static long GetPositionBytes(IntPtr hWaveOut, object lockObject)
{
lock (lockObject)
Expand Down

0 comments on commit fb1c044

Please sign in to comment.