NAudio.Win8 a-law decoder based on code from: http://hazelware.luggle.com/tutorials/mulawcompression.html only 512 bytes required, so just use a lookup Converts an a-law encoded byte to a 16 bit linear sample a-law encoded byte Linear sample A-law encoder Encodes a single 16 bit sample to a-law 16 bit PCM sample a-law encoded byte SpanDSP - a series of DSP components for telephony g722_decode.c - The ITU G.722 codec, decode part. Written by Steve Underwood <steveu@coppice.org> Copyright (C) 2005 Steve Underwood Ported to C# by Mark Heath 2011 Despite my general liking of the GPL, I place my own contributions to this code in the public domain for the benefit of all mankind - even the slimy ones who might try to proprietize my work and use it to my detriment. Based in part on a single channel G.722 codec which is: Copyright (c) CMU 1993 Computer Science, Speech Group Chengxiang Lu and Alex Hauptmann hard limits to 16 bit samples Decodes a buffer of G722 Codec state Output buffer (to contain decompressed PCM samples) Number of bytes in input G722 data to decode Number of samples written into output buffer Encodes a buffer of G722 Codec state Output buffer (to contain encoded G722) PCM 16 bit samples to encode Number of samples in the input buffer to encode Number of encoded bytes written into output buffer Stores state to be used between calls to Encode or Decode Creates a new instance of G722 Codec State for a new encode or decode session Bitrate (typically 64000) Special options ITU Test Mode TRUE if the operating in the special ITU test mode, with the band split filters disabled. TRUE if the G.722 data is packed 8kHz Sampling TRUE if encode from 8k samples/second Bits Per Sample 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. Signal history for the QMF (x) Band In bit buffer Number of bits in InBuffer Out bit buffer Number of bits in OutBuffer Band data for G722 Codec s sp sz r a ap p d b bp sg nb det G722 Flags None Using a G722 sample rate of 8000 Packed mu-law decoder based on code from: http://hazelware.luggle.com/tutorials/mulawcompression.html only 512 bytes required, so just use a lookup Converts a mu-law encoded byte to a 16 bit linear sample mu-law encoded byte Linear sample mu-law encoder based on code from: http://hazelware.luggle.com/tutorials/mulawcompression.html Encodes a single 16 bit sample to mu-law 16 bit PCM sample mu-law encoded byte Audio Capture Client Gets a pointer to the buffer Pointer to the buffer Gets a pointer to the buffer Number of frames to read Buffer flags Pointer to the buffer Gets the size of the next packet Release buffer Number of frames written Release the COM object Windows CoreAudio AudioClient Initializes the Audio Client Share Mode Stream Flags Buffer Duration Periodicity Wave Format Audio Session GUID (can be null) Determines whether if the specified output format is supported The share mode. The desired format. True if the format is supported Determines if the specified output format is supported in shared mode Share Mode Desired Format Output The closest match format. True if the format is supported Starts the audio stream Stops the audio stream. Set the Event Handle for buffer synchro. The Wait Handle to setup Resets the audio stream Reset is a control method that the client calls to reset a stopped audio stream. Resetting the stream flushes all pending data and resets the audio clock stream position to 0. This method fails if it is called on a stream that is not stopped Dispose Retrieves the stream format that the audio engine uses for its internal processing of shared-mode streams. Can be called before initialize Retrieves the size (maximum capacity) of the audio buffer associated with the endpoint. (must initialize first) Retrieves the maximum latency for the current stream and can be called any time after the stream has been initialized. Retrieves the number of frames of padding in the endpoint buffer (must initialize first) Retrieves the length of the periodic interval separating successive processing passes by the audio engine on the data in the endpoint buffer. (can be called before initialize) Gets the minimum device period (can be called before initialize) Returns the AudioStreamVolume service for this AudioClient. This returns the AudioStreamVolume object ONLY for shared audio streams. This is thrown when an exclusive audio stream is being used. Gets the AudioClockClient service Gets the AudioRenderClient service Gets the AudioCaptureClient service Audio Client Buffer Flags None AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY AUDCLNT_BUFFERFLAGS_SILENT AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR The AudioClientProperties structure is used to set the parameters that describe the properties of the client's audio stream. http://msdn.microsoft.com/en-us/library/windows/desktop/hh968105(v=vs.85).aspx The size of the buffer for the audio stream. Boolean value to indicate whether or not the audio stream is hardware-offloaded An enumeration that is used to specify the category of the audio stream. A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. AUDCLNT_SHAREMODE AUDCLNT_SHAREMODE_SHARED, AUDCLNT_SHAREMODE_EXCLUSIVE AUDCLNT_STREAMFLAGS None AUDCLNT_STREAMFLAGS_CROSSPROCESS AUDCLNT_STREAMFLAGS_LOOPBACK AUDCLNT_STREAMFLAGS_EVENTCALLBACK AUDCLNT_STREAMFLAGS_NOPERSIST Defines values that describe the characteristics of an audio stream. No stream options. The audio stream is a 'raw' stream that bypasses all signal processing except for endpoint specific, always-on processing in the APO, driver, and hardware. Audio Clock Client Get Position Dispose Characteristics Frequency Adjusted Position Can Adjust Position Audio Endpoint Volume Volume Step Up Volume Step Down Creates a new Audio endpoint volume IAudioEndpointVolume COM interface Dispose Finalizer On Volume Notification Volume Range Hardware Support Step Information Channels Master Volume Level Master Volume Level Scalar Mute Audio Endpoint Volume Channel Volume Level Volume Level Scalar Audio Endpoint Volume Channels Channel Count Indexer - get a specific channel Audio Endpoint Volume Notifiaction Delegate Audio Volume Notification Data Audio Endpoint Volume Step Information Step StepCount Audio Endpoint Volume Volume Range Minimum Decibels Maximum Decibels Increment Decibels Audio Meter Information Peak Values Hardware Support Master Peak Value Audio Meter Information Channels Metering Channel Count Get Peak value Channel index Peak value Audio Render Client Gets a pointer to the buffer Number of frames requested Pointer to the buffer Release buffer Number of frames written Buffer flags Release the COM object AudioSessionControl object for information regarding an audio session Constructor. Dispose Finalizer the grouping param for an audio session grouping For chanigng the grouping param and supplying the context of said change Registers an even client for callbacks Unregisters an event client from receiving callbacks Audio meter information of the audio session. Simple audio volume of the audio session (for volume and mute status). The current state of the audio session. The name of the audio session. the path to the icon shown in the mixer. The session identifier of the audio session. The session instance identifier of the audio session. The process identifier of the audio session. Is the session a system sounds session. AudioSessionEvents callback implementation Windows CoreAudio IAudioSessionControl interface Defined in AudioPolicy.h Notifies the client that the display name for the session has changed. The new display name for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the display icon for the session has changed. The path for the new display icon for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the volume level or muting state of the session has changed. The new volume level for the audio session. The new muting state. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the volume level of an audio channel in the session submix has changed. The channel count. An array of volumnes cooresponding with each channel index. The number of the channel whose volume level changed. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the grouping parameter for the session has changed. The new grouping parameter for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the stream-activity state of the session has changed. The new session state. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the session has been disconnected. The reason that the audio session was disconnected. An HRESULT code indicating whether the operation succeeded of failed. Constructor. Notifies the client that the display name for the session has changed. The new display name for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the display icon for the session has changed. The path for the new display icon for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the volume level or muting state of the session has changed. The new volume level for the audio session. The new muting state. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the volume level of an audio channel in the session submix has changed. The channel count. An array of volumnes cooresponding with each channel index. The number of the channel whose volume level changed. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the grouping parameter for the session has changed. The new grouping parameter for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the stream-activity state of the session has changed. The new session state. An HRESULT code indicating whether the operation succeeded of failed. Notifies the client that the session has been disconnected. The reason that the audio session was disconnected. An HRESULT code indicating whether the operation succeeded of failed. AudioSessionManager Designed to manage audio sessions and in particuar the SimpleAudioVolume interface to adjust a session volume Refresh session of current device. Dispose. Finalizer. Occurs when audio session has been added (for example run another program that use audio playback). SimpleAudioVolume object for adjusting the volume for the user session AudioSessionControl object for registring for callbacks and other session information Returns list of sessions of current device. Windows CoreAudio IAudioSessionNotification interface Defined in AudioPolicy.h session being added An HRESULT code indicating whether the operation succeeded of failed. Specifies the category of an audio stream. Other audio stream. Media that will only stream when the app is in the foreground. Media that can be streamed when the app is in the background. Real-time communications, such as VOIP or chat. Alert sounds. Sound effects. Game sound effects. Background audio for games. Manages the AudioStreamVolume for the . Verify that the channel index is valid. Return the current stream volumes for all channels An array of volume levels between 0.0 and 1.0 for each channel in the audio stream. Return the current volume for the requested channel. The 0 based index into the channels. The volume level for the channel between 0.0 and 1.0. Set the volume level for each channel of the audio stream. An array of volume levels (between 0.0 and 1.0) one for each channel. A volume level MUST be supplied for reach channel in the audio stream. Thrown when does not contain elements. Sets the volume level for one channel in the audio stream. The 0-based index into the channels to adjust the volume of. The volume level between 0.0 and 1.0 for this channel of the audio stream. Dispose Release/cleanup objects during Dispose/finalization. True if disposing and false if being finalized. Returns the current number of channels in this audio stream. Audio Volume Notification Data Audio Volume Notification Data Event Context Muted Master Volume Channels Channel Volume The EDataFlow enumeration defines constants that indicate the direction in which audio data flows between an audio endpoint device and an application Audio rendering stream. Audio data flows from the application to the audio endpoint device, which renders the stream. Audio capture stream. Audio data flows from the audio endpoint device that captures the stream, to the application Audio rendering or capture stream. Audio data can flow either from the application to the audio endpoint device, or from the audio endpoint device to the application. Device State DEVICE_STATE_ACTIVE DEVICE_STATE_DISABLED DEVICE_STATE_NOTPRESENT DEVICE_STATE_UNPLUGGED DEVICE_STATEMASK_ALL Endpoint Hardware Support Volume Mute Meter is defined in WTypes.h AUDCLNT_E_NOT_INITIALIZED AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_E_DEVICE_IN_USE Windows CoreAudio IAudioClient interface Defined in AudioClient.h The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. The GetService method accesses additional services from the audio client object. The interface ID for the requested service. Pointer to a pointer variable into which the method writes the address of an instance of the requested interface. Defined in AudioClient.h Defined in AudioClient.h Windows CoreAudio IAudioSessionControl interface Defined in AudioPolicy.h Retrieves the current state of the audio session. Receives the current session state. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the display name for the audio session. Receives a string that contains the display name. An HRESULT code indicating whether the operation succeeded of failed. Assigns a display name to the current audio session. A string that contains the new display name for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the path for the display icon for the audio session. Receives a string that specifies the fully qualified path of the file that contains the icon. An HRESULT code indicating whether the operation succeeded of failed. Assigns a display icon to the current session. A string that specifies the fully qualified path of the file that contains the new icon. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the grouping parameter of the audio session. Receives the grouping parameter ID. An HRESULT code indicating whether the operation succeeded of failed. Assigns a session to a grouping of sessions. The new grouping parameter ID. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Registers the client to receive notifications of session events, including changes in the session state. A client-implemented interface. An HRESULT code indicating whether the operation succeeded of failed. Deletes a previous registration by the client to receive notifications. A client-implemented interface. An HRESULT code indicating whether the operation succeeded of failed. Windows CoreAudio IAudioSessionControl interface Defined in AudioPolicy.h Retrieves the current state of the audio session. Receives the current session state. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the display name for the audio session. Receives a string that contains the display name. An HRESULT code indicating whether the operation succeeded of failed. Assigns a display name to the current audio session. A string that contains the new display name for the session. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the path for the display icon for the audio session. Receives a string that specifies the fully qualified path of the file that contains the icon. An HRESULT code indicating whether the operation succeeded of failed. Assigns a display icon to the current session. A string that specifies the fully qualified path of the file that contains the new icon. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the grouping parameter of the audio session. Receives the grouping parameter ID. An HRESULT code indicating whether the operation succeeded of failed. Assigns a session to a grouping of sessions. The new grouping parameter ID. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Registers the client to receive notifications of session events, including changes in the session state. A client-implemented interface. An HRESULT code indicating whether the operation succeeded of failed. Deletes a previous registration by the client to receive notifications. A client-implemented interface. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the identifier for the audio session. Receives the session identifier. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the identifier of the audio session instance. Receives the identifier of a particular instance. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the process identifier of the audio session. Receives the process identifier of the audio session. An HRESULT code indicating whether the operation succeeded of failed. Indicates whether the session is a system sounds session. An HRESULT code indicating whether the operation succeeded of failed. Enables or disables the default stream attenuation experience (auto-ducking) provided by the system. A variable that enables or disables system auto-ducking. An HRESULT code indicating whether the operation succeeded of failed. Defines constants that indicate the current state of an audio session. MSDN Reference: http://msdn.microsoft.com/en-us/library/dd370792.aspx The audio session is inactive. The audio session is active. The audio session has expired. Defines constants that indicate a reason for an audio session being disconnected. MSDN Reference: Unknown The user removed the audio endpoint device. The Windows audio service has stopped. The stream format changed for the device that the audio session is connected to. The user logged off the WTS session that the audio session was running in. The WTS session that the audio session was running in was disconnected. The (shared-mode) audio session was disconnected to make the audio endpoint device available for an exclusive-mode connection. interface to receive session related events notification of volume changes including muting of audio session the current volume the current mute state, true muted, false otherwise notification of display name changed the current display name notification of icon path changed the current icon path notification of the client that the volume level of an audio channel in the session submix has changed The channel count. An array of volumnes cooresponding with each channel index. The number of the channel whose volume level changed. notification of the client that the grouping parameter for the session has changed >The new grouping parameter for the session. notification of the client that the stream-activity state of the session has changed The new session state. notification of the client that the session has been disconnected The reason that the audio session was disconnected. Windows CoreAudio IAudioSessionManager interface Defined in AudioPolicy.h Retrieves an audio session control. A new or existing session ID. Audio session flags. Receives an interface for the audio session. An HRESULT code indicating whether the operation succeeded of failed. Retrieves a simple audio volume control. A new or existing session ID. Audio session flags. Receives an interface for the audio session. An HRESULT code indicating whether the operation succeeded of failed. Retrieves an audio session control. A new or existing session ID. Audio session flags. Receives an interface for the audio session. An HRESULT code indicating whether the operation succeeded of failed. Retrieves a simple audio volume control. A new or existing session ID. Audio session flags. Receives an interface for the audio session. An HRESULT code indicating whether the operation succeeded of failed. defined in MMDeviceAPI.h IMMNotificationClient Device State Changed Device Added Device Removed Default Device Changed Property Value Changed is defined in propsys.h Windows CoreAudio ISimpleAudioVolume interface Defined in AudioClient.h Sets the master volume level for the audio session. The new volume level expressed as a normalized value between 0.0 and 1.0. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the client volume level for the audio session. Receives the volume level expressed as a normalized value between 0.0 and 1.0. An HRESULT code indicating whether the operation succeeded of failed. Sets the muting state for the audio session. The new muting state. A user context value that is passed to the notification callback. An HRESULT code indicating whether the operation succeeded of failed. Retrieves the current muting state for the audio session. Receives the muting state. An HRESULT code indicating whether the operation succeeded of failed. implements IMMDeviceEnumerator MMDevice STGM enumeration MM Device To string Audio Client Audio Meter Information Audio Endpoint Volume AudioSessionManager instance Properties Friendly name for the endpoint Friendly name of device Icon path of device Device ID Data Flow Device State Multimedia Device Collection Get Enumerator Device enumerator Device count Get device by index Device index Device at the specified index MM Device Enumerator Creates a new MM Device Enumerator Enumerate Audio Endpoints Desired DataFlow State Mask Device Collection Get Default Endpoint Data Flow Role Device Check to see if a default audio end point exists without needing an exception. Data Flow Role True if one exists, and false if one does not exist. Get device by ID Device ID Device Registers a call back for Device Events Object implementing IMMNotificationClient type casted as IMMNotificationClient interface Unregisters a call back for Device Events Object implementing IMMNotificationClient type casted as IMMNotificationClient interface PROPERTYKEY is defined in wtypes.h Format ID Property ID Property Keys PKEY_DeviceInterface_FriendlyName PKEY_AudioEndpoint_FormFactor PKEY_AudioEndpoint_ControlPanelPageProvider PKEY_AudioEndpoint_Association PKEY_AudioEndpoint_PhysicalSpeakers PKEY_AudioEndpoint_GUID PKEY_AudioEndpoint_Disable_SysFx PKEY_AudioEndpoint_FullRangeSpeakers PKEY_AudioEndpoint_Supports_EventDriven_Mode PKEY_AudioEndpoint_JackSubType PKEY_AudioEngine_DeviceFormat PKEY_AudioEngine_OEMFormat PKEY _Devie_FriendlyName PKEY _Device_IconPath Property Store class, only supports reading properties at the moment. Contains property guid Looks for a specific key True if found Gets property key at sepecified index Index Property key Gets property value at specified index Index Property value Creates a new property store IPropertyStore COM interface Property Count Gets property by index Property index The property Indexer by guid Property Key Property or null if not found Property Store Property Property Key Property Value from Propidl.h. http://msdn.microsoft.com/en-us/library/aa380072(VS.85).aspx contains a union so we have to do an explicit layout Creates a new PropVariant containing a long value Helper method to gets blob data Interprets a blob as an array of structs allows freeing up memory, might turn this into a Dispose method? Gets the type of data in this PropVariant Property value The ERole enumeration defines constants that indicate the role that the system has assigned to an audio endpoint device Games, system notification sounds, and voice commands. Music, movies, narration, and live music recording Voice communications (talking to another person). Collection of sessions. Returns session at index. Number of current sessions. Windows CoreAudio SimpleAudioVolume Creates a new Audio endpoint volume ISimpleAudioVolume COM interface Dispose Finalizer Allows the user to adjust the volume from 0.0 to 1.0 Mute Windows Media Resampler Props wmcodecdsp.h Range is 1 to 60 Specifies the channel matrix. BiQuad filter Passes a single sample through the filter Input sample Output sample Set this up as a low pass filter Sample Rate Cut-off Frequency Bandwidth Set this up as a peaking EQ Sample Rate Centre Frequency Bandwidth (Q) Gain in decibels Set this as a high pass filter Create a low pass filter Create a High pass filter Create a bandpass filter with constant skirt gain Create a bandpass filter with constant peak gain Creates a notch filter Creaes an all pass filter Create a Peaking EQ H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) a "shelf slope" parameter (for shelving EQ only). When S = 1, the shelf slope is as steep as it can be and remain monotonically increasing or decreasing gain with frequency. The shelf slope, in dB/octave, remains proportional to S for all other values for a fixed f0/Fs and dBgain. Gain in decibels H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) Type to represent complex number Real Part Imaginary Part Envelope generator (ADSR) Creates and Initializes an Envelope Generator Sets the attack curve Sets the decay release curve Read the next volume multiplier from the envelope generator A volume multiplier Trigger the gate If true, enter attack phase, if false enter release phase (unless already idle) Reset to idle state Get the current output level Attack Rate (seconds * SamplesPerSecond) Decay Rate (seconds * SamplesPerSecond) Release Rate (seconds * SamplesPerSecond) Sustain Level (1 = 100%) Current envelope state Envelope State Idle Attack Decay Sustain Release Summary description for FastFourierTransform. This computes an in-place complex-to-complex FFT x and y are the real and imaginary arrays of 2^m points. Applies a Hamming Window Index into frame Frame size (e.g. 1024) Multiplier for Hamming window Applies a Hann Window Index into frame Frame size (e.g. 1024) Multiplier for Hann window Applies a Blackman-Harris Window Index into frame Frame size (e.g. 1024) Multiplier for Blackmann-Harris window Summary description for ImpulseResponseConvolution. A very simple mono convolution algorithm This will be very slow This is actually a downwards normalize for data that will clip Fully managed resampler, based on Cockos WDL Resampler Creates a new Resampler sets the mode if sinc set, it overrides interp or filtercnt Sets the filter parameters used for filtercnt>0 but not sinc Set feed mode if true, that means the first parameter to ResamplePrepare will specify however much input you have, not how much you want Reset Prepare note that it is safe to call ResamplePrepare without calling ResampleOut (the next call of ResamplePrepare will function as normal) nb inbuffer was WDL_ResampleSample **, returning a place to put the in buffer, so we return a buffer and offset req_samples is output samples desired if !wantInputDriven, or if wantInputDriven is input samples that we have returns number of samples desired (put these into *inbuffer) Channel Mode Stereo Joint Stereo Dual Channel Mono An ID3v2 Tag Reads an ID3v2 tag from a stream Creates a new ID3v2 tag from a collection of key-value pairs. A collection of key-value pairs containing the tags to include in the ID3v2 tag. A new ID3v2 tag Convert the frame size to a byte array. The frame body size. Creates an ID3v2 frame for the given key-value pair. Gets the Id3v2 Header size. The size is encoded so that only 7 bits per byte are actually used. Creates the Id3v2 tag header and returns is as a byte array. The Id3v2 frames that will be included in the file. This is used to calculate the ID3v2 tag size. Creates the Id3v2 tag for the given key-value pairs and returns it in the a stream. Raw data from this tag Interface for MP3 frame by frame decoder Decompress a single MP3 frame Frame to decompress Output buffer Offset within output buffer Bytes written to output buffer Tell the decoder that we have repositioned PCM format that we are converting into Represents an MP3 Frame Reads an MP3 frame from a stream input stream A valid MP3 frame, or null if none found Reads an MP3Frame from a stream http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm has some good info also see http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx A valid MP3 frame, or null if none found Constructs an MP3 frame checks if the four bytes represent a valid header, if they are, will parse the values into Mp3Frame Sample rate of this frame Frame length in bytes Bit Rate Raw frame data (includes header bytes) MPEG Version MPEG Layer Channel Mode The number of samples in this frame The channel extension bits The bitrate index (directly from the header) Whether the Copyright bit is set Whether a CRC is present Not part of the MP3 frame itself - indicates where in the stream we found this header MPEG Layer flags Reserved Layer 3 Layer 2 Layer 1 MPEG Version Flags Version 2.5 Reserved Version 2 Version 1 Represents a Xing VBR header Load Xing Header Frame Xing Header Sees if a frame contains a Xing header Number of frames Number of bytes VBR Scale property The MP3 frame Soundfont generator Gets the generator type Generator amount as an unsigned short Generator amount as a signed short Low byte amount High byte amount Instrument Sample Header base class for structures that can read themselves Generator types Start address offset End address offset Start loop address offset End loop address offset Start address coarse offset Modulation LFO to pitch Vibrato LFO to pitch Modulation envelope to pitch Initial filter cutoff frequency Initial filter Q Modulation LFO to filter Cutoff frequency Modulation envelope to filter cutoff frequency End address coarse offset Modulation LFO to volume Unused Chorus effects send Reverb effects send Pan Unused Unused Unused Delay modulation LFO Frequency modulation LFO Delay vibrato LFO Frequency vibrato LFO Delay modulation envelope Attack modulation envelope Hold modulation envelope Decay modulation envelope Sustain modulation envelop Release modulation envelope Key number to modulation envelope hold Key number to modulation envelope decay Delay volume envelope Attack volume envelope Hold volume envelope Decay volume envelope Sustain volume envelope Release volume envelope Key number to volume envelope hold Key number to volume envelope decay Instrument Reserved Key range Velocity range Start loop address coarse offset Key number Velocity Initial attenuation Reserved End loop address coarse offset Coarse tune Fine tune Sample ID Sample modes Reserved Scale tuning Exclusive class Overriding root key Unused Unused A soundfont info chunk SoundFont Version WaveTable sound engine Bank name Data ROM Creation Date Author Target Product Copyright Comments Tools ROM Version SoundFont instrument instrument name Zones Instrument Builder Transform Types Linear Modulator Source Modulation data type Destination generator type Amount Source Modulation Amount Type Source Transform Type Controller Sources No Controller Note On Velocity Note On Key Number Poly Pressure Channel Pressure Pitch Wheel Pitch Wheel Sensitivity Source Types Linear Concave Convex Switch Modulator Type A SoundFont Preset Preset name Patch Number Bank number Zones Class to read the SoundFont file presets chunk The Presets contained in this chunk The instruments contained in this chunk The sample headers contained in this chunk just reads a chunk ID at the current position chunk ID reads a chunk at the current position creates a new riffchunk from current position checking that we're not at the end of this chunk first the new chunk useful for chunks that just contain a string chunk as string A SoundFont Sample Header The sample name Start offset End offset Start loop point End loop point Sample Rate Original pitch Pitch correction Sample Link SoundFont Sample Link Type SoundFont sample modes No loop Loop Continuously Reserved no loop Loop and continue Sample Link Type Mono Sample Right Sample Left Sample Linked Sample ROM Mono Sample ROM Right Sample ROM Left Sample ROM Linked Sample SoundFont Version Structure Major Version Minor Version Builds a SoundFont version Reads a SoundFont Version structure Writes a SoundFont Version structure Gets the length of this structure Represents a SoundFont Loads a SoundFont from a stream stream The File Info Chunk The Presets The Instruments The Sample Headers The Sample Data A SoundFont zone Modulators for this Zone Generators for this Zone Audio Subtype GUIDs http://msdn.microsoft.com/en-us/library/windows/desktop/aa372553%28v=vs.85%29.aspx Advanced Audio Coding (AAC). Not used Dolby AC-3 audio over Sony/Philips Digital Interface (S/PDIF). Encrypted audio data used with secure audio path. Digital Theater Systems (DTS) audio. Uncompressed IEEE floating-point audio. MPEG Audio Layer-3 (MP3). MPEG-1 audio payload. Windows Media Audio 9 Voice codec. Uncompressed PCM audio. Windows Media Audio 9 Professional codec over S/PDIF. Windows Media Audio 9 Lossless codec or Windows Media Audio 9.1 codec. Windows Media Audio 8 codec, Windows Media Audio 9 codec, or Windows Media Audio 9.1 codec. Windows Media Audio 9 Professional codec or Windows Media Audio 9.1 Professional codec. Dolby Digital (AC-3). MPEG-4 and AAC Audio Types http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx Reference : wmcodecdsp.h Dolby Audio Types http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx Reference : wmcodecdsp.h Dolby Audio Types http://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx Reference : wmcodecdsp.h μ-law coding http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx Reference : Ksmedia.h Adaptive delta pulse code modulation (ADPCM) http://msdn.microsoft.com/en-us/library/windows/desktop/dd390971(v=vs.85).aspx Reference : Ksmedia.h Dolby Digital Plus formatted for HDMI output. http://msdn.microsoft.com/en-us/library/windows/hardware/ff538392(v=vs.85).aspx Reference : internet MSAudio1 - unknown meaning Reference : wmcodecdsp.h IMA ADPCM ACM Wrapper WMSP2 - unknown meaning Reference: wmsdkidl.h IMFActivate, defined in mfobjects.h Provides a generic way to store key/value pairs on an object. http://msdn.microsoft.com/en-gb/library/windows/desktop/ms704598%28v=vs.85%29.aspx Retrieves the value associated with a key. Retrieves the data type of the value associated with a key. Queries whether a stored attribute value equals a specified PROPVARIANT. Compares the attributes on this object with the attributes on another object. Retrieves a UINT32 value associated with a key. Retrieves a UINT64 value associated with a key. Retrieves a double value associated with a key. Retrieves a GUID value associated with a key. Retrieves the length of a string value associated with a key. Retrieves a wide-character string associated with a key. Retrieves a wide-character string associated with a key. This method allocates the memory for the string. Retrieves the length of a byte array associated with a key. Retrieves a byte array associated with a key. Retrieves a byte array associated with a key. This method allocates the memory for the array. Retrieves an interface pointer associated with a key. Associates an attribute value with a key. Removes a key/value pair from the object's attribute list. Removes all key/value pairs from the object's attribute list. Associates a UINT32 value with a key. Associates a UINT64 value with a key. Associates a double value with a key. Associates a GUID value with a key. Associates a wide-character string with a key. Associates a byte array with a key. Associates an IUnknown pointer with a key. Locks the attribute store so that no other thread can access it. Unlocks the attribute store. Retrieves the number of attributes that are set on this object. Retrieves an attribute at the specified index. Copies all of the attributes from this object into another attribute store. Retrieves the value associated with a key. Retrieves the data type of the value associated with a key. Queries whether a stored attribute value equals a specified PROPVARIANT. Compares the attributes on this object with the attributes on another object. Retrieves a UINT32 value associated with a key. Retrieves a UINT64 value associated with a key. Retrieves a double value associated with a key. Retrieves a GUID value associated with a key. Retrieves the length of a string value associated with a key. Retrieves a wide-character string associated with a key. Retrieves a wide-character string associated with a key. This method allocates the memory for the string. Retrieves the length of a byte array associated with a key. Retrieves a byte array associated with a key. Retrieves a byte array associated with a key. This method allocates the memory for the array. Retrieves an interface pointer associated with a key. Associates an attribute value with a key. Removes a key/value pair from the object's attribute list. Removes all key/value pairs from the object's attribute list. Associates a UINT32 value with a key. Associates a UINT64 value with a key. Associates a double value with a key. Associates a GUID value with a key. Associates a wide-character string with a key. Associates a byte array with a key. Associates an IUnknown pointer with a key. Locks the attribute store so that no other thread can access it. Unlocks the attribute store. Retrieves the number of attributes that are set on this object. Retrieves an attribute at the specified index. Copies all of the attributes from this object into another attribute store. Creates the object associated with this activation object. Shuts down the created object. Detaches the created object from the activation object. IMFByteStream http://msdn.microsoft.com/en-gb/library/windows/desktop/ms698720%28v=vs.85%29.aspx Retrieves the characteristics of the byte stream. virtual HRESULT STDMETHODCALLTYPE GetCapabilities(/*[out]*/ __RPC__out DWORD *pdwCapabilities) = 0; Retrieves the length of the stream. virtual HRESULT STDMETHODCALLTYPE GetLength(/*[out]*/ __RPC__out QWORD *pqwLength) = 0; Sets the length of the stream. virtual HRESULT STDMETHODCALLTYPE SetLength(/*[in]*/ QWORD qwLength) = 0; Retrieves the current read or write position in the stream. virtual HRESULT STDMETHODCALLTYPE GetCurrentPosition(/*[out]*/ __RPC__out QWORD *pqwPosition) = 0; Sets the current read or write position. virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(/*[in]*/ QWORD qwPosition) = 0; Queries whether the current position has reached the end of the stream. virtual HRESULT STDMETHODCALLTYPE IsEndOfStream(/*[out]*/ __RPC__out BOOL *pfEndOfStream) = 0; Reads data from the stream. virtual HRESULT STDMETHODCALLTYPE Read(/*[size_is][out]*/ __RPC__out_ecount_full(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbRead) = 0; Begins an asynchronous read operation from the stream. virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginRead(/*[out]*/ _Out_writes_bytes_(cb) BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; Completes an asynchronous read operation. virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndRead(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbRead) = 0; Writes data to the stream. virtual HRESULT STDMETHODCALLTYPE Write(/*[size_is][in]*/ __RPC__in_ecount_full(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[out]*/ __RPC__out ULONG *pcbWritten) = 0; Begins an asynchronous write operation to the stream. virtual /*[local]*/ HRESULT STDMETHODCALLTYPE BeginWrite(/*[in]*/ _In_reads_bytes_(cb) const BYTE *pb, /*[in]*/ ULONG cb, /*[in]*/ IMFAsyncCallback *pCallback, /*[in]*/ IUnknown *punkState) = 0; Completes an asynchronous write operation. virtual /*[local]*/ HRESULT STDMETHODCALLTYPE EndWrite(/*[in]*/ IMFAsyncResult *pResult, /*[out]*/ _Out_ ULONG *pcbWritten) = 0; Moves the current position in the stream by a specified offset. virtual HRESULT STDMETHODCALLTYPE Seek(/*[in]*/ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, /*[in]*/ LONGLONG llSeekOffset, /*[in]*/ DWORD dwSeekFlags, /*[out]*/ __RPC__out QWORD *pqwCurrentPosition) = 0; Clears any internal buffers used by the stream. virtual HRESULT STDMETHODCALLTYPE Flush( void) = 0; Closes the stream and releases any resources associated with the stream. virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; Represents a generic collection of IUnknown pointers. Retrieves the number of objects in the collection. Retrieves an object in the collection. Adds an object to the collection. Removes an object from the collection. Removes an object from the collection. Removes all items from the collection. IMFMediaBuffer http://msdn.microsoft.com/en-gb/library/windows/desktop/ms696261%28v=vs.85%29.aspx Gives the caller access to the memory in the buffer. Unlocks a buffer that was previously locked. Retrieves the length of the valid data in the buffer. Sets the length of the valid data in the buffer. Retrieves the allocated size of the buffer. IMFMediaEvent - Represents an event generated by a Media Foundation object. Use this interface to get information about the event. http://msdn.microsoft.com/en-us/library/windows/desktop/ms702249%28v=vs.85%29.aspx Mfobjects.h Retrieves the value associated with a key. Retrieves the data type of the value associated with a key. Queries whether a stored attribute value equals a specified PROPVARIANT. Compares the attributes on this object with the attributes on another object. Retrieves a UINT32 value associated with a key. Retrieves a UINT64 value associated with a key. Retrieves a double value associated with a key. Retrieves a GUID value associated with a key. Retrieves the length of a string value associated with a key. Retrieves a wide-character string associated with a key. Retrieves a wide-character string associated with a key. This method allocates the memory for the string. Retrieves the length of a byte array associated with a key. Retrieves a byte array associated with a key. Retrieves a byte array associated with a key. This method allocates the memory for the array. Retrieves an interface pointer associated with a key. Associates an attribute value with a key. Removes a key/value pair from the object's attribute list. Removes all key/value pairs from the object's attribute list. Associates a UINT32 value with a key. Associates a UINT64 value with a key. Associates a double value with a key. Associates a GUID value with a key. Associates a wide-character string with a key. Associates a byte array with a key. Associates an IUnknown pointer with a key. Locks the attribute store so that no other thread can access it. Unlocks the attribute store. Retrieves the number of attributes that are set on this object. Retrieves an attribute at the specified index. Copies all of the attributes from this object into another attribute store. Retrieves the event type. virtual HRESULT STDMETHODCALLTYPE GetType( /* [out] */ __RPC__out MediaEventType *pmet) = 0; Retrieves the extended type of the event. virtual HRESULT STDMETHODCALLTYPE GetExtendedType( /* [out] */ __RPC__out GUID *pguidExtendedType) = 0; Retrieves an HRESULT that specifies the event status. virtual HRESULT STDMETHODCALLTYPE GetStatus( /* [out] */ __RPC__out HRESULT *phrStatus) = 0; Retrieves the value associated with the event, if any. virtual HRESULT STDMETHODCALLTYPE GetValue( /* [out] */ __RPC__out PROPVARIANT *pvValue) = 0; Represents a description of a media format. http://msdn.microsoft.com/en-us/library/windows/desktop/ms704850%28v=vs.85%29.aspx Retrieves the value associated with a key. Retrieves the data type of the value associated with a key. Queries whether a stored attribute value equals a specified PROPVARIANT. Compares the attributes on this object with the attributes on another object. Retrieves a UINT32 value associated with a key. Retrieves a UINT64 value associated with a key. Retrieves a double value associated with a key. Retrieves a GUID value associated with a key. Retrieves the length of a string value associated with a key. Retrieves a wide-character string associated with a key. Retrieves a wide-character string associated with a key. This method allocates the memory for the string. Retrieves the length of a byte array associated with a key. Retrieves a byte array associated with a key. Retrieves a byte array associated with a key. This method allocates the memory for the array. Retrieves an interface pointer associated with a key. Associates an attribute value with a key. Removes a key/value pair from the object's attribute list. Removes all key/value pairs from the object's attribute list. Associates a UINT32 value with a key. Associates a UINT64 value with a key. Associates a double value with a key. Associates a GUID value with a key. Associates a wide-character string with a key. Associates a byte array with a key. Associates an IUnknown pointer with a key. Locks the attribute store so that no other thread can access it. Unlocks the attribute store. Retrieves the number of attributes that are set on this object. Retrieves an attribute at the specified index. Copies all of the attributes from this object into another attribute store. Retrieves the major type of the format. Queries whether the media type is a compressed format. Compares two media types and determines whether they are identical. Retrieves an alternative representation of the media type. Frees memory that was allocated by the GetRepresentation method. Creates an instance of either the sink writer or the source reader. Creates an instance of the sink writer or source reader, given a URL. Creates an instance of the sink writer or source reader, given an IUnknown pointer. CLSID_MFReadWriteClassFactory http://msdn.microsoft.com/en-gb/library/windows/desktop/ms702192%28v=vs.85%29.aspx Retrieves the value associated with a key. Retrieves the data type of the value associated with a key. Queries whether a stored attribute value equals a specified PROPVARIANT. Compares the attributes on this object with the attributes on another object. Retrieves a UINT32 value associated with a key. Retrieves a UINT64 value associated with a key. Retrieves a double value associated with a key. Retrieves a GUID value associated with a key. Retrieves the length of a string value associated with a key. Retrieves a wide-character string associated with a key. Retrieves a wide-character string associated with a key. This method allocates the memory for the string. Retrieves the length of a byte array associated with a key. Retrieves a byte array associated with a key. Retrieves a byte array associated with a key. This method allocates the memory for the array. Retrieves an interface pointer associated with a key. Associates an attribute value with a key. Removes a key/value pair from the object's attribute list. Removes all key/value pairs from the object's attribute list. Associates a UINT32 value with a key. Associates a UINT64 value with a key. Associates a double value with a key. Associates a GUID value with a key. Associates a wide-character string with a key. Associates a byte array with a key. Associates an IUnknown pointer with a key. Locks the attribute store so that no other thread can access it. Unlocks the attribute store. Retrieves the number of attributes that are set on this object. Retrieves an attribute at the specified index. Copies all of the attributes from this object into another attribute store. Retrieves flags associated with the sample. Sets flags associated with the sample. Retrieves the presentation time of the sample. Sets the presentation time of the sample. Retrieves the duration of the sample. Sets the duration of the sample. Retrieves the number of buffers in the sample. Retrieves a buffer from the sample. Converts a sample with multiple buffers into a sample with a single buffer. Adds a buffer to the end of the list of buffers in the sample. Removes a buffer at a specified index from the sample. Removes all buffers from the sample. Retrieves the total length of the valid data in all of the buffers in the sample. Copies the sample data to a buffer. Implemented by the Microsoft Media Foundation sink writer object. Adds a stream to the sink writer. Sets the input format for a stream on the sink writer. Initializes the sink writer for writing. Delivers a sample to the sink writer. Indicates a gap in an input stream. Places a marker in the specified stream. Notifies the media sink that a stream has reached the end of a segment. Flushes one or more streams. (Finalize) Completes all writing operations on the sink writer. Queries the underlying media sink or encoder for an interface. Gets statistics about the performance of the sink writer. IMFSourceReader interface http://msdn.microsoft.com/en-us/library/windows/desktop/dd374655%28v=vs.85%29.aspx Queries whether a stream is selected. Selects or deselects one or more streams. Gets a format that is supported natively by the media source. Gets the current media type for a stream. Sets the media type for a stream. Seeks to a new position in the media source. Reads the next sample from the media source. Flushes one or more streams. Queries the underlying media source or decoder for an interface. Gets an attribute from the underlying media source. Contains flags that indicate the status of the IMFSourceReader::ReadSample method http://msdn.microsoft.com/en-us/library/windows/desktop/dd375773(v=vs.85).aspx No Error An error occurred. If you receive this flag, do not make any further calls to IMFSourceReader methods. The source reader reached the end of the stream. One or more new streams were created The native format has changed for one or more streams. The native format is the format delivered by the media source before any decoders are inserted. The current media has type changed for one or more streams. To get the current media type, call the IMFSourceReader::GetCurrentMediaType method. There is a gap in the stream. This flag corresponds to an MEStreamTick event from the media source. All transforms inserted by the application have been removed for a particular stream. IMFTransform, defined in mftransform.h Retrieves the minimum and maximum number of input and output streams. virtual HRESULT STDMETHODCALLTYPE GetStreamLimits( /* [out] */ __RPC__out DWORD *pdwInputMinimum, /* [out] */ __RPC__out DWORD *pdwInputMaximum, /* [out] */ __RPC__out DWORD *pdwOutputMinimum, /* [out] */ __RPC__out DWORD *pdwOutputMaximum) = 0; Retrieves the current number of input and output streams on this MFT. virtual HRESULT STDMETHODCALLTYPE GetStreamCount( /* [out] */ __RPC__out DWORD *pcInputStreams, /* [out] */ __RPC__out DWORD *pcOutputStreams) = 0; Retrieves the stream identifiers for the input and output streams on this MFT. virtual HRESULT STDMETHODCALLTYPE GetStreamIDs( DWORD dwInputIDArraySize, /* [size_is][out] */ __RPC__out_ecount_full(dwInputIDArraySize) DWORD *pdwInputIDs, DWORD dwOutputIDArraySize, /* [size_is][out] */ __RPC__out_ecount_full(dwOutputIDArraySize) DWORD *pdwOutputIDs) = 0; Gets the buffer requirements and other information for an input stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetInputStreamInfo( DWORD dwInputStreamID, /* [out] */ __RPC__out MFT_INPUT_STREAM_INFO *pStreamInfo) = 0; Gets the buffer requirements and other information for an output stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetOutputStreamInfo( DWORD dwOutputStreamID, /* [out] */ __RPC__out MFT_OUTPUT_STREAM_INFO *pStreamInfo) = 0; Gets the global attribute store for this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetAttributes( /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; Retrieves the attribute store for an input stream on this MFT. virtual HRESULT STDMETHODCALLTYPE GetInputStreamAttributes( DWORD dwInputStreamID, /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; Retrieves the attribute store for an output stream on this MFT. virtual HRESULT STDMETHODCALLTYPE GetOutputStreamAttributes( DWORD dwOutputStreamID, /* [out] */ __RPC__deref_out_opt IMFAttributes **pAttributes) = 0; Removes an input stream from this MFT. virtual HRESULT STDMETHODCALLTYPE DeleteInputStream( DWORD dwStreamID) = 0; Adds one or more new input streams to this MFT. virtual HRESULT STDMETHODCALLTYPE AddInputStreams( DWORD cStreams, /* [in] */ __RPC__in DWORD *adwStreamIDs) = 0; Gets an available media type for an input stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetInputAvailableType( DWORD dwInputStreamID, DWORD dwTypeIndex, /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; Retrieves an available media type for an output stream on this MFT. virtual HRESULT STDMETHODCALLTYPE GetOutputAvailableType( DWORD dwOutputStreamID, DWORD dwTypeIndex, /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; Sets, tests, or clears the media type for an input stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE SetInputType( DWORD dwInputStreamID, /* [in] */ __RPC__in_opt IMFMediaType *pType, DWORD dwFlags) = 0; Sets, tests, or clears the media type for an output stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE SetOutputType( DWORD dwOutputStreamID, /* [in] */ __RPC__in_opt IMFMediaType *pType, DWORD dwFlags) = 0; Gets the current media type for an input stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetInputCurrentType( DWORD dwInputStreamID, /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; Gets the current media type for an output stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE GetOutputCurrentType( DWORD dwOutputStreamID, /* [out] */ __RPC__deref_out_opt IMFMediaType **ppType) = 0; Queries whether an input stream on this Media Foundation transform (MFT) can accept more data. virtual HRESULT STDMETHODCALLTYPE GetInputStatus( DWORD dwInputStreamID, /* [out] */ __RPC__out DWORD *pdwFlags) = 0; Queries whether the Media Foundation transform (MFT) is ready to produce output data. virtual HRESULT STDMETHODCALLTYPE GetOutputStatus( /* [out] */ __RPC__out DWORD *pdwFlags) = 0; Sets the range of time stamps the client needs for output. virtual HRESULT STDMETHODCALLTYPE SetOutputBounds( LONGLONG hnsLowerBound, LONGLONG hnsUpperBound) = 0; Sends an event to an input stream on this Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE ProcessEvent( DWORD dwInputStreamID, /* [in] */ __RPC__in_opt IMFMediaEvent *pEvent) = 0; Sends a message to the Media Foundation transform (MFT). virtual HRESULT STDMETHODCALLTYPE ProcessMessage( MFT_MESSAGE_TYPE eMessage, ULONG_PTR ulParam) = 0; Delivers data to an input stream on this Media Foundation transform (MFT). virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessInput( DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags) = 0; Generates output from the current input data. virtual /* [local] */ HRESULT STDMETHODCALLTYPE ProcessOutput( DWORD dwFlags, DWORD cOutputBufferCount, /* [size_is][out][in] */ MFT_OUTPUT_DATA_BUFFER *pOutputSamples, /* [out] */ DWORD *pdwStatus) = 0; See mfobjects.h Unknown event type. Signals a serious error. Custom event type. A non-fatal error occurred during streaming. Session Unknown Raised after the IMFMediaSession::SetTopology method completes asynchronously Raised by the Media Session when the IMFMediaSession::ClearTopologies method completes asynchronously. Raised when the IMFMediaSession::Start method completes asynchronously. Raised when the IMFMediaSession::Pause method completes asynchronously. Raised when the IMFMediaSession::Stop method completes asynchronously. Raised when the IMFMediaSession::Close method completes asynchronously. Raised by the Media Session when it has finished playing the last presentation in the playback queue. Raised by the Media Session when the playback rate changes. Raised by the Media Session when it completes a scrubbing request. Raised by the Media Session when the session capabilities change. Raised by the Media Session when the status of a topology changes. Raised by the Media Session when a new presentation starts. Raised by a media source a new presentation is ready. License acquisition is about to begin. License acquisition is complete. Individualization is about to begin. Individualization is complete. Signals the progress of a content enabler object. A content enabler object's action is complete. Raised by a trusted output if an error occurs while enforcing the output policy. Contains status information about the enforcement of an output policy. A media source started to buffer data. A media source stopped buffering data. The network source started opening a URL. The network source finished opening a URL. Raised by a media source at the start of a reconnection attempt. Raised by a media source at the end of a reconnection attempt. Raised by the enhanced video renderer (EVR) when it receives a user event from the presenter. Raised by the Media Session when the format changes on a media sink. Source Unknown Raised when a media source starts without seeking. Raised by a media stream when the source starts without seeking. Raised when a media source seeks to a new position. Raised by a media stream after a call to IMFMediaSource::Start causes a seek in the stream. Raised by a media source when it starts a new stream. Raised by a media source when it restarts or seeks a stream that is already active. Raised by a media source when the IMFMediaSource::Stop method completes asynchronously. Raised by a media stream when the IMFMediaSource::Stop method completes asynchronously. Raised by a media source when the IMFMediaSource::Pause method completes asynchronously. Raised by a media stream when the IMFMediaSource::Pause method completes asynchronously. Raised by a media source when a presentation ends. Raised by a media stream when the stream ends. Raised when a media stream delivers a new sample. Signals that a media stream does not have data available at a specified time. Raised by a media stream when it starts or stops thinning the stream. Raised by a media stream when the media type of the stream changes. Raised by a media source when the playback rate changes. Raised by the sequencer source when a segment is completed and is followed by another segment. Raised by a media source when the source's characteristics change. Raised by a media source to request a new playback rate. Raised by a media source when it updates its metadata. Raised by the sequencer source when the IMFSequencerSource::UpdateTopology method completes asynchronously. Sink Unknown Raised by a stream sink when it completes the transition to the running state. Raised by a stream sink when it completes the transition to the stopped state. Raised by a stream sink when it completes the transition to the paused state. Raised by a stream sink when the rate has changed. Raised by a stream sink to request a new media sample from the pipeline. Raised by a stream sink after the IMFStreamSink::PlaceMarker method is called. Raised by a stream sink when the stream has received enough preroll data to begin rendering. Raised by a stream sink when it completes a scrubbing request. Raised by a stream sink when the sink's media type is no longer valid. Raised by the stream sinks of the EVR if the video device changes. Provides feedback about playback quality to the quality manager. Raised when a media sink becomes invalid. The audio session display name changed. The volume or mute state of the audio session changed The audio device was removed. The Windows audio server system was shut down. The grouping parameters changed for the audio session. The audio session icon changed. The default audio format for the audio device changed. The audio session was disconnected from a Windows Terminal Services session The audio session was preempted by an exclusive-mode connection. Trust Unknown The output policy for a stream changed. Content protection message The IMFOutputTrustAuthority::SetPolicy method completed. DRM License Backup Completed DRM License Backup Progress DRM License Restore Completed DRM License Restore Progress DRM License Acquisition Completed DRM Individualization Completed DRM Individualization Progress DRM Proximity Completed DRM License Store Cleaned DRM Revocation Download Completed Transform Unknown Sent by an asynchronous MFT to request a new input sample. Sent by an asynchronous MFT when new output data is available from the MFT. Sent by an asynchronous Media Foundation transform (MFT) when a drain operation is complete. Sent by an asynchronous MFT in response to an MFT_MESSAGE_COMMAND_MARKER message. Media Foundation attribute guids http://msdn.microsoft.com/en-us/library/windows/desktop/ms696989%28v=vs.85%29.aspx Specifies whether an MFT performs asynchronous processing. Enables the use of an asynchronous MFT. Contains flags for an MFT activation object. Specifies the category for an MFT. Contains the class identifier (CLSID) of an MFT. Contains the registered input types for a Media Foundation transform (MFT). Contains the registered output types for a Media Foundation transform (MFT). Contains the symbolic link for a hardware-based MFT. Contains the display name for a hardware-based MFT. Contains a pointer to the stream attributes of the connected stream on a hardware-based MFT. Specifies whether a hardware-based MFT is connected to another hardware-based MFT. Specifies the preferred output format for an encoder. Specifies whether an MFT is registered only in the application's process. Contains configuration properties for an encoder. Specifies whether a hardware device source uses the system time for time stamps. Contains an IMFFieldOfUseMFTUnlock pointer, which can be used to unlock the MFT. Contains the merit value of a hardware codec. Specifies whether a decoder is optimized for transcoding rather than for playback. Contains a pointer to the proxy object for the application's presentation descriptor. Contains a pointer to the presentation descriptor from the protected media path (PMP). Specifies the duration of a presentation, in 100-nanosecond units. Specifies the total size of the source file, in bytes. Specifies the audio encoding bit rate for the presentation, in bits per second. Specifies the video encoding bit rate for the presentation, in bits per second. Specifies the MIME type of the content. Specifies when a presentation was last modified. The identifier of the playlist element in the presentation. Contains the preferred RFC 1766 language of the media source. The time at which the presentation must begin, relative to the start of the media source. Specifies whether the audio streams in the presentation have a variable bit rate. Media type Major Type Media Type subtype Audio block alignment Audio average bytes per second Audio number of channels Audio samples per second Audio bits per sample Enables the source reader or sink writer to use hardware-based Media Foundation transforms (MFTs). Contains additional format data for a media type. Specifies for a media type whether each sample is independent of the other samples in the stream. Specifies for a media type whether the samples have a fixed size. Contains a DirectShow format GUID for a media type. Specifies the preferred legacy format structure to use when converting an audio media type. Specifies for a media type whether the media data is compressed. Approximate data rate of the video stream, in bits per second, for a video media type. Specifies the payload type of an Advanced Audio Coding (AAC) stream. 0 - The stream contains raw_data_block elements only 1 - Audio Data Transport Stream (ADTS). The stream contains an adts_sequence, as defined by MPEG-2. 2 - Audio Data Interchange Format (ADIF). The stream contains an adif_sequence, as defined by MPEG-2. 3 - The stream contains an MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). Specifies the audio profile and level of an Advanced Audio Coding (AAC) stream, as defined by ISO/IEC 14496-3. Media Foundation Errors RANGES 14000 - 14999 = General Media Foundation errors 15000 - 15999 = ASF parsing errors 16000 - 16999 = Media Source errors 17000 - 17999 = MEDIAFOUNDATION Network Error Events 18000 - 18999 = MEDIAFOUNDATION WMContainer Error Events 19000 - 19999 = MEDIAFOUNDATION Media Sink Error Events 20000 - 20999 = Renderer errors 21000 - 21999 = Topology Errors 25000 - 25999 = Timeline Errors 26000 - 26999 = Unused 28000 - 28999 = Transform errors 29000 - 29999 = Content Protection errors 40000 - 40999 = Clock errors 41000 - 41999 = MF Quality Management Errors 42000 - 42999 = MF Transcode API Errors MessageId: MF_E_PLATFORM_NOT_INITIALIZED MessageText: Platform not initialized. Please call MFStartup().%0 MessageId: MF_E_BUFFERTOOSMALL MessageText: The buffer was too small to carry out the requested action.%0 MessageId: MF_E_INVALIDREQUEST MessageText: The request is invalid in the current state.%0 MessageId: MF_E_INVALIDSTREAMNUMBER MessageText: The stream number provided was invalid.%0 MessageId: MF_E_INVALIDMEDIATYPE MessageText: The data specified for the media type is invalid, inconsistent, or not supported by this object.%0 MessageId: MF_E_NOTACCEPTING MessageText: The callee is currently not accepting further input.%0 MessageId: MF_E_NOT_INITIALIZED MessageText: This object needs to be initialized before the requested operation can be carried out.%0 MessageId: MF_E_UNSUPPORTED_REPRESENTATION MessageText: The requested representation is not supported by this object.%0 MessageId: MF_E_NO_MORE_TYPES MessageText: An object ran out of media types to suggest therefore the requested chain of streaming objects cannot be completed.%0 MessageId: MF_E_UNSUPPORTED_SERVICE MessageText: The object does not support the specified service.%0 MessageId: MF_E_UNEXPECTED MessageText: An unexpected error has occurred in the operation requested.%0 MessageId: MF_E_INVALIDNAME MessageText: Invalid name.%0 MessageId: MF_E_INVALIDTYPE MessageText: Invalid type.%0 MessageId: MF_E_INVALID_FILE_FORMAT MessageText: The file does not conform to the relevant file format specification. MessageId: MF_E_INVALIDINDEX MessageText: Invalid index.%0 MessageId: MF_E_INVALID_TIMESTAMP MessageText: An invalid timestamp was given.%0 MessageId: MF_E_UNSUPPORTED_SCHEME MessageText: The scheme of the given URL is unsupported.%0 MessageId: MF_E_UNSUPPORTED_BYTESTREAM_TYPE MessageText: The byte stream type of the given URL is unsupported.%0 MessageId: MF_E_UNSUPPORTED_TIME_FORMAT MessageText: The given time format is unsupported.%0 MessageId: MF_E_NO_SAMPLE_TIMESTAMP MessageText: The Media Sample does not have a timestamp.%0 MessageId: MF_E_NO_SAMPLE_DURATION MessageText: The Media Sample does not have a duration.%0 MessageId: MF_E_INVALID_STREAM_DATA MessageText: The request failed because the data in the stream is corrupt.%0\n. MessageId: MF_E_RT_UNAVAILABLE MessageText: Real time services are not available.%0 MessageId: MF_E_UNSUPPORTED_RATE MessageText: The specified rate is not supported.%0 MessageId: MF_E_THINNING_UNSUPPORTED MessageText: This component does not support stream-thinning.%0 MessageId: MF_E_REVERSE_UNSUPPORTED MessageText: The call failed because no reverse playback rates are available.%0 MessageId: MF_E_UNSUPPORTED_RATE_TRANSITION MessageText: The requested rate transition cannot occur in the current state.%0 MessageId: MF_E_RATE_CHANGE_PREEMPTED MessageText: The requested rate change has been pre-empted and will not occur.%0 MessageId: MF_E_NOT_FOUND MessageText: The specified object or value does not exist.%0 MessageId: MF_E_NOT_AVAILABLE MessageText: The requested value is not available.%0 MessageId: MF_E_NO_CLOCK MessageText: The specified operation requires a clock and no clock is available.%0 MessageId: MF_S_MULTIPLE_BEGIN MessageText: This callback and state had already been passed in to this event generator earlier.%0 MessageId: MF_E_MULTIPLE_BEGIN MessageText: This callback has already been passed in to this event generator.%0 MessageId: MF_E_MULTIPLE_SUBSCRIBERS MessageText: Some component is already listening to events on this event generator.%0 MessageId: MF_E_TIMER_ORPHANED MessageText: This timer was orphaned before its callback time arrived.%0 MessageId: MF_E_STATE_TRANSITION_PENDING MessageText: A state transition is already pending.%0 MessageId: MF_E_UNSUPPORTED_STATE_TRANSITION MessageText: The requested state transition is unsupported.%0 MessageId: MF_E_UNRECOVERABLE_ERROR_OCCURRED MessageText: An unrecoverable error has occurred.%0 MessageId: MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS MessageText: The provided sample has too many buffers.%0 MessageId: MF_E_SAMPLE_NOT_WRITABLE MessageText: The provided sample is not writable.%0 MessageId: MF_E_INVALID_KEY MessageText: The specified key is not valid. MessageId: MF_E_BAD_STARTUP_VERSION MessageText: You are calling MFStartup with the wrong MF_VERSION. Mismatched bits? MessageId: MF_E_UNSUPPORTED_CAPTION MessageText: The caption of the given URL is unsupported.%0 MessageId: MF_E_INVALID_POSITION MessageText: The operation on the current offset is not permitted.%0 MessageId: MF_E_ATTRIBUTENOTFOUND MessageText: The requested attribute was not found.%0 MessageId: MF_E_PROPERTY_TYPE_NOT_ALLOWED MessageText: The specified property type is not allowed in this context.%0 MessageId: MF_E_PROPERTY_TYPE_NOT_SUPPORTED MessageText: The specified property type is not supported.%0 MessageId: MF_E_PROPERTY_EMPTY MessageText: The specified property is empty.%0 MessageId: MF_E_PROPERTY_NOT_EMPTY MessageText: The specified property is not empty.%0 MessageId: MF_E_PROPERTY_VECTOR_NOT_ALLOWED MessageText: The vector property specified is not allowed in this context.%0 MessageId: MF_E_PROPERTY_VECTOR_REQUIRED MessageText: A vector property is required in this context.%0 MessageId: MF_E_OPERATION_CANCELLED MessageText: The operation is cancelled.%0 MessageId: MF_E_BYTESTREAM_NOT_SEEKABLE MessageText: The provided bytestream was expected to be seekable and it is not.%0 MessageId: MF_E_DISABLED_IN_SAFEMODE MessageText: The Media Foundation platform is disabled when the system is running in Safe Mode.%0 MessageId: MF_E_CANNOT_PARSE_BYTESTREAM MessageText: The Media Source could not parse the byte stream.%0 MessageId: MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS MessageText: Mutually exclusive flags have been specified to source resolver. This flag combination is invalid.%0 MessageId: MF_E_MEDIAPROC_WRONGSTATE MessageText: MediaProc is in the wrong state%0 MessageId: MF_E_RT_THROUGHPUT_NOT_AVAILABLE MessageText: Real time I/O service can not provide requested throughput.%0 MessageId: MF_E_RT_TOO_MANY_CLASSES MessageText: The workqueue cannot be registered with more classes.%0 MessageId: MF_E_RT_WOULDBLOCK MessageText: This operation cannot succeed because another thread owns this object.%0 MessageId: MF_E_NO_BITPUMP MessageText: Internal. Bitpump not found.%0 MessageId: MF_E_RT_OUTOFMEMORY MessageText: No more RT memory available.%0 MessageId: MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED MessageText: An MMCSS class has not been set for this work queue.%0 MessageId: MF_E_INSUFFICIENT_BUFFER MessageText: Insufficient memory for response.%0 MessageId: MF_E_CANNOT_CREATE_SINK MessageText: Activate failed to create mediasink. Call OutputNode::GetUINT32(MF_TOPONODE_MAJORTYPE) for more information. %0 MessageId: MF_E_BYTESTREAM_UNKNOWN_LENGTH MessageText: The length of the provided bytestream is unknown.%0 MessageId: MF_E_SESSION_PAUSEWHILESTOPPED MessageText: The media session cannot pause from a stopped state.%0 MessageId: MF_S_ACTIVATE_REPLACED MessageText: The activate could not be created in the remote process for some reason it was replaced with empty one.%0 MessageId: MF_E_FORMAT_CHANGE_NOT_SUPPORTED MessageText: The data specified for the media type is supported, but would require a format change, which is not supported by this object.%0 MessageId: MF_E_INVALID_WORKQUEUE MessageText: The operation failed because an invalid combination of workqueue ID and flags was specified.%0 MessageId: MF_E_DRM_UNSUPPORTED MessageText: No DRM support is available.%0 MessageId: MF_E_UNAUTHORIZED MessageText: This operation is not authorized.%0 MessageId: MF_E_OUT_OF_RANGE MessageText: The value is not in the specified or valid range.%0 MessageId: MF_E_INVALID_CODEC_MERIT MessageText: The registered codec merit is not valid.%0 MessageId: MF_E_HW_MFT_FAILED_START_STREAMING MessageText: Hardware MFT failed to start streaming due to lack of hardware resources.%0 MessageId: MF_S_ASF_PARSEINPROGRESS MessageText: Parsing is still in progress and is not yet complete.%0 MessageId: MF_E_ASF_PARSINGINCOMPLETE MessageText: Not enough data have been parsed to carry out the requested action.%0 MessageId: MF_E_ASF_MISSINGDATA MessageText: There is a gap in the ASF data provided.%0 MessageId: MF_E_ASF_INVALIDDATA MessageText: The data provided are not valid ASF.%0 MessageId: MF_E_ASF_OPAQUEPACKET MessageText: The packet is opaque, so the requested information cannot be returned.%0 MessageId: MF_E_ASF_NOINDEX MessageText: The requested operation failed since there is no appropriate ASF index.%0 MessageId: MF_E_ASF_OUTOFRANGE MessageText: The value supplied is out of range for this operation.%0 MessageId: MF_E_ASF_INDEXNOTLOADED MessageText: The index entry requested needs to be loaded before it can be available.%0 MessageId: MF_E_ASF_TOO_MANY_PAYLOADS MessageText: The packet has reached the maximum number of payloads.%0 MessageId: MF_E_ASF_UNSUPPORTED_STREAM_TYPE MessageText: Stream type is not supported.%0 MessageId: MF_E_ASF_DROPPED_PACKET MessageText: One or more ASF packets were dropped.%0 MessageId: MF_E_NO_EVENTS_AVAILABLE MessageText: There are no events available in the queue.%0 MessageId: MF_E_INVALID_STATE_TRANSITION MessageText: A media source cannot go from the stopped state to the paused state.%0 MessageId: MF_E_END_OF_STREAM MessageText: The media stream cannot process any more samples because there are no more samples in the stream.%0 MessageId: MF_E_SHUTDOWN MessageText: The request is invalid because Shutdown() has been called.%0 MessageId: MF_E_MP3_NOTFOUND MessageText: The MP3 object was not found.%0 MessageId: MF_E_MP3_OUTOFDATA MessageText: The MP3 parser ran out of data before finding the MP3 object.%0 MessageId: MF_E_MP3_NOTMP3 MessageText: The file is not really a MP3 file.%0 MessageId: MF_E_MP3_NOTSUPPORTED MessageText: The MP3 file is not supported.%0 MessageId: MF_E_NO_DURATION MessageText: The Media stream has no duration.%0 MessageId: MF_E_INVALID_FORMAT MessageText: The Media format is recognized but is invalid.%0 MessageId: MF_E_PROPERTY_NOT_FOUND MessageText: The property requested was not found.%0 MessageId: MF_E_PROPERTY_READ_ONLY MessageText: The property is read only.%0 MessageId: MF_E_PROPERTY_NOT_ALLOWED MessageText: The specified property is not allowed in this context.%0 MessageId: MF_E_MEDIA_SOURCE_NOT_STARTED MessageText: The media source is not started.%0 MessageId: MF_E_UNSUPPORTED_FORMAT MessageText: The Media format is recognized but not supported.%0 MessageId: MF_E_MP3_BAD_CRC MessageText: The MPEG frame has bad CRC.%0 MessageId: MF_E_NOT_PROTECTED MessageText: The file is not protected.%0 MessageId: MF_E_MEDIA_SOURCE_WRONGSTATE MessageText: The media source is in the wrong state%0 MessageId: MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED MessageText: No streams are selected in source presentation descriptor.%0 MessageId: MF_E_CANNOT_FIND_KEYFRAME_SAMPLE MessageText: No key frame sample was found.%0 MessageId: MF_E_NETWORK_RESOURCE_FAILURE MessageText: An attempt to acquire a network resource failed.%0 MessageId: MF_E_NET_WRITE MessageText: Error writing to the network.%0 MessageId: MF_E_NET_READ MessageText: Error reading from the network.%0 MessageId: MF_E_NET_REQUIRE_NETWORK MessageText: Internal. Entry cannot complete operation without network.%0 MessageId: MF_E_NET_REQUIRE_ASYNC MessageText: Internal. Async op is required.%0 MessageId: MF_E_NET_BWLEVEL_NOT_SUPPORTED MessageText: Internal. Bandwidth levels are not supported.%0 MessageId: MF_E_NET_STREAMGROUPS_NOT_SUPPORTED MessageText: Internal. Stream groups are not supported.%0 MessageId: MF_E_NET_MANUALSS_NOT_SUPPORTED MessageText: Manual stream selection is not supported.%0 MessageId: MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR MessageText: Invalid presentation descriptor.%0 MessageId: MF_E_NET_CACHESTREAM_NOT_FOUND MessageText: Cannot find cache stream.%0 MessageId: MF_I_MANUAL_PROXY MessageText: The proxy setting is manual.%0 duplicate removed MessageId=17011 Severity=Informational Facility=MEDIAFOUNDATION SymbolicName=MF_E_INVALID_REQUEST Language=English The request is invalid in the current state.%0 . MessageId: MF_E_NET_REQUIRE_INPUT MessageText: Internal. Entry cannot complete operation without input.%0 MessageId: MF_E_NET_REDIRECT MessageText: The client redirected to another server.%0 MessageId: MF_E_NET_REDIRECT_TO_PROXY MessageText: The client is redirected to a proxy server.%0 MessageId: MF_E_NET_TOO_MANY_REDIRECTS MessageText: The client reached maximum redirection limit.%0 MessageId: MF_E_NET_TIMEOUT MessageText: The server, a computer set up to offer multimedia content to other computers, could not handle your request for multimedia content in a timely manner. Please try again later.%0 MessageId: MF_E_NET_CLIENT_CLOSE MessageText: The control socket is closed by the client.%0 MessageId: MF_E_NET_BAD_CONTROL_DATA MessageText: The server received invalid data from the client on the control connection.%0 MessageId: MF_E_NET_INCOMPATIBLE_SERVER MessageText: The server is not a compatible streaming media server.%0 MessageId: MF_E_NET_UNSAFE_URL MessageText: Url.%0 MessageId: MF_E_NET_CACHE_NO_DATA MessageText: Data is not available.%0 MessageId: MF_E_NET_EOL MessageText: End of line.%0 MessageId: MF_E_NET_BAD_REQUEST MessageText: The request could not be understood by the server.%0 MessageId: MF_E_NET_INTERNAL_SERVER_ERROR MessageText: The server encountered an unexpected condition which prevented it from fulfilling the request.%0 MessageId: MF_E_NET_SESSION_NOT_FOUND MessageText: Session not found.%0 MessageId: MF_E_NET_NOCONNECTION MessageText: There is no connection established with the Windows Media server. The operation failed.%0 MessageId: MF_E_NET_CONNECTION_FAILURE MessageText: The network connection has failed.%0 MessageId: MF_E_NET_INCOMPATIBLE_PUSHSERVER MessageText: The Server service that received the HTTP push request is not a compatible version of Windows Media Services (WMS). This error may indicate the push request was received by IIS instead of WMS. Ensure WMS is started and has the HTTP Server control protocol properly enabled and try again.%0 MessageId: MF_E_NET_SERVER_ACCESSDENIED MessageText: The Windows Media server is denying access. The username and/or password might be incorrect.%0 MessageId: MF_E_NET_PROXY_ACCESSDENIED MessageText: The proxy server is denying access. The username and/or password might be incorrect.%0 MessageId: MF_E_NET_CANNOTCONNECT MessageText: Unable to establish a connection to the server.%0 MessageId: MF_E_NET_INVALID_PUSH_TEMPLATE MessageText: The specified push template is invalid.%0 MessageId: MF_E_NET_INVALID_PUSH_PUBLISHING_POINT MessageText: The specified push publishing point is invalid.%0 MessageId: MF_E_NET_BUSY MessageText: The requested resource is in use.%0 MessageId: MF_E_NET_RESOURCE_GONE MessageText: The Publishing Point or file on the Windows Media Server is no longer available.%0 MessageId: MF_E_NET_ERROR_FROM_PROXY MessageText: The proxy experienced an error while attempting to contact the media server.%0 MessageId: MF_E_NET_PROXY_TIMEOUT MessageText: The proxy did not receive a timely response while attempting to contact the media server.%0 MessageId: MF_E_NET_SERVER_UNAVAILABLE MessageText: The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.%0 MessageId: MF_E_NET_TOO_MUCH_DATA MessageText: The encoding process was unable to keep up with the amount of supplied data.%0 MessageId: MF_E_NET_SESSION_INVALID MessageText: Session not found.%0 MessageId: MF_E_OFFLINE_MODE MessageText: The requested URL is not available in offline mode.%0 MessageId: MF_E_NET_UDP_BLOCKED MessageText: A device in the network is blocking UDP traffic.%0 MessageId: MF_E_NET_UNSUPPORTED_CONFIGURATION MessageText: The specified configuration value is not supported.%0 MessageId: MF_E_NET_PROTOCOL_DISABLED MessageText: The networking protocol is disabled.%0 MessageId: MF_E_ALREADY_INITIALIZED MessageText: This object has already been initialized and cannot be re-initialized at this time.%0 MessageId: MF_E_BANDWIDTH_OVERRUN MessageText: The amount of data passed in exceeds the given bitrate and buffer window.%0 MessageId: MF_E_LATE_SAMPLE MessageText: The sample was passed in too late to be correctly processed.%0 MessageId: MF_E_FLUSH_NEEDED MessageText: The requested action cannot be carried out until the object is flushed and the queue is emptied.%0 MessageId: MF_E_INVALID_PROFILE MessageText: The profile is invalid.%0 MessageId: MF_E_INDEX_NOT_COMMITTED MessageText: The index that is being generated needs to be committed before the requested action can be carried out.%0 MessageId: MF_E_NO_INDEX MessageText: The index that is necessary for the requested action is not found.%0 MessageId: MF_E_CANNOT_INDEX_IN_PLACE MessageText: The requested index cannot be added in-place to the specified ASF content.%0 MessageId: MF_E_MISSING_ASF_LEAKYBUCKET MessageText: The ASF leaky bucket parameters must be specified in order to carry out this request.%0 MessageId: MF_E_INVALID_ASF_STREAMID MessageText: The stream id is invalid. The valid range for ASF stream id is from 1 to 127.%0 MessageId: MF_E_STREAMSINK_REMOVED MessageText: The requested Stream Sink has been removed and cannot be used.%0 MessageId: MF_E_STREAMSINKS_OUT_OF_SYNC MessageText: The various Stream Sinks in this Media Sink are too far out of sync for the requested action to take place.%0 MessageId: MF_E_STREAMSINKS_FIXED MessageText: Stream Sinks cannot be added to or removed from this Media Sink because its set of streams is fixed.%0 MessageId: MF_E_STREAMSINK_EXISTS MessageText: The given Stream Sink already exists.%0 MessageId: MF_E_SAMPLEALLOCATOR_CANCELED MessageText: Sample allocations have been canceled.%0 MessageId: MF_E_SAMPLEALLOCATOR_EMPTY MessageText: The sample allocator is currently empty, due to outstanding requests.%0 MessageId: MF_E_SINK_ALREADYSTOPPED MessageText: When we try to sopt a stream sink, it is already stopped %0 MessageId: MF_E_ASF_FILESINK_BITRATE_UNKNOWN MessageText: The ASF file sink could not reserve AVIO because the bitrate is unknown.%0 MessageId: MF_E_SINK_NO_STREAMS MessageText: No streams are selected in sink presentation descriptor.%0 MessageId: MF_S_SINK_NOT_FINALIZED MessageText: The sink has not been finalized before shut down. This may cause sink generate a corrupted content.%0 MessageId: MF_E_METADATA_TOO_LONG MessageText: A metadata item was too long to write to the output container.%0 MessageId: MF_E_SINK_NO_SAMPLES_PROCESSED MessageText: The operation failed because no samples were processed by the sink.%0 MessageId: MF_E_VIDEO_REN_NO_PROCAMP_HW MessageText: There is no available procamp hardware with which to perform color correction.%0 MessageId: MF_E_VIDEO_REN_NO_DEINTERLACE_HW MessageText: There is no available deinterlacing hardware with which to deinterlace the video stream.%0 MessageId: MF_E_VIDEO_REN_COPYPROT_FAILED MessageText: A video stream requires copy protection to be enabled, but there was a failure in attempting to enable copy protection.%0 MessageId: MF_E_VIDEO_REN_SURFACE_NOT_SHARED MessageText: A component is attempting to access a surface for sharing that is not shared.%0 MessageId: MF_E_VIDEO_DEVICE_LOCKED MessageText: A component is attempting to access a shared device that is already locked by another component.%0 MessageId: MF_E_NEW_VIDEO_DEVICE MessageText: The device is no longer available. The handle should be closed and a new one opened.%0 MessageId: MF_E_NO_VIDEO_SAMPLE_AVAILABLE MessageText: A video sample is not currently queued on a stream that is required for mixing.%0 MessageId: MF_E_NO_AUDIO_PLAYBACK_DEVICE MessageText: No audio playback device was found.%0 MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE MessageText: The requested audio playback device is currently in use.%0 MessageId: MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED MessageText: The audio playback device is no longer present.%0 MessageId: MF_E_AUDIO_SERVICE_NOT_RUNNING MessageText: The audio service is not running.%0 MessageId: MF_E_TOPO_INVALID_OPTIONAL_NODE MessageText: The topology contains an invalid optional node. Possible reasons are incorrect number of outputs and inputs or optional node is at the beginning or end of a segment. %0 MessageId: MF_E_TOPO_CANNOT_FIND_DECRYPTOR MessageText: No suitable transform was found to decrypt the content. %0 MessageId: MF_E_TOPO_CODEC_NOT_FOUND MessageText: No suitable transform was found to encode or decode the content. %0 MessageId: MF_E_TOPO_CANNOT_CONNECT MessageText: Unable to find a way to connect nodes%0 MessageId: MF_E_TOPO_UNSUPPORTED MessageText: Unsupported operations in topoloader%0 MessageId: MF_E_TOPO_INVALID_TIME_ATTRIBUTES MessageText: The topology or its nodes contain incorrectly set time attributes%0 MessageId: MF_E_TOPO_LOOPS_IN_TOPOLOGY MessageText: The topology contains loops, which are unsupported in media foundation topologies%0 MessageId: MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR MessageText: A source stream node in the topology does not have a presentation descriptor%0 MessageId: MF_E_TOPO_MISSING_STREAM_DESCRIPTOR MessageText: A source stream node in the topology does not have a stream descriptor%0 MessageId: MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED MessageText: A stream descriptor was set on a source stream node but it was not selected on the presentation descriptor%0 MessageId: MF_E_TOPO_MISSING_SOURCE MessageText: A source stream node in the topology does not have a source%0 MessageId: MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED MessageText: The topology loader does not support sink activates on output nodes.%0 MessageId: MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID MessageText: The sequencer cannot find a segment with the given ID.%0\n. MessageId: MF_S_SEQUENCER_CONTEXT_CANCELED MessageText: The context was canceled.%0\n. MessageId: MF_E_NO_SOURCE_IN_CACHE MessageText: Cannot find source in source cache.%0\n. MessageId: MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM MessageText: Cannot update topology flags.%0\n. MessageId: MF_E_TRANSFORM_TYPE_NOT_SET MessageText: A valid type has not been set for this stream or a stream that it depends on.%0 MessageId: MF_E_TRANSFORM_STREAM_CHANGE MessageText: A stream change has occurred. Output cannot be produced until the streams have been renegotiated.%0 MessageId: MF_E_TRANSFORM_INPUT_REMAINING MessageText: The transform cannot take the requested action until all of the input data it currently holds is processed or flushed.%0 MessageId: MF_E_TRANSFORM_PROFILE_MISSING MessageText: The transform requires a profile but no profile was supplied or found.%0 MessageId: MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT MessageText: The transform requires a profile but the supplied profile was invalid or corrupt.%0 MessageId: MF_E_TRANSFORM_PROFILE_TRUNCATED MessageText: The transform requires a profile but the supplied profile ended unexpectedly while parsing.%0 MessageId: MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED MessageText: The property ID does not match any property supported by the transform.%0 MessageId: MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG MessageText: The variant does not have the type expected for this property ID.%0 MessageId: MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE MessageText: An attempt was made to set the value on a read-only property.%0 MessageId: MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM MessageText: The array property value has an unexpected number of dimensions.%0 MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG MessageText: The array or blob property value has an unexpected size.%0 MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE MessageText: The property value is out of range for this transform.%0 MessageId: MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE MessageText: The property value is incompatible with some other property or mediatype set on the transform.%0 MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE MessageText: The requested operation is not supported for the currently set output mediatype.%0 MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE MessageText: The requested operation is not supported for the currently set input mediatype.%0 MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION MessageText: The requested operation is not supported for the currently set combination of mediatypes.%0 MessageId: MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES MessageText: The requested feature is not supported in combination with some other currently enabled feature.%0 MessageId: MF_E_TRANSFORM_NEED_MORE_INPUT MessageText: The transform cannot produce output until it gets more input samples.%0 MessageId: MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG MessageText: The requested operation is not supported for the current speaker configuration.%0 MessageId: MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING MessageText: The transform cannot accept mediatype changes in the middle of processing.%0 MessageId: MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT MessageText: The caller should not propagate this event to downstream components.%0 MessageId: MF_E_UNSUPPORTED_D3D_TYPE MessageText: The input type is not supported for D3D device.%0 MessageId: MF_E_TRANSFORM_ASYNC_LOCKED MessageText: The caller does not appear to support this transform's asynchronous capabilities.%0 MessageId: MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER MessageText: An audio compression manager driver could not be initialized by the transform.%0 MessageId: MF_E_LICENSE_INCORRECT_RIGHTS MessageText: You are not allowed to open this file. Contact the content provider for further assistance.%0 MessageId: MF_E_LICENSE_OUTOFDATE MessageText: The license for this media file has expired. Get a new license or contact the content provider for further assistance.%0 MessageId: MF_E_LICENSE_REQUIRED MessageText: You need a license to perform the requested operation on this media file.%0 MessageId: MF_E_DRM_HARDWARE_INCONSISTENT MessageText: The licenses for your media files are corrupted. Contact Microsoft product support.%0 MessageId: MF_E_NO_CONTENT_PROTECTION_MANAGER MessageText: The APP needs to provide IMFContentProtectionManager callback to access the protected media file.%0 MessageId: MF_E_LICENSE_RESTORE_NO_RIGHTS MessageText: Client does not have rights to restore licenses.%0 MessageId: MF_E_BACKUP_RESTRICTED_LICENSE MessageText: Licenses are restricted and hence can not be backed up.%0 MessageId: MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION MessageText: License restore requires machine to be individualized.%0 MessageId: MF_S_PROTECTION_NOT_REQUIRED MessageText: Protection for stream is not required.%0 MessageId: MF_E_COMPONENT_REVOKED MessageText: Component is revoked.%0 MessageId: MF_E_TRUST_DISABLED MessageText: Trusted functionality is currently disabled on this component.%0 MessageId: MF_E_WMDRMOTA_NO_ACTION MessageText: No Action is set on WMDRM Output Trust Authority.%0 MessageId: MF_E_WMDRMOTA_ACTION_ALREADY_SET MessageText: Action is already set on WMDRM Output Trust Authority.%0 MessageId: MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE MessageText: DRM Heaader is not available.%0 MessageId: MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED MessageText: Current encryption scheme is not supported.%0 MessageId: MF_E_WMDRMOTA_ACTION_MISMATCH MessageText: Action does not match with current configuration.%0 MessageId: MF_E_WMDRMOTA_INVALID_POLICY MessageText: Invalid policy for WMDRM Output Trust Authority.%0 MessageId: MF_E_POLICY_UNSUPPORTED MessageText: The policies that the Input Trust Authority requires to be enforced are unsupported by the outputs.%0 MessageId: MF_E_OPL_NOT_SUPPORTED MessageText: The OPL that the license requires to be enforced are not supported by the Input Trust Authority.%0 MessageId: MF_E_TOPOLOGY_VERIFICATION_FAILED MessageText: The topology could not be successfully verified.%0 MessageId: MF_E_SIGNATURE_VERIFICATION_FAILED MessageText: Signature verification could not be completed successfully for this component.%0 MessageId: MF_E_DEBUGGING_NOT_ALLOWED MessageText: Running this process under a debugger while using protected content is not allowed.%0 MessageId: MF_E_CODE_EXPIRED MessageText: MF component has expired.%0 MessageId: MF_E_GRL_VERSION_TOO_LOW MessageText: The current GRL on the machine does not meet the minimum version requirements.%0 MessageId: MF_E_GRL_RENEWAL_NOT_FOUND MessageText: The current GRL on the machine does not contain any renewal entries for the specified revocation.%0 MessageId: MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND MessageText: The current GRL on the machine does not contain any extensible entries for the specified extension GUID.%0 MessageId: MF_E_KERNEL_UNTRUSTED MessageText: The kernel isn't secure for high security level content.%0 MessageId: MF_E_PEAUTH_UNTRUSTED MessageText: The response from protected environment driver isn't valid.%0 MessageId: MF_E_NON_PE_PROCESS MessageText: A non-PE process tried to talk to PEAuth.%0 MessageId: MF_E_REBOOT_REQUIRED MessageText: We need to reboot the machine.%0 MessageId: MF_S_WAIT_FOR_POLICY_SET MessageText: Protection for this stream is not guaranteed to be enforced until the MEPolicySet event is fired.%0 MessageId: MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT MessageText: This video stream is disabled because it is being sent to an unknown software output.%0 MessageId: MF_E_GRL_INVALID_FORMAT MessageText: The GRL file is not correctly formed, it may have been corrupted or overwritten.%0 MessageId: MF_E_GRL_UNRECOGNIZED_FORMAT MessageText: The GRL file is in a format newer than those recognized by this GRL Reader.%0 MessageId: MF_E_ALL_PROCESS_RESTART_REQUIRED MessageText: The GRL was reloaded and required all processes that can run protected media to restart.%0 MessageId: MF_E_PROCESS_RESTART_REQUIRED MessageText: The GRL was reloaded and the current process needs to restart.%0 MessageId: MF_E_USERMODE_UNTRUSTED MessageText: The user space is untrusted for protected content play.%0 MessageId: MF_E_PEAUTH_SESSION_NOT_STARTED MessageText: PEAuth communication session hasn't been started.%0 MessageId: MF_E_PEAUTH_PUBLICKEY_REVOKED MessageText: PEAuth's public key is revoked.%0 MessageId: MF_E_GRL_ABSENT MessageText: The GRL is absent.%0 MessageId: MF_S_PE_TRUSTED MessageText: The Protected Environment is trusted.%0 MessageId: MF_E_PE_UNTRUSTED MessageText: The Protected Environment is untrusted.%0 MessageId: MF_E_PEAUTH_NOT_STARTED MessageText: The Protected Environment Authorization service (PEAUTH) has not been started.%0 MessageId: MF_E_INCOMPATIBLE_SAMPLE_PROTECTION MessageText: The sample protection algorithms supported by components are not compatible.%0 MessageId: MF_E_PE_SESSIONS_MAXED MessageText: No more protected environment sessions can be supported.%0 MessageId: MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED MessageText: WMDRM ITA does not allow protected content with high security level for this release.%0 MessageId: MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED MessageText: WMDRM ITA cannot allow the requested action for the content as one or more components is not properly signed.%0 MessageId: MF_E_ITA_UNSUPPORTED_ACTION MessageText: WMDRM ITA does not support the requested action.%0 MessageId: MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS MessageText: WMDRM ITA encountered an error in parsing the Secure Audio Path parameters.%0 MessageId: MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS MessageText: The Policy Manager action passed in is invalid.%0 MessageId: MF_E_BAD_OPL_STRUCTURE_FORMAT MessageText: The structure specifying Output Protection Level is not the correct format.%0 MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID MessageText: WMDRM ITA does not recognize the Explicite Analog Video Output Protection guid specified in the license.%0 MessageId: MF_E_NO_PMP_HOST MessageText: IMFPMPHost object not available.%0 MessageId: MF_E_ITA_OPL_DATA_NOT_INITIALIZED MessageText: WMDRM ITA could not initialize the Output Protection Level data.%0 MessageId: MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT MessageText: WMDRM ITA does not recognize the Analog Video Output specified by the OTA.%0 MessageId: MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT MessageText: WMDRM ITA does not recognize the Digital Video Output specified by the OTA.%0 MessageId: MF_E_CLOCK_INVALID_CONTINUITY_KEY MessageText: The continuity key supplied is not currently valid.%0 MessageId: MF_E_CLOCK_NO_TIME_SOURCE MessageText: No Presentation Time Source has been specified.%0 MessageId: MF_E_CLOCK_STATE_ALREADY_SET MessageText: The clock is already in the requested state.%0 MessageId: MF_E_CLOCK_NOT_SIMPLE MessageText: The clock has too many advanced features to carry out the request.%0 MessageId: MF_S_CLOCK_STOPPED MessageText: Timer::SetTimer returns this success code if called happened while timer is stopped. Timer is not going to be dispatched until clock is running%0 MessageId: MF_E_NO_MORE_DROP_MODES MessageText: The component does not support any more drop modes.%0 MessageId: MF_E_NO_MORE_QUALITY_LEVELS MessageText: The component does not support any more quality levels.%0 MessageId: MF_E_DROPTIME_NOT_SUPPORTED MessageText: The component does not support drop time functionality.%0 MessageId: MF_E_QUALITYKNOB_WAIT_LONGER MessageText: Quality Manager needs to wait longer before bumping the Quality Level up.%0 MessageId: MF_E_QM_INVALIDSTATE MessageText: Quality Manager is in an invalid state. Quality Management is off at this moment.%0 MessageId: MF_E_TRANSCODE_NO_CONTAINERTYPE MessageText: No transcode output container type is specified.%0 MessageId: MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS MessageText: The profile does not have a media type configuration for any selected source streams.%0 MessageId: MF_E_TRANSCODE_NO_MATCHING_ENCODER MessageText: Cannot find an encoder MFT that accepts the user preferred output type.%0 MessageId: MF_E_ALLOCATOR_NOT_INITIALIZED MessageText: Memory allocator is not initialized.%0 MessageId: MF_E_ALLOCATOR_NOT_COMMITED MessageText: Memory allocator is not committed yet.%0 MessageId: MF_E_ALLOCATOR_ALREADY_COMMITED MessageText: Memory allocator has already been committed.%0 MessageId: MF_E_STREAM_ERROR MessageText: An error occurred in media stream.%0 MessageId: MF_E_INVALID_STREAM_STATE MessageText: Stream is not in a state to handle the request.%0 MessageId: MF_E_HW_STREAM_NOT_CONNECTED MessageText: Hardware stream is not connected yet.%0 Main interface for using Media Foundation with NAudio initializes MediaFoundation - only needs to be called once per process uninitializes MediaFoundation Creates a Media type Creates a media type from a WaveFormat Creates a memory buffer of the specified size Memory buffer size in bytes The memory buffer Creates a sample object The sample object Creates a new attributes store Initial size The attributes store Creates a media foundation byte stream based on a stream object (usable with WinRT streams) The input stream A media foundation byte stream Creates a source reader based on a byte stream The byte stream A media foundation source reader Interop definitions for MediaFoundation thanks to Lucian Wischik for the initial work on many of these definitions (also various interfaces) n.b. the goal is to make as much of this internal as possible, and provide better .NET APIs using the MediaFoundationApi class instead All streams First audio stream First video stream Media source Media Foundation SDK Version Media Foundation API Version Media Foundation Version Initializes Microsoft Media Foundation. Shuts down the Microsoft Media Foundation platform Creates an empty media type. Initializes a media type from a WAVEFORMATEX structure. Converts a Media Foundation audio media type to a WAVEFORMATEX structure. TODO: try making second parameter out WaveFormatExtraData Creates the source reader from a URL. Creates the source reader from a byte stream. Creates the sink writer from a URL or byte stream. Creates a Microsoft Media Foundation byte stream that wraps an IRandomAccessStream object. Creates an empty media sample. Allocates system memory and creates a media buffer to manage it. Creates an empty attribute store. An abstract base class for simplifying working with Media Foundation Transforms You need to override the method that actually creates and configures the transform Generic interface for all WaveProviders. Fill the specified buffer with wave data. The buffer to fill of wave data. Offset into buffer The number of bytes to read the number of bytes written to the buffer. Gets the WaveFormat of this WaveProvider. The wave format. The Source Provider The Output WaveFormat Constructs a new MediaFoundationTransform wrapper Will read one second at a time The source provider for input data to the transform The desired output format To be implemented by overriding classes. Create the transform object, set up its input and output types, and configure any custom properties in here An object implementing IMFTrasform Disposes this MediaFoundation transform Disposes this Media Foundation Transform Destructor Reads data out of the source, passing it through the transform Output buffer Offset within buffer to write to Desired byte count Number of bytes read Attempts to read from the transform Some useful info here: http://msdn.microsoft.com/en-gb/library/windows/desktop/aa965264%28v=vs.85%29.aspx#process_data Indicate that the source has been repositioned and completely drain out the transforms buffers The output WaveFormat of this Media Foundation Transform Media Foundation Transform Categories MFT_CATEGORY_VIDEO_DECODER MFT_CATEGORY_VIDEO_ENCODER MFT_CATEGORY_VIDEO_EFFECT MFT_CATEGORY_MULTIPLEXER MFT_CATEGORY_DEMULTIPLEXER MFT_CATEGORY_AUDIO_DECODER MFT_CATEGORY_AUDIO_ENCODER MFT_CATEGORY_AUDIO_EFFECT MFT_CATEGORY_VIDEO_PROCESSOR MFT_CATEGORY_OTHER Media Type helper class, simplifying working with IMFMediaType (will probably change in the future, to inherit from an attributes class) Currently does not release the COM object, so you must do that yourself Wraps an existing IMFMediaType object The IMFMediaType object Creates and wraps a new IMFMediaType object Creates and wraps a new IMFMediaType object based on a WaveFormat WaveFormat Tries to get a UINT32 value, returning a default value if it doesn't exist Attribute key Default value Value or default if key doesn't exist The Sample Rate (valid for audio media types) The number of Channels (valid for audio media types) The number of bits per sample (n.b. not always valid for compressed audio types) The average bytes per second (valid for audio media types) The Media Subtype. For audio, is a value from the AudioSubtypes class The Major type, e.g. audio or video (from the MediaTypes class) Access to the actual IMFMediaType object Use to pass to MF APIs or Marshal.ReleaseComObject when you are finished with it Major Media Types http://msdn.microsoft.com/en-us/library/windows/desktop/aa367377%28v=vs.85%29.aspx Default Audio Video Protected Media Synchronized Accessible Media Interchange (SAMI) captions. Script stream Still image stream. HTML stream. Binary stream. A stream that contains data files. Contains information about an input stream on a Media Foundation transform (MFT) Maximum amount of time between an input sample and the corresponding output sample, in 100-nanosecond units. Bitwise OR of zero or more flags from the _MFT_INPUT_STREAM_INFO_FLAGS enumeration. The minimum size of each input buffer, in bytes. Maximum amount of input data, in bytes, that the MFT holds to perform lookahead. The memory alignment required for input buffers. If the MFT does not require a specific alignment, the value is zero. Defines messages for a Media Foundation transform (MFT). Requests the MFT to flush all stored data. Requests the MFT to drain any stored data. Sets or clears the Direct3D Device Manager for DirectX Video Accereration (DXVA). Drop samples - requires Windows 7 Command Tick - requires Windows 8 Notifies the MFT that streaming is about to begin. Notifies the MFT that streaming is about to end. Notifies the MFT that an input stream has ended. Notifies the MFT that the first sample is about to be processed. Marks a point in the stream. This message applies only to asynchronous MFTs. Requires Windows 7 Contains information about an output buffer for a Media Foundation transform. Output stream identifier. Pointer to the IMFSample interface. Before calling ProcessOutput, set this member to zero. Before calling ProcessOutput, set this member to NULL. Contains information about an output stream on a Media Foundation transform (MFT). Bitwise OR of zero or more flags from the _MFT_OUTPUT_STREAM_INFO_FLAGS enumeration. Minimum size of each output buffer, in bytes. The memory alignment required for output buffers. Contains media type information for registering a Media Foundation transform (MFT). The major media type. The Media Subtype Contains statistics about the performance of the sink writer. The size of the structure, in bytes. The time stamp of the most recent sample given to the sink writer. The time stamp of the most recent sample to be encoded. The time stamp of the most recent sample given to the media sink. The time stamp of the most recent stream tick. The system time of the most recent sample request from the media sink. The number of samples received. The number of samples encoded. The number of samples given to the media sink. The number of stream ticks received. The amount of data, in bytes, currently waiting to be processed. The total amount of data, in bytes, that has been sent to the media sink. The number of pending sample requests. The average rate, in media samples per 100-nanoseconds, at which the application sent samples to the sink writer. The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the encoder The average rate, in media samples per 100-nanoseconds, at which the sink writer sent samples to the media sink. Contains flags for registering and enumeration Media Foundation transforms (MFTs). None The MFT performs synchronous data processing in software. The MFT performs asynchronous data processing in software. The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. The MFT that must be unlocked by the application before use. For enumeration, include MFTs that were registered in the caller's process. The MFT is optimized for transcoding rather than playback. For enumeration, sort and filter the results. Bitwise OR of all the flags, excluding MFT_ENUM_FLAG_SORTANDFILTER. Indicates the status of an input stream on a Media Foundation transform (MFT). None The input stream can receive more data at this time. Describes an input stream on a Media Foundation transform (MFT). No flags set Each media sample (IMFSample interface) of input data must contain complete, unbroken units of data. Each media sample that the client provides as input must contain exactly one unit of data, as defined for the MFT_INPUT_STREAM_WHOLE_SAMPLES flag. All input samples must be the same size. MTF Input Stream Holds buffers The MFT does not hold input samples after the IMFTransform::ProcessInput method returns. This input stream can be removed by calling IMFTransform::DeleteInputStream. This input stream is optional. The MFT can perform in-place processing. Defines flags for the IMFTransform::ProcessOutput method. None The MFT can still generate output from this stream without receiving any more input. The format has changed on this output stream, or there is a new preferred format for this stream. The MFT has removed this output stream. There is no sample ready for this stream. Indicates whether a Media Foundation transform (MFT) can produce output data. None There is a sample available for at least one output stream. Describes an output stream on a Media Foundation transform (MFT). No flags set Each media sample (IMFSample interface) of output data from the MFT contains complete, unbroken units of data. Each output sample contains exactly one unit of data, as defined for the MFT_OUTPUT_STREAM_WHOLE_SAMPLES flag. All output samples are the same size. The MFT can discard the output data from this output stream, if requested by the client. This output stream is optional. The MFT provides the output samples for this stream, either by allocating them internally or by operating directly on the input samples. The MFT can either provide output samples for this stream or it can use samples that the client allocates. The MFT does not require the client to process the output for this stream. The MFT might remove this output stream during streaming. Defines flags for processing output samples in a Media Foundation transform (MFT). None Do not produce output for streams in which the pSample member of the MFT_OUTPUT_DATA_BUFFER structure is NULL. Regenerates the last output sample. Process Output Status flags None The Media Foundation transform (MFT) has created one or more new output streams. Defines flags for the setting or testing the media type on a Media Foundation transform (MFT). None Test the proposed media type, but do not set it. Helper methods for working with audio buffers Ensures the buffer is big enough Ensures the buffer is big enough these will become extension methods once we move to .NET 3.5 Checks if the buffer passed in is entirely full of nulls Converts to a string containing the buffer described in hex Decodes the buffer using the specified encoding, stopping at the first null Concatenates the given arrays into a single array. The arrays to concatenate The concatenated resulting array. An encoding for use with file types that have one byte per character The one and only instance of this class A very basic circular buffer implementation Create a new circular buffer Max buffer size in bytes Write data to the buffer Data to write Offset into data Number of bytes to write number of bytes written Read from the buffer Buffer to read into Offset into read buffer Bytes to read Number of bytes actually read Resets the buffer Advances the buffer, discarding bytes Bytes to advance Maximum length of this circular buffer Number of bytes currently stored in the circular buffer A util class for conversions linear to dB conversion linear value decibel value dB to linear conversion decibel value linear value Allows us to add descriptions to interop members Field description String representation The description Helper to get descriptions Describes the Guid by looking for a FieldDescription attribute on the specified class HResult S_OK S_FALSE E_INVALIDARG (from winerror.h) MAKE_HRESULT macro Helper to deal with the fact that in Win Store apps, the HResult property name has changed COM Exception The HResult Methods for converting between IEEE 80-bit extended double precision and standard C# double precision. Converts a C# double precision number to an 80-bit IEEE extended double precision number (occupying 10 bytes). The double precision number to convert to IEEE extended. An array of 10 bytes containing the IEEE extended number. Converts an IEEE 80-bit extended precision number to a C# double precision number. The 80-bit IEEE extended number (as an array of 10 bytes). A C# double precision number that is a close representation of the IEEE extended number. Pass-through stream that ignores Dispose Useful for dealing with MemoryStreams that you want to re-use Creates a new IgnoreDisposeStream The source stream Flushes the underlying stream Reads from the underlying stream Seeks on the underlying stream Sets the length of the underlying stream Writes to the underlying stream Dispose - by default (IgnoreDispose = true) will do nothing, leaving the underlying stream undisposed The source stream all other methods fall through to If true the Dispose will be ignored, if false, will pass through to the SourceStream Set to true by default Can Read Can Seek Can write to the underlying stream Gets the length of the underlying stream Gets or sets the position of the underlying stream In-place and stable implementation of MergeSort MergeSort a list of comparable items MergeSort a list General purpose native methods for internal NAudio use Event Args for WaveInStream event Creates new WaveInEventArgs Buffer containing recorded data. Note that it might not be completely full. The number of recorded bytes in Buffer. Sample provider interface to make WaveChannel32 extensible Still a bit ugly, hence internal at the moment - and might even make these into bit depth converting WaveProviders Sample Provider to allow fading in and out Like IWaveProvider, but makes it much simpler to put together a 32 bit floating point mixing engine Fill the specified buffer with 32 bit floating point samples The buffer to fill with samples. Offset into buffer The number of samples to read the number of samples written to the buffer. Gets the WaveFormat of this Sample Provider. The wave format. Creates a new FadeInOutSampleProvider The source stream with the audio to be faded in or out If true, we start faded out Requests that a fade-in begins (will start on the next call to Read) Duration of fade in milliseconds Requests that a fade-out begins (will start on the next call to Read) Duration of fade in milliseconds Reads samples from this sample provider Buffer to read into Offset within buffer to write to Number of samples desired Number of samples read WaveFormat of this SampleProvider Simple SampleProvider that passes through audio unchanged and raises an event every n samples with the maximum sample value from the period for metering purposes Initialises a new instance of MeteringSampleProvider that raises 10 stream volume events per second Source sample provider Initialises a new instance of MeteringSampleProvider source sampler provider Number of samples between notifications Reads samples from this Sample Provider Sample buffer Offset into sample buffer Number of samples required Number of samples read Number of Samples per notification Raised periodically to inform the user of the max volume The WaveFormat of this sample provider Event args for aggregated stream volume Max sample values array (one for each channel) A sample provider mixer, allowing inputs to be added and removed Creates a new MixingSampleProvider, with no inputs, but a specified WaveFormat The WaveFormat of this mixer. All inputs must be in this format Creates a new MixingSampleProvider, based on the given inputs Mixer inputs - must all have the same waveformat, and must all be of the same WaveFormat. There must be at least one input Adds a WaveProvider as a Mixer input. Must be PCM or IEEE float already IWaveProvider mixer input Adds a new mixer input Mixer input Removes a mixer input Mixer input to remove Removes all mixer inputs Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples required Number of samples read When set to true, the Read method always returns the number of samples requested, even if there are no inputs, or if the current inputs reach their end. Setting this to true effectively makes this a never-ending sample provider, so take care if you plan to write it out to a file. The output WaveFormat of this sample provider No nonsense mono to stereo provider, no volume adjustment, just copies input to left and right. Initializes a new instance of MonoToStereoSampleProvider Source sample provider Reads samples from this provider Sample buffer Offset into sample buffer Number of samples required Number of samples read WaveFormat of this provider Allows any number of inputs to be patched to outputs Uses could include swapping left and right channels, turning mono into stereo, feeding different input sources to different soundcard outputs etc Creates a multiplexing sample provider, allowing re-patching of input channels to different output channels Input sample providers. Must all be of the same sample rate, but can have any number of channels Desired number of output channels. persistent temporary buffer to prevent creating work for garbage collector Reads samples from this sample provider Buffer to be filled with sample data Offset into buffer to start writing to, usually 0 Number of samples required Number of samples read Connects a specified input channel to an output channel Input Channel index (zero based). Must be less than InputChannelCount Output Channel index (zero based). Must be less than OutputChannelCount The output WaveFormat for this SampleProvider The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in one stereo and one mono input provider, the number of input channels is three. The number of output channels, as specified in the constructor. Simple class that raises an event on every sample An interface for WaveStreams which can report notification of individual samples A sample has been detected Initializes a new instance of NotifyingSampleProvider Source Sample Provider Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples desired Number of samples read WaveFormat Sample notifier Allows you to: 1. insert a pre-delay of silence before the source begins 2. skip over a certain amount of the beginning of the source 3. only play a set amount from the source 4. insert silence at the end after the source is complete Creates a new instance of offsetSampleProvider The Source Sample Provider to read from Reads from this sample provider Sample buffer Offset within sample buffer to read to Number of samples required Number of samples read Number of samples of silence to insert before playing source Amount of silence to insert before playing Number of samples in source to discard Amount of audio to skip over from the source before beginning playback Number of samples to read from source (if 0, then read it all) Amount of audio to take from the source (TimeSpan.Zero means play to end) Number of samples of silence to insert after playing source Amount of silence to insert after playing source The WaveFormat of this SampleProvider Converts a mono sample provider to stereo, with a customisable pan strategy Initialises a new instance of the PanningSampleProvider Source sample provider, must be mono Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples desired Number of samples read Pan value, must be between -1 (left) and 1 (right) The pan strategy currently in use The WaveFormat of this sample provider Pair of floating point values, representing samples or multipliers Left value Right value Required Interface for a Panning Strategy Gets the left and right multipliers for a given pan value Pan value from -1 to 1 Left and right multipliers in a stereo sample pair Simplistic "balance" control - treating the mono input as if it was stereo In the centre, both channels full volume. Opposite channel decays linearly as balance is turned to to one side Gets the left and right channel multipliers for this pan value Pan value, between -1 and 1 Left and right multipliers Square Root Pan, thanks to Yuval Naveh Gets the left and right channel multipliers for this pan value Pan value, between -1 and 1 Left and right multipliers Sinus Pan, thanks to Yuval Naveh Gets the left and right channel multipliers for this pan value Pan value, between -1 and 1 Left and right multipliers Linear Pan Gets the left and right channel multipliers for this pan value Pan value, between -1 and 1 Left and right multipliers Converts an IWaveProvider containing 16 bit PCM to an ISampleProvider Helper base class for classes converting to ISampleProvider Source Wave Provider Source buffer (to avoid constantly creating small buffers during playback) Initialises a new instance of SampleProviderConverterBase Source Wave provider Reads samples from the source wave provider Sample buffer Offset into sample buffer Number of samples required Number of samples read Ensure the source buffer exists and is big enough Bytes required Wave format of this wave provider Initialises a new instance of Pcm16BitToSampleProvider Source wave provider Reads samples from this sample provider Sample buffer Offset into sample buffer Samples required Number of samples read Converts an IWaveProvider containing 24 bit PCM to an ISampleProvider Initialises a new instance of Pcm24BitToSampleProvider Source Wave Provider Reads floating point samples from this sample provider sample buffer offset within sample buffer to write to number of samples required number of samples provided Converts an IWaveProvider containing 32 bit PCM to an ISampleProvider Initialises a new instance of Pcm32BitToSampleProvider Source Wave Provider Reads floating point samples from this sample provider sample buffer offset within sample buffer to write to number of samples required number of samples provided Converts an IWaveProvider containing 8 bit PCM to an ISampleProvider Initialises a new instance of Pcm8BitToSampleProvider Source wave provider Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples to read Number of samples read Utility class that takes an IWaveProvider input at any bit depth and exposes it as an ISampleProvider. Can turn mono inputs into stereo, and allows adjusting of volume (The eventual successor to WaveChannel32) This class also serves as an example of how you can link together several simple Sample Providers to form a more useful class. Initialises a new instance of SampleChannel Source wave provider, must be PCM or IEEE Initialises a new instance of SampleChannel Source wave provider, must be PCM or IEEE force mono inputs to become stereo Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples desired Number of samples read The WaveFormat of this Sample Provider Allows adjusting the volume, 1.0f = full volume Raised periodically to inform the user of the max volume (before the volume meter) Utility class for converting to SampleProvider Helper function to go from IWaveProvider to a SampleProvider Must already be PCM or IEEE float The WaveProvider to convert A sample provider Helper class for when you need to convert back to an IWaveProvider from an ISampleProvider. Keeps it as IEEE float Initializes a new instance of the WaveProviderFloatToWaveProvider class Source wave provider Reads from this provider The waveformat of this WaveProvider (same as the source) Converts a sample provider to 16 bit PCM, optionally clipping and adjusting volume along the way Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. Number of channels and sample rate remain unchanged. The input source provider Reads bytes from this wave stream The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. Volume of this channel. 1.0 = full scale Converts a sample provider to 24 bit PCM, optionally clipping and adjusting volume along the way Converts from an ISampleProvider (IEEE float) to a 16 bit PCM IWaveProvider. Number of channels and sample rate remain unchanged. The input source provider Reads bytes from this wave stream, clipping if necessary The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. The Format of this IWaveProvider Volume of this channel. 1.0 = full scale, 0.0 to mute Signal Generator Sin, Square, Triangle, SawTooth, White Noise, Pink Noise, Sweep. Posibility to change ISampleProvider Example : --------- WaveOut _waveOutGene = new WaveOut(); WaveGenerator wg = new SignalGenerator(); wg.Type = ... wg.Frequency = ... wg ... _waveOutGene.Init(wg); _waveOutGene.Play(); Initializes a new instance for the Generator (Default :: 44.1Khz, 2 channels, Sinus, Frequency = 440, Gain = 1) Initializes a new instance for the Generator (UserDef SampleRate & Channels) Desired sample rate Number of channels Reads from this provider. Private :: Random for WhiteNoise & Pink Noise (Value form -1 to 1) Random value from -1 to +1 The waveformat of this WaveProvider (same as the source) Frequency for the Generator. (20.0 - 20000.0 Hz) Sin, Square, Triangle, SawTooth, Sweep (Start Frequency). Return Log of Frequency Start (Read only) End Frequency for the Sweep Generator. (Start Frequency in Frequency) Return Log of Frequency End (Read only) Gain for the Generator. (0.0 to 1.0) Channel PhaseReverse Type of Generator. Length Seconds for the Sweep Generator. Signal Generator type Pink noise White noise Sweep Sine wave Square wave Triangle Wave Sawtooth wave Very simple sample provider supporting adjustable gain Initializes a new instance of VolumeSampleProvider Source Sample Provider Reads samples from this sample provider Sample buffer Offset into sample buffer Number of samples desired Number of samples read WaveFormat Allows adjusting the volume, 1.0f = full volume Helper class turning an already 32 bit floating point IWaveProvider into an ISampleProvider - hopefully not needed for most applications Initializes a new instance of the WaveToSampleProvider class Source wave provider, must be IEEE float Reads from this provider Helper class turning an already 64 bit floating point IWaveProvider into an ISampleProvider - hopefully not needed for most applications Initializes a new instance of the WaveToSampleProvider class Source wave provider, must be IEEE float Reads from this provider Fully managed resampling sample provider, based on the WDL Resampler Constructs a new resampler Source to resample Desired output sample rate Reads from this sample provider Output WaveFormat Microsoft ADPCM See http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm Represents a Wave file format format type number of channels sample rate for buffer estimation block size of data number of bits per sample of mono data number of following bytes Creates a new PCM 44.1Khz stereo 16 bit format Creates a new 16 bit wave format with the specified sample rate and channel count Sample Rate Number of channels Gets the size of a wave buffer equivalent to the latency in milliseconds. The milliseconds. Creates a WaveFormat with custom members The encoding Sample Rate Number of channels Average Bytes Per Second Block Align Bits Per Sample Creates an A-law wave format Sample Rate Number of Channels Wave Format Creates a Mu-law wave format Sample Rate Number of Channels Wave Format Creates a new PCM format with the specified sample rate, bit depth and channels Creates a new 32 bit IEEE floating point wave format sample rate number of channels Helper function to retrieve a WaveFormat structure from a pointer WaveFormat structure Helper function to marshal WaveFormat to an IntPtr WaveFormat IntPtr to WaveFormat structure (needs to be freed by callee) Reads in a WaveFormat (with extra data) from a fmt chunk (chunk identifier and length should already have been read) Binary reader Format chunk length A WaveFormatExtraData Reads a new WaveFormat object from a stream A binary reader that wraps the stream Reports this WaveFormat as a string String describing the wave format Compares with another WaveFormat object Object to compare to True if the objects are the same Provides a Hashcode for this WaveFormat A hashcode Writes this WaveFormat object to a stream the output stream Returns the encoding type used Returns the number of channels (1=mono,2=stereo etc) Returns the sample rate (samples per second) Returns the average number of bytes used per second Returns the block alignment Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) Can be 0 for some codecs Returns the number of extra bytes used by this waveformat. Often 0, except for compressed formats which store extra data after the WAVEFORMATEX header Empty constructor needed for marshalling from a pointer Microsoft ADPCM Sample Rate Channels Serializes this wave format Binary writer String Description of this WaveFormat Samples per block Number of coefficients Coefficients GSM 610 Creates a GSM 610 WaveFormat For now hardcoded to 13kbps Writes this structure to a BinaryWriter Samples per block IMA/DVI ADPCM Wave Format Work in progress parameterless constructor for Marshalling Creates a new IMA / DVI ADPCM Wave Format Sample Rate Number of channels Bits Per Sample MP3 WaveFormat, MPEGLAYER3WAVEFORMAT from mmreg.h Wave format ID (wID) Padding flags (fdwFlags) Block Size (nBlockSize) Frames per block (nFramesPerBlock) Codec Delay (nCodecDelay) Creates a new MP3 WaveFormat Wave Format Padding Flags MPEGLAYER3_FLAG_PADDING_ISO MPEGLAYER3_FLAG_PADDING_ON MPEGLAYER3_FLAG_PADDING_OFF Wave Format ID MPEGLAYER3_ID_UNKNOWN MPEGLAYER3_ID_MPEG MPEGLAYER3_ID_CONSTANTFRAMESIZE DSP Group TrueSpeech DSP Group TrueSpeech WaveFormat Writes this structure to a BinaryWriter Summary description for WaveFormatEncoding. WAVE_FORMAT_UNKNOWN, Microsoft Corporation WAVE_FORMAT_PCM Microsoft Corporation WAVE_FORMAT_ADPCM Microsoft Corporation WAVE_FORMAT_IEEE_FLOAT Microsoft Corporation WAVE_FORMAT_VSELP Compaq Computer Corp. WAVE_FORMAT_IBM_CVSD IBM Corporation WAVE_FORMAT_ALAW Microsoft Corporation WAVE_FORMAT_MULAW Microsoft Corporation WAVE_FORMAT_DTS Microsoft Corporation WAVE_FORMAT_DRM Microsoft Corporation WAVE_FORMAT_WMAVOICE9 WAVE_FORMAT_OKI_ADPCM OKI WAVE_FORMAT_DVI_ADPCM Intel Corporation WAVE_FORMAT_IMA_ADPCM Intel Corporation WAVE_FORMAT_MEDIASPACE_ADPCM Videologic WAVE_FORMAT_SIERRA_ADPCM Sierra Semiconductor Corp WAVE_FORMAT_G723_ADPCM Antex Electronics Corporation WAVE_FORMAT_DIGISTD DSP Solutions, Inc. WAVE_FORMAT_DIGIFIX DSP Solutions, Inc. WAVE_FORMAT_DIALOGIC_OKI_ADPCM Dialogic Corporation WAVE_FORMAT_MEDIAVISION_ADPCM Media Vision, Inc. WAVE_FORMAT_CU_CODEC Hewlett-Packard Company WAVE_FORMAT_YAMAHA_ADPCM Yamaha Corporation of America WAVE_FORMAT_SONARC Speech Compression WAVE_FORMAT_DSPGROUP_TRUESPEECH DSP Group, Inc WAVE_FORMAT_ECHOSC1 Echo Speech Corporation WAVE_FORMAT_AUDIOFILE_AF36, Virtual Music, Inc. WAVE_FORMAT_APTX Audio Processing Technology WAVE_FORMAT_AUDIOFILE_AF10, Virtual Music, Inc. WAVE_FORMAT_PROSODY_1612, Aculab plc WAVE_FORMAT_LRC, Merging Technologies S.A. WAVE_FORMAT_DOLBY_AC2, Dolby Laboratories WAVE_FORMAT_GSM610, Microsoft Corporation WAVE_FORMAT_MSNAUDIO, Microsoft Corporation WAVE_FORMAT_ANTEX_ADPCME, Antex Electronics Corporation WAVE_FORMAT_CONTROL_RES_VQLPC, Control Resources Limited WAVE_FORMAT_DIGIREAL, DSP Solutions, Inc. WAVE_FORMAT_DIGIADPCM, DSP Solutions, Inc. WAVE_FORMAT_CONTROL_RES_CR10, Control Resources Limited WAVE_FORMAT_MPEG, Microsoft Corporation WAVE_FORMAT_MPEGLAYER3, ISO/MPEG Layer3 Format Tag WAVE_FORMAT_GSM WAVE_FORMAT_G729 WAVE_FORMAT_G723 WAVE_FORMAT_ACELP WAVE_FORMAT_RAW_AAC1 Windows Media Audio, WAVE_FORMAT_WMAUDIO2, Microsoft Corporation Windows Media Audio Professional WAVE_FORMAT_WMAUDIO3, Microsoft Corporation Windows Media Audio Lossless, WAVE_FORMAT_WMAUDIO_LOSSLESS Windows Media Audio Professional over SPDIF WAVE_FORMAT_WMASPDIF (0x0164) Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_ADTS_AAC. The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, prior to applying spectral band replication (SBR) or parametric stereo (PS) tools, if present. No additional data is required after the WAVEFORMATEX structure. http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx Source wmCodec.h MPEG-4 audio transport stream with a synchronization layer (LOAS) and a multiplex layer (LATM). The format block is a WAVEFORMATEX structure with wFormatTag equal to WAVE_FORMAT_MPEG_LOAS. The WAVEFORMATEX structure specifies the core AAC-LC sample rate and number of channels, prior to applying spectral SBR or PS tools, if present. No additional data is required after the WAVEFORMATEX structure. http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx NOKIA_MPEG_ADTS_AAC Source wmCodec.h NOKIA_MPEG_RAW_AAC Source wmCodec.h VODAFONE_MPEG_ADTS_AAC Source wmCodec.h VODAFONE_MPEG_RAW_AAC Source wmCodec.h High-Efficiency Advanced Audio Coding (HE-AAC) stream. The format block is an HEAACWAVEFORMAT structure. http://msdn.microsoft.com/en-us/library/dd317599%28VS.85%29.aspx WAVE_FORMAT_DVM WAVE_FORMAT_VORBIS1 "Og" Original stream compatible WAVE_FORMAT_VORBIS2 "Pg" Have independent header WAVE_FORMAT_VORBIS3 "Qg" Have no codebook header WAVE_FORMAT_VORBIS1P "og" Original stream compatible WAVE_FORMAT_VORBIS2P "pg" Have independent headere WAVE_FORMAT_VORBIS3P "qg" Have no codebook header WAVE_FORMAT_EXTENSIBLE WaveFormatExtensible http://www.microsoft.com/whdc/device/audio/multichaud.mspx Parameterless constructor for marshalling Creates a new WaveFormatExtensible for PCM or IEEE WaveFormatExtensible for PCM or floating point can be awkward to work with This creates a regular WaveFormat structure representing the same audio format Serialize String representation SubFormat (may be one of AudioMediaSubtypes) This class used for marshalling from unmanaged code parameterless constructor for marshalling Reads this structure from a BinaryReader Writes this structure to a BinaryWriter Allows the extra data to be read The WMA wave format. May not be much use because WMA codec is a DirectShow DMO not an ACM Generic interface for wave recording Start Recording Stop Recording Recording WaveFormat Indicates recorded data is available Indicates that all recorded data has now been received. IWaveBuffer interface use to store wave datas. Data can be manipulated with arrays (,, , ) that are pointing to the same memory buffer. This is a requirement for all subclasses. Use the associated Count property based on the type of buffer to get the number of data in the buffer. for the standard implementation using C# unions. Gets the byte buffer. The byte buffer. Gets the float buffer. The float buffer. Gets the short buffer. The short buffer. Gets the int buffer. The int buffer. Gets the max size in bytes of the byte buffer.. Maximum number of bytes in the buffer. Gets the byte buffer count. The byte buffer count. Gets the float buffer count. The float buffer count. Gets the short buffer count. The short buffer count. Gets the int buffer count. The int buffer count. Playback State Stopped Playing Paused Stopped Event Args Initializes a new instance of StoppedEventArgs An exception to report (null if no exception) An exception. Will be null if the playback or record operation stopped WaveBuffer class use to store wave datas. Data can be manipulated with arrays (,,, ) that are pointing to the same memory buffer. Use the associated Count property based on the type of buffer to get the number of data in the buffer. Implicit casting is now supported to float[], byte[], int[], short[]. You must not use Length on returned arrays. n.b. FieldOffset is 8 now to allow it to work natively on 64 bit Number of Bytes Initializes a new instance of the class. The number of bytes. The size of the final buffer will be aligned on 4 Bytes (upper bound) Initializes a new instance of the class binded to a specific byte buffer. A byte buffer to bound the WaveBuffer to. Binds this WaveBuffer instance to a specific byte buffer. A byte buffer to bound the WaveBuffer to. Performs an implicit conversion from to . The wave buffer. The result of the conversion. Performs an implicit conversion from to . The wave buffer. The result of the conversion. Performs an implicit conversion from to . The wave buffer. The result of the conversion. Performs an implicit conversion from to . The wave buffer. The result of the conversion. Clears the associated buffer. Copy this WaveBuffer to a destination buffer up to ByteBufferCount bytes. Checks the validity of the count parameters. Name of the arg. The value. The size of value. Gets the byte buffer. The byte buffer. Gets the float buffer. The float buffer. Gets the short buffer. The short buffer. Gets the int buffer. The int buffer. Gets the max size in bytes of the byte buffer.. Maximum number of bytes in the buffer. Gets or sets the byte buffer count. The byte buffer count. Gets or sets the float buffer count. The float buffer count. Gets or sets the short buffer count. The short buffer count. Gets or sets the int buffer count. The int buffer count. Provides a buffered store of samples Read method will return queued samples or fill buffer with zeroes Now backed by a circular buffer Creates a new buffered WaveProvider WaveFormat Adds samples. Takes a copy of buffer, so that buffer can be reused if necessary Reads from this WaveProvider Will always return count bytes, since we will zero-fill the buffer if not enough available Discards all audio from the buffer Buffer length in bytes Buffer duration If true, when the buffer is full, start throwing away data if false, AddSamples will throw an exception when buffer is full The number of buffered bytes Buffered Duration Gets the WaveFormat Converts from mono to stereo, allowing freedom to route all, some, or none of the incoming signal to left or right channels Creates a new stereo waveprovider based on a mono input Mono 16 bit PCM input Reads bytes from this WaveProvider 1.0 to copy the mono stream to the left channel without adjusting volume 1.0 to copy the mono stream to the right channel without adjusting volume Output Wave Format Allows any number of inputs to be patched to outputs Uses could include swapping left and right channels, turning mono into stereo, feeding different input sources to different soundcard outputs etc Creates a multiplexing wave provider, allowing re-patching of input channels to different output channels Input wave providers. Must all be of the same format, but can have any number of channels Desired number of output channels. persistent temporary buffer to prevent creating work for garbage collector Reads data from this WaveProvider Buffer to be filled with sample data Offset to write to within buffer, usually 0 Number of bytes required Number of bytes read Connects a specified input channel to an output channel Input Channel index (zero based). Must be less than InputChannelCount Output Channel index (zero based). Must be less than OutputChannelCount The WaveFormat of this WaveProvider The number of input channels. Note that this is not the same as the number of input wave providers. If you pass in one stereo and one mono input provider, the number of input channels is three. The number of output channels, as specified in the constructor. Takes a stereo 16 bit input and turns it mono, allowing you to select left or right channel only or mix them together Creates a new mono waveprovider based on a stereo input Stereo 16 bit PCM input Reads bytes from this WaveProvider 1.0 to mix the mono source entirely to the left channel 1.0 to mix the mono source entirely to the right channel Output Wave Format Helper class allowing us to modify the volume of a 16 bit stream without converting to IEEE float Constructs a new VolumeWaveProvider16 Source provider, must be 16 bit PCM Read bytes from this WaveProvider Buffer to read into Offset within buffer to read to Bytes desired Bytes read Gets or sets volume. 1.0 is full scale, 0.0 is silence, anything over 1.0 will amplify but potentially clip WaveFormat of this WaveProvider Converts 16 bit PCM to IEEE float, optionally adjusting volume along the way Creates a new Wave16toFloatProvider the source provider Reads bytes from this wave stream The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. Volume of this channel. 1.0 = full scale Converts IEEE float to 16 bit PCM, optionally clipping and adjusting volume along the way Creates a new WaveFloatTo16Provider the source provider Reads bytes from this wave stream The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. Volume of this channel. 1.0 = full scale Buffered WaveProvider taking source data from WaveIn Creates a new WaveInProvider n.b. Should make sure the WaveFormat is set correctly on IWaveIn before calling The source of wave data Reads data from the WaveInProvider The WaveFormat Base class for creating a 16 bit wave provider Initializes a new instance of the WaveProvider16 class defaulting to 44.1kHz mono Initializes a new instance of the WaveProvider16 class with the specified sample rate and number of channels Allows you to specify the sample rate and channels for this WaveProvider (should be initialised before you pass it to a wave player) Implements the Read method of IWaveProvider by delegating to the abstract Read method taking a short array Method to override in derived classes Supply the requested number of samples into the buffer The Wave Format Base class for creating a 32 bit floating point wave provider Can also be used as a base class for an ISampleProvider that can be plugged straight into anything requiring an IWaveProvider Initializes a new instance of the WaveProvider32 class defaulting to 44.1kHz mono Initializes a new instance of the WaveProvider32 class with the specified sample rate and number of channels Allows you to specify the sample rate and channels for this WaveProvider (should be initialised before you pass it to a wave player) Implements the Read method of IWaveProvider by delegating to the abstract Read method taking a float array Method to override in derived classes Supply the requested number of samples into the buffer The Wave Format Helper stream that lets us read from compressed audio files with large block alignment as though we could read any amount and reposition anywhere Base class for all WaveStream classes. Derives from stream. Flush does not need to do anything See An alternative way of repositioning. See Sets the length of the WaveStream. Not Supported. Writes to the WaveStream. Not Supported. Moves forward or backwards the specified number of seconds in the stream Number of seconds to move, can be negative Whether the WaveStream has non-zero sample data at the current position for the specified count Number of bytes to read Retrieves the WaveFormat for this stream We can read from this stream We can seek within this stream We can't write to this stream The block alignment for this wavestream. Do not modify the Position to anything that is not a whole multiple of this value The current position in the stream in Time format Total length in real-time of the stream (may be an estimate for compressed files) Creates a new BlockAlignReductionStream the input stream Disposes this WaveStream Reads data from this stream Block alignment of this stream Wave Format Length of this Stream Current position within stream Sample event arguments Constructor Left sample Right sample Class for reading any file that Media Foundation can play Will only work in Windows Vista and above Automatically converts to PCM If it is a video file with multiple audio streams, it will pick out the first audio stream Creates a new MediaFoundationReader based on the supplied file Filename (can also be a URL e.g. http:// mms:// file://) Creates a new MediaFoundationReader based on the supplied file Filename Advanced settings Creates the reader (overridable by ) Reads from this wave stream Buffer to read into Offset in buffer Bytes required Number of bytes read; 0 indicates end of stream Cleans up after finishing with this reader true if called from Dispose WaveFormat of this stream (n.b. this is after converting to PCM) The bytesRequired of this stream in bytes (n.b may not be accurate) Current position within this stream WaveFormat has changed Allows customisation of this reader class Sets up the default settings for MediaFoundationReader Allows us to request IEEE float output (n.b. no guarantee this will be accepted) If true, the reader object created in the constructor is used in Read Should only be set to true if you are working entirely on an STA thread, or entirely with MTA threads. If true, the reposition does not happen immediately, but waits until the next call to read to be processed. WaveStream that simply passes on data from its source stream (e.g. a MemoryStream) Initialises a new instance of RawSourceWaveStream The source stream containing raw audio The waveformat of the audio in the source stream Reads data from the stream The WaveFormat of this stream The length in bytes of this stream (if supported) The current position in this stream A simple compressor Create a new simple compressor stream Source stream Determine whether the stream has the required amount of data. Number of bytes of data required from the stream. Flag indicating whether the required amount of data is avialable. Reads bytes from this stream Buffer to read into Offset in array to read into Number of bytes to read Number of bytes read Disposes this stream true if the user called this Make-up Gain Threshold Ratio Attack time Release time Turns gain on or off Returns the stream length Gets or sets the current position in the stream Gets the WaveFormat of this stream Gets the block alignment for this stream Represents Channel for the WaveMixerStream 32 bit output and 16 bit input It's output is always stereo The input stream can be panned Creates a new WaveChannel32 the source stream stream volume (1 is 0dB) pan control (-1 to 1) Creates a WaveChannel32 with default settings The source stream Reads bytes from this wave stream The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. Determines whether this channel has any data to play to allow optimisation to not read, but bump position forward Disposes this WaveStream Raise the sample event (no check for null because it has already been done) Gets the block alignment for this WaveStream Returns the stream length Gets or sets the current position in the stream If true, Read always returns the number of bytes requested Volume of this channel. 1.0 = full scale Pan of this channel (from -1 to 1) Sample Simply shifts the input stream in time, optionally clipping its start and end. (n.b. may include looping in the future) Creates a new WaveOffsetStream the source stream the time at which we should start reading from the source stream amount to trim off the front of the source stream length of time to play from source stream Creates a WaveOffsetStream with default settings (no offset or pre-delay, and whole length of source stream) The source stream Reads bytes from this wave stream The destination buffer Offset into the destination buffer Number of bytes read Number of bytes read. Determines whether this channel has any data to play to allow optimisation to not read, but bump position forward Disposes this WaveStream The length of time before which no audio will be played An offset into the source stream from which to start playing Length of time to read from the source stream Gets the block alignment for this WaveStream Returns the stream length Gets or sets the current position in the stream Useful extension methods to make switching between WaveAndSampleProvider easier Converts a WaveProvider into a SampleProvider (only works for PCM) WaveProvider to convert Allows sending a SampleProvider directly to an IWavePlayer without needing to convert back to an IWaveProvider The WavePlayer Audio Capture using Wasapi See http://msdn.microsoft.com/en-us/library/dd370800%28VS.85%29.aspx Initialises a new instance of the WASAPI capture class Initialises a new instance of the WASAPI capture class Capture device to use Way of enumerating all the audio capture devices available on the system Gets the default audio capture device The default audio capture device To allow overrides to specify different flags (e.g. loopback) Start Recording Stop Recording Dispose Indicates recorded data is available Indicates that all recorded data has now been received. Recording wave format Represents the interface to a device that can play audio Begin playback Stop playback Pause Playback Obsolete init method Initialise playback Function to create the waveprovider to be played Called on the playback thread Current playback state Indicates that playback has gone into a stopped state due to reaching the end of the input stream or an error has been encountered during playback WASAPI Out for Windows RT WASAPI Out using default audio endpoint ShareMode - shared or exclusive Desired latency in milliseconds Creates a new WASAPI Output Device to use Properties of the client's audio stream. Set before calling init Sets the parameters that describe the properties of the client's audio stream. Boolean value to indicate whether or not the audio stream is hardware-offloaded. An enumeration that is used to specify the category of the audio stream. A bit-field describing the characteristics of the stream. Supported in Windows 8.1 and later. Begin Playback Stop playback and flush buffers Stop playback without flushing buffers Old init implementation. Use the func one Initializes with a function to create the provider that is made on the playback thread Creates the wave provider Initialize for playing the specified wave stream Dispose Playback Stopped Playback State Come useful native methods for Windows 8 support Enables Windows Store apps to access preexisting Component Object Model (COM) interfaces in the WASAPI family. A device interface ID for an audio device. This is normally retrieved from a DeviceInformation object or one of the methods of the MediaDevice class. The IID of a COM interface in the WASAPI family, such as IAudioClient. Interface-specific activation parameters. For more information, see the pActivationParams parameter in IMMDevice::Activate. The GetBufferSize method retrieves the size (maximum capacity) of the endpoint buffer. The GetService method accesses additional services from the audio client object. The interface ID for the requested service. Pointer to a pointer variable into which the method writes the address of an instance of the requested interface.