using System; using System.Runtime.InteropServices; namespace Vanara.PInvoke { /// Functions, structures and constants from Windows Multimedia Api. public static partial class Winmm { // TODO: ****** Yes, I know. This doesn't belong here. Until I do the winmm.dll library, this will have to live here. ****** /// Wave Audio Formats [PInvokeData("mmreg.h")] public enum WAVE_FORMAT : ushort { /// Microsoft Corporation WAVE_FORMAT_UNKNOWN = 0x0000, /// Microsoft Corporation WAVE_FORMAT_ADPCM = 0x0002, /// Microsoft Corporation WAVE_FORMAT_IEEE_FLOAT = 0x0003, /// Compaq Computer Corp. WAVE_FORMAT_VSELP = 0x0004, /// IBM Corporation WAVE_FORMAT_IBM_CVSD = 0x0005, /// Microsoft Corporation WAVE_FORMAT_ALAW = 0x0006, /// Microsoft Corporation WAVE_FORMAT_MULAW = 0x0007, /// Microsoft Corporation WAVE_FORMAT_DTS = 0x0008, /// Microsoft Corporation WAVE_FORMAT_DRM = 0x0009, /// Microsoft Corporation WAVE_FORMAT_WMAVOICE9 = 0x000A, /// Microsoft Corporation WAVE_FORMAT_WMAVOICE10 = 0x000B, /// OKI WAVE_FORMAT_OKI_ADPCM = 0x0010, /// Intel Corporation WAVE_FORMAT_DVI_ADPCM = 0x0011, /// Intel Corporation WAVE_FORMAT_IMA_ADPCM = WAVE_FORMAT_DVI_ADPCM, /// Videologic WAVE_FORMAT_MEDIASPACE_ADPCM = 0x0012, /// Sierra Semiconductor Corp WAVE_FORMAT_SIERRA_ADPCM = 0x0013, /// Antex Electronics Corporation WAVE_FORMAT_G723_ADPCM = 0x0014, /// DSP Solutions, Inc. WAVE_FORMAT_DIGISTD = 0x0015, /// DSP Solutions, Inc. WAVE_FORMAT_DIGIFIX = 0x0016, /// Dialogic Corporation WAVE_FORMAT_DIALOGIC_OKI_ADPCM = 0x0017, /// Media Vision, Inc. WAVE_FORMAT_MEDIAVISION_ADPCM = 0x0018, /// Hewlett-Packard Company WAVE_FORMAT_CU_CODEC = 0x0019, /// Hewlett-Packard Company WAVE_FORMAT_HP_DYN_VOICE = 0x001A, /// Yamaha Corporation of America WAVE_FORMAT_YAMAHA_ADPCM = 0x0020, /// Speech Compression WAVE_FORMAT_SONARC = 0x0021, /// DSP Group, Inc WAVE_FORMAT_DSPGROUP_TRUESPEECH = 0x0022, /// Echo Speech Corporation WAVE_FORMAT_ECHOSC1 = 0x0023, /// Virtual Music, Inc. WAVE_FORMAT_AUDIOFILE_AF36 = 0x0024, /// Audio Processing Technology WAVE_FORMAT_APTX = 0x0025, /// Virtual Music, Inc. WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /// Aculab plc WAVE_FORMAT_PROSODY_1612 = 0x0027, /// Merging Technologies S.A. WAVE_FORMAT_LRC = 0x0028, /// Dolby Laboratories WAVE_FORMAT_DOLBY_AC2 = 0x0030, /// Microsoft Corporation WAVE_FORMAT_GSM610 = 0x0031, /// Microsoft Corporation WAVE_FORMAT_MSNAUDIO = 0x0032, /// Antex Electronics Corporation WAVE_FORMAT_ANTEX_ADPCME = 0x0033, /// Control Resources Limited WAVE_FORMAT_CONTROL_RES_VQLPC = 0x0034, /// DSP Solutions, Inc. WAVE_FORMAT_DIGIREAL = 0x0035, /// DSP Solutions, Inc. WAVE_FORMAT_DIGIADPCM = 0x0036, /// Control Resources Limited WAVE_FORMAT_CONTROL_RES_CR10 = 0x0037, /// Natural MicroSystems WAVE_FORMAT_NMS_VBXADPCM = 0x0038, /// Crystal Semiconductor IMA ADPCM WAVE_FORMAT_CS_IMAADPCM = 0x0039, /// Echo Speech Corporation WAVE_FORMAT_ECHOSC3 = 0x003A, /// Rockwell International WAVE_FORMAT_ROCKWELL_ADPCM = 0x003B, /// Rockwell International WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C, /// Xebec Multimedia Solutions Limited WAVE_FORMAT_XEBEC = 0x003D, /// Antex Electronics Corporation WAVE_FORMAT_G721_ADPCM = 0x0040, /// Antex Electronics Corporation WAVE_FORMAT_G728_CELP = 0x0041, /// Microsoft Corporation WAVE_FORMAT_MSG723 = 0x0042, /// Intel Corp. WAVE_FORMAT_INTEL_G723_1 = 0x0043, /// Intel Corp. WAVE_FORMAT_INTEL_G729 = 0x0044, /// Sharp WAVE_FORMAT_SHARP_G726 = 0x0045, /// Microsoft Corporation WAVE_FORMAT_MPEG = 0x0050, /// InSoft, Inc. WAVE_FORMAT_RT24 = 0x0052, /// InSoft, Inc. WAVE_FORMAT_PAC = 0x0053, /// ISO/MPEG Layer3 Format Tag WAVE_FORMAT_MPEGLAYER3 = 0x0055, /// Lucent Technologies WAVE_FORMAT_LUCENT_G723 = 0x0059, /// Cirrus Logic WAVE_FORMAT_CIRRUS = 0x0060, /// ESS Technology WAVE_FORMAT_ESPCM = 0x0061, /// Voxware Inc WAVE_FORMAT_VOXWARE = 0x0062, /// Canopus, co., Ltd. WAVE_FORMAT_CANOPUS_ATRAC = 0x0063, /// APICOM WAVE_FORMAT_G726_ADPCM = 0x0064, /// APICOM WAVE_FORMAT_G722_ADPCM = 0x0065, /// Microsoft Corporation WAVE_FORMAT_DSAT = 0x0066, /// Microsoft Corporation WAVE_FORMAT_DSAT_DISPLAY = 0x0067, /// Voxware Inc WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 0x0069, /// Voxware Inc WAVE_FORMAT_VOXWARE_AC8 = 0x0070, /// Voxware Inc WAVE_FORMAT_VOXWARE_AC10 = 0x0071, /// Voxware Inc WAVE_FORMAT_VOXWARE_AC16 = 0x0072, /// Voxware Inc WAVE_FORMAT_VOXWARE_AC20 = 0x0073, /// Voxware Inc WAVE_FORMAT_VOXWARE_RT24 = 0x0074, /// Voxware Inc WAVE_FORMAT_VOXWARE_RT29 = 0x0075, /// Voxware Inc WAVE_FORMAT_VOXWARE_RT29HW = 0x0076, /// Voxware Inc WAVE_FORMAT_VOXWARE_VR12 = 0x0077, /// Voxware Inc WAVE_FORMAT_VOXWARE_VR18 = 0x0078, /// Voxware Inc WAVE_FORMAT_VOXWARE_TQ40 = 0x0079, /// Voxware Inc WAVE_FORMAT_VOXWARE_SC3 = 0x007A, /// Voxware Inc WAVE_FORMAT_VOXWARE_SC3_1 = 0x007B, /// Softsound, Ltd. WAVE_FORMAT_SOFTSOUND = 0x0080, /// Voxware Inc WAVE_FORMAT_VOXWARE_TQ60 = 0x0081, /// Microsoft Corporation WAVE_FORMAT_MSRT24 = 0x0082, /// AT&T Labs, Inc. WAVE_FORMAT_G729A = 0x0083, /// Motion Pixels WAVE_FORMAT_MVI_MVI2 = 0x0084, /// DataFusion Systems (Pty) (Ltd) WAVE_FORMAT_DF_G726 = 0x0085, /// DataFusion Systems (Pty) (Ltd) WAVE_FORMAT_DF_GSM610 = 0x0086, /// Iterated Systems, Inc. WAVE_FORMAT_ISIAUDIO = 0x0088, /// OnLive! Technologies, Inc. WAVE_FORMAT_ONLIVE = 0x0089, /// Multitude Inc. WAVE_FORMAT_MULTITUDE_FT_SX20 = 0x008A, /// Infocom WAVE_FORMAT_INFOCOM_ITS_G721_ADPCM = 0x008B, /// Convedia Corp. WAVE_FORMAT_CONVEDIA_G729 = 0x008C, /// Congruency Inc. WAVE_FORMAT_CONGRUENCY = 0x008D, /// Siemens Business Communications Sys WAVE_FORMAT_SBC24 = 0x0091, /// Sonic Foundry WAVE_FORMAT_DOLBY_AC3_SPDIF = 0x0092, /// MediaSonic WAVE_FORMAT_MEDIASONIC_G723 = 0x0093, /// Aculab plc WAVE_FORMAT_PROSODY_8KBPS = 0x0094, /// ZyXEL Communications, Inc. WAVE_FORMAT_ZYXEL_ADPCM = 0x0097, /// Philips Speech Processing WAVE_FORMAT_PHILIPS_LPCBB = 0x0098, /// Studer Professional Audio AG WAVE_FORMAT_PACKED = 0x0099, /// Malden Electronics Ltd. WAVE_FORMAT_MALDEN_PHONYTALK = 0x00A0, /// Racal recorders WAVE_FORMAT_RACAL_RECORDER_GSM = 0x00A1, /// Racal recorders WAVE_FORMAT_RACAL_RECORDER_G720_A = 0x00A2, /// Racal recorders WAVE_FORMAT_RACAL_RECORDER_G723_1 = 0x00A3, /// Racal recorders WAVE_FORMAT_RACAL_RECORDER_TETRA_ACELP = 0x00A4, /// NEC Corp. WAVE_FORMAT_NEC_AAC = 0x00B0, /// For Raw AAC, with format block AudioSpecificConfig() (as defined by MPEG-4), that follows WAVEFORMATEX WAVE_FORMAT_RAW_AAC1 = 0x00FF, /// Rhetorex Inc. WAVE_FORMAT_RHETOREX_ADPCM = 0x0100, /// BeCubed Software Inc. WAVE_FORMAT_IRAT = 0x0101, /// Vivo Software WAVE_FORMAT_VIVO_G723 = 0x0111, /// Vivo Software WAVE_FORMAT_VIVO_SIREN = 0x0112, /// Philips Speech Processing WAVE_FORMAT_PHILIPS_CELP = 0x0120, /// Philips Speech Processing WAVE_FORMAT_PHILIPS_GRUNDIG = 0x0121, /// Digital Equipment Corporation WAVE_FORMAT_DIGITAL_G723 = 0x0123, /// Sanyo Electric Co., Ltd. WAVE_FORMAT_SANYO_LD_ADPCM = 0x0125, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_ACEPLNET = 0x0130, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_ACELP4800 = 0x0131, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_ACELP8V3 = 0x0132, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_G729 = 0x0133, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_G729A = 0x0134, /// Sipro Lab Telecom Inc. WAVE_FORMAT_SIPROLAB_KELVIN = 0x0135, /// VoiceAge Corp. WAVE_FORMAT_VOICEAGE_AMR = 0x0136, /// Dictaphone Corporation WAVE_FORMAT_G726ADPCM = 0x0140, /// Dictaphone Corporation WAVE_FORMAT_DICTAPHONE_CELP68 = 0x0141, /// Dictaphone Corporation WAVE_FORMAT_DICTAPHONE_CELP54 = 0x0142, /// Qualcomm, Inc. WAVE_FORMAT_QUALCOMM_PUREVOICE = 0x0150, /// Qualcomm, Inc. WAVE_FORMAT_QUALCOMM_HALFRATE = 0x0151, /// Ring Zero Systems, Inc. WAVE_FORMAT_TUBGSM = 0x0155, /// Microsoft Corporation WAVE_FORMAT_MSAUDIO1 = 0x0160, /// Microsoft Corporation WAVE_FORMAT_WMAUDIO2 = 0x0161, /// Microsoft Corporation WAVE_FORMAT_WMAUDIO3 = 0x0162, /// Microsoft Corporation WAVE_FORMAT_WMAUDIO_LOSSLESS = 0x0163, /// Microsoft Corporation WAVE_FORMAT_WMASPDIF = 0x0164, /// Unisys Corp. WAVE_FORMAT_UNISYS_NAP_ADPCM = 0x0170, /// Unisys Corp. WAVE_FORMAT_UNISYS_NAP_ULAW = 0x0171, /// Unisys Corp. WAVE_FORMAT_UNISYS_NAP_ALAW = 0x0172, /// Unisys Corp. WAVE_FORMAT_UNISYS_NAP_16K = 0x0173, /// SyCom Technologies WAVE_FORMAT_SYCOM_ACM_SYC008 = 0x0174, /// SyCom Technologies WAVE_FORMAT_SYCOM_ACM_SYC701_G726L = 0x0175, /// SyCom Technologies WAVE_FORMAT_SYCOM_ACM_SYC701_CELP54 = 0x0176, /// SyCom Technologies WAVE_FORMAT_SYCOM_ACM_SYC701_CELP68 = 0x0177, /// Knowledge Adventure, Inc. WAVE_FORMAT_KNOWLEDGE_ADVENTURE_ADPCM = 0x0178, /// Fraunhofer IIS WAVE_FORMAT_FRAUNHOFER_IIS_MPEG2_AAC = 0x0180, /// Digital Theatre Systems, Inc. WAVE_FORMAT_DTS_DS = 0x0190, /// Creative Labs, Inc WAVE_FORMAT_CREATIVE_ADPCM = 0x0200, /// Creative Labs, Inc WAVE_FORMAT_CREATIVE_FASTSPEECH8 = 0x0202, /// Creative Labs, Inc WAVE_FORMAT_CREATIVE_FASTSPEECH10 = 0x0203, /// UHER informatic GmbH WAVE_FORMAT_UHER_ADPCM = 0x0210, /// Ulead Systems, Inc. WAVE_FORMAT_ULEAD_DV_AUDIO = 0x0215, /// Ulead Systems, Inc. WAVE_FORMAT_ULEAD_DV_AUDIO_1 = 0x0216, /// Quarterdeck Corporation WAVE_FORMAT_QUARTERDECK = 0x0220, /// I-link Worldwide WAVE_FORMAT_ILINK_VC = 0x0230, /// Aureal Semiconductor WAVE_FORMAT_RAW_SPORT = 0x0240, /// ESS Technology, Inc. WAVE_FORMAT_ESST_AC3 = 0x0241, /// WAVE_FORMAT_GENERIC_PASSTHRU = 0x0249, /// Interactive Products, Inc. WAVE_FORMAT_IPI_HSX = 0x0250, /// Interactive Products, Inc. WAVE_FORMAT_IPI_RPELP = 0x0251, /// Consistent Software WAVE_FORMAT_CS2 = 0x0260, /// Sony Corp. WAVE_FORMAT_SONY_SCX = 0x0270, /// Sony Corp. WAVE_FORMAT_SONY_SCY = 0x0271, /// Sony Corp. WAVE_FORMAT_SONY_ATRAC3 = 0x0272, /// Sony Corp. WAVE_FORMAT_SONY_SPC = 0x0273, /// Telum Inc. WAVE_FORMAT_TELUM_AUDIO = 0x0280, /// Telum Inc. WAVE_FORMAT_TELUM_IA_AUDIO = 0x0281, /// Norcom Electronics Corp. WAVE_FORMAT_NORCOM_VOICE_SYSTEMS_ADPCM = 0x0285, /// Fujitsu Corp. WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /// Micronas Semiconductors, Inc. WAVE_FORMAT_MICRONAS = 0x0350, /// Micronas Semiconductors, Inc. WAVE_FORMAT_MICRONAS_CELP833 = 0x0351, /// Brooktree Corporation WAVE_FORMAT_BTV_DIGITAL = 0x0400, /// Intel Corp. WAVE_FORMAT_INTEL_MUSIC_CODER = 0x0401, /// Ligos WAVE_FORMAT_INDEO_AUDIO = 0x0402, /// QDesign Corporation WAVE_FORMAT_QDESIGN_MUSIC = 0x0450, /// On2 Technologies WAVE_FORMAT_ON2_VP7_AUDIO = 0x0500, /// On2 Technologies WAVE_FORMAT_ON2_VP6_AUDIO = 0x0501, /// AT&T Labs, Inc. WAVE_FORMAT_VME_VMPCM = 0x0680, /// AT&T Labs, Inc. WAVE_FORMAT_TPC = 0x0681, /// Clearjump WAVE_FORMAT_LIGHTWAVE_LOSSLESS = 0x08AE, /// Ing C. Olivetti & C., S.p.A. WAVE_FORMAT_OLIGSM = 0x1000, /// Ing C. Olivetti & C., S.p.A. WAVE_FORMAT_OLIADPCM = 0x1001, /// Ing C. Olivetti & C., S.p.A. WAVE_FORMAT_OLICELP = 0x1002, /// Ing C. Olivetti & C., S.p.A. WAVE_FORMAT_OLISBC = 0x1003, /// Ing C. Olivetti & C., S.p.A. WAVE_FORMAT_OLIOPR = 0x1004, /// Lernout & Hauspie WAVE_FORMAT_LH_CODEC = 0x1100, /// Lernout & Hauspie WAVE_FORMAT_LH_CODEC_CELP = 0x1101, /// Lernout & Hauspie WAVE_FORMAT_LH_CODEC_SBC8 = 0x1102, /// Lernout & Hauspie WAVE_FORMAT_LH_CODEC_SBC12 = 0x1103, /// Lernout & Hauspie WAVE_FORMAT_LH_CODEC_SBC16 = 0x1104, /// Norris Communications, Inc. WAVE_FORMAT_NORRIS = 0x1400, /// ISIAudio WAVE_FORMAT_ISIAUDIO_2 = 0x1401, /// AT&T Labs, Inc. WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 0x1500, /// Microsoft Corporation WAVE_FORMAT_MPEG_ADTS_AAC = 0x1600, /// Microsoft Corporation WAVE_FORMAT_MPEG_RAW_AAC = 0x1601, /// Microsoft Corporation (MPEG-4 Audio Transport Streams (LOAS/LATM) WAVE_FORMAT_MPEG_LOAS = 0x1602, /// Microsoft Corporation WAVE_FORMAT_NOKIA_MPEG_ADTS_AAC = 0x1608, /// Microsoft Corporation WAVE_FORMAT_NOKIA_MPEG_RAW_AAC = 0x1609, /// Microsoft Corporation WAVE_FORMAT_VODAFONE_MPEG_ADTS_AAC = 0x160A, /// Microsoft Corporation WAVE_FORMAT_VODAFONE_MPEG_RAW_AAC = 0x160B, /// /// Microsoft Corporation (MPEG-2 AAC or MPEG-4 HE-AAC v1/v2 streams with any payload (ADTS, ADIF, LOAS/LATM, RAW). Format block /// includes MP4 AudioSpecificConfig() -- see HEAACWAVEFORMAT below /// WAVE_FORMAT_MPEG_HEAAC = 0x1610, /// Voxware Inc. WAVE_FORMAT_VOXWARE_RT24_SPEECH = 0x181C, /// Sonic Foundry WAVE_FORMAT_SONICFOUNDRY_LOSSLESS = 0x1971, /// Innings Telecom Inc. WAVE_FORMAT_INNINGS_TELECOM_ADPCM = 0x1979, /// Lucent Technologies WAVE_FORMAT_LUCENT_SX8300P = 0x1C07, /// Lucent Technologies WAVE_FORMAT_LUCENT_SX5363S = 0x1C0C, /// CUSeeMe WAVE_FORMAT_CUSEEME = 0x1F03, /// NTCSoft WAVE_FORMAT_NTCSOFT_ALF2CM_ACM = 0x1FC4, /// FAST Multimedia AG WAVE_FORMAT_DVM = 0x2000, /// WAVE_FORMAT_DTS2 = 0x2001, /// WAVE_FORMAT_MAKEAVIS = 0x3313, /// Divio, Inc. WAVE_FORMAT_DIVIO_MPEG4_AAC = 0x4143, /// Nokia WAVE_FORMAT_NOKIA_ADAPTIVE_MULTIRATE = 0x4201, /// Divio, Inc. WAVE_FORMAT_DIVIO_G726 = 0x4243, /// LEAD Technologies WAVE_FORMAT_LEAD_SPEECH = 0x434C, /// LEAD Technologies WAVE_FORMAT_LEAD_VORBIS = 0x564C, /// xiph.org WAVE_FORMAT_WAVPACK_AUDIO = 0x5756, /// Apple Lossless WAVE_FORMAT_ALAC = 0x6C61, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_1 = 0x674F, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_2 = 0x6750, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_3 = 0x6751, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_1_PLUS = 0x676F, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_2_PLUS = 0x6770, /// Ogg Vorbis WAVE_FORMAT_OGG_VORBIS_MODE_3_PLUS = 0x6771, /// 3COM Corp. WAVE_FORMAT_3COM_NBX = 0x7000, /// Opus WAVE_FORMAT_OPUS = 0x704F, /// WAVE_FORMAT_FAAD_AAC = 0x706D, /// AMR Narrowband WAVE_FORMAT_AMR_NB = 0x7361, /// AMR Wideband WAVE_FORMAT_AMR_WB = 0x7362, /// AMR Wideband Plus WAVE_FORMAT_AMR_WP = 0x7363, /// GSMA/3GPP WAVE_FORMAT_GSM_AMR_CBR = 0x7A21, /// GSMA/3GPP WAVE_FORMAT_GSM_AMR_VBR_SID = 0x7A22, /// Comverse Infosys WAVE_FORMAT_COMVERSE_INFOSYS_G723_1 = 0xA100, /// Comverse Infosys WAVE_FORMAT_COMVERSE_INFOSYS_AVQSBC = 0xA101, /// Comverse Infosys WAVE_FORMAT_COMVERSE_INFOSYS_SBC = 0xA102, /// Symbol Technologies WAVE_FORMAT_SYMBOL_G729_A = 0xA103, /// VoiceAge Corp. WAVE_FORMAT_VOICEAGE_AMR_WB = 0xA104, /// Ingenient Technologies, Inc. WAVE_FORMAT_INGENIENT_G726 = 0xA105, /// ISO/MPEG-4 WAVE_FORMAT_MPEG4_AAC = 0xA106, /// Encore Software WAVE_FORMAT_ENCORE_G726 = 0xA107, /// ZOLL Medical Corp. WAVE_FORMAT_ZOLL_ASAO = 0xA108, /// xiph.org WAVE_FORMAT_SPEEX_VOICE = 0xA109, /// Vianix LLC WAVE_FORMAT_VIANIX_MASC = 0xA10A, /// Microsoft WAVE_FORMAT_WM9_SPECTRUM_ANALYZER = 0xA10B, /// Microsoft WAVE_FORMAT_WMF_SPECTRUM_ANAYZER = 0xA10C, /// WAVE_FORMAT_GSM_610 = 0xA10D, /// WAVE_FORMAT_GSM_620 = 0xA10E, /// WAVE_FORMAT_GSM_660 = 0xA10F, /// WAVE_FORMAT_GSM_690 = 0xA110, /// WAVE_FORMAT_GSM_ADAPTIVE_MULTIRATE_WB = 0xA111, /// Polycom WAVE_FORMAT_POLYCOM_G722 = 0xA112, /// Polycom WAVE_FORMAT_POLYCOM_G728 = 0xA113, /// Polycom WAVE_FORMAT_POLYCOM_G729_A = 0xA114, /// Polycom WAVE_FORMAT_POLYCOM_SIREN = 0xA115, /// Global IP WAVE_FORMAT_GLOBAL_IP_ILBC = 0xA116, /// RadioTime WAVE_FORMAT_RADIOTIME_TIME_SHIFT_RADIO = 0xA117, /// Nice Systems WAVE_FORMAT_NICE_ACA = 0xA118, /// Nice Systems WAVE_FORMAT_NICE_ADPCM = 0xA119, /// Vocord Telecom WAVE_FORMAT_VOCORD_G721 = 0xA11A, /// Vocord Telecom WAVE_FORMAT_VOCORD_G726 = 0xA11B, /// Vocord Telecom WAVE_FORMAT_VOCORD_G722_1 = 0xA11C, /// Vocord Telecom WAVE_FORMAT_VOCORD_G728 = 0xA11D, /// Vocord Telecom WAVE_FORMAT_VOCORD_G729 = 0xA11E, /// Vocord Telecom WAVE_FORMAT_VOCORD_G729_A = 0xA11F, /// Vocord Telecom WAVE_FORMAT_VOCORD_G723_1 = 0xA120, /// Vocord Telecom WAVE_FORMAT_VOCORD_LBC = 0xA121, /// Nice Systems WAVE_FORMAT_NICE_G728 = 0xA122, /// France Telecom WAVE_FORMAT_FRACE_TELECOM_G729 = 0xA123, /// CODIAN WAVE_FORMAT_CODIAN = 0xA124, /// flac.sourceforge.net WAVE_FORMAT_FLAC = 0xF1AC, /// Microsoft WAVE_FORMAT_EXTENSIBLE = 0xFFFE, /// /// New wave format development should be based on the WAVEFORMATEXTENSIBLE structure. WAVEFORMATEXTENSIBLE allows you to avoid /// having to register a new format tag with Microsoft. However, if you must still define a new format tag, the /// WAVE_FORMAT_DEVELOPMENT format tag can be used during the development phase of a new wave format. Before shipping, you MUST /// acquire an official format tag from Microsoft. /// WAVE_FORMAT_DEVELOPMENT = 0xFFFF, } /// /// /// The WAVEFORMATEX structure defines the format of waveform-audio data. Only format information common to all /// waveform-audio data formats is included in this structure. For formats that require additional information, this structure is /// included as the first member in another structure, along with the additional information. /// /// /// Formats that support more than two channels or sample sizes of more than 16 bits can be described in a WAVEFORMATEXTENSIBLE /// structure, which includes the WAVEFORMAT structure. /// /// /// /// An example of a format that uses extra information is the Microsoft Adaptive Delta Pulse Code Modulation (MS-ADPCM) format. The /// wFormatTag for MS-ADPCM is WAVE_FORMAT_ADPCM. The cbSize member will typically be set to 32. The extra information /// stored for WAVE_FORMAT_ADPCM is coefficient pairs required for encoding and decoding the waveform-audio data. /// // https://docs.microsoft.com/en-us/windows/win32/api/mmeapi/ns-mmeapi-waveformatex typedef struct tWAVEFORMATEX { WORD wFormatTag; // WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX, // *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX; [PInvokeData("mmeapi.h", MSDNShortId = "bd0f96ec-d26a-4e6f-8802-50e8ff207f54")] [StructLayout(LayoutKind.Sequential)] public struct WAVEFORMATEX { /// /// Waveform-audio format type. Format tags are registered with Microsoft Corporation for many compression algorithms. A /// complete list of format tags can be found in the Mmreg.h header file. For one- or two-channel PCM data, this value should be /// WAVE_FORMAT_PCM. When this structure is included in a WAVEFORMATEXTENSIBLE structure, this value must be WAVE_FORMAT_EXTENSIBLE. /// public WAVE_FORMAT wFormatTag; /// Number of channels in the waveform-audio data. Monaural data uses one channel and stereo data uses two channels. public ushort nChannels; /// /// Sample rate, in samples per second (hertz). If wFormatTag is WAVE_FORMAT_PCM, then common values for /// nSamplesPerSec are 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz. For non-PCM formats, this member must be computed /// according to the manufacturer's specification of the format tag. /// public uint nSamplesPerSec; /// /// Required average data-transfer rate, in bytes per second, for the format tag. If wFormatTag is WAVE_FORMAT_PCM, /// nAvgBytesPerSec should be equal to the product of nSamplesPerSec and nBlockAlign. For non-PCM formats, /// this member must be computed according to the manufacturer's specification of the format tag. /// public uint nAvgBytesPerSec; /// /// /// Block alignment, in bytes. The block alignment is the minimum atomic unit of data for the wFormatTag format type. If /// wFormatTag is WAVE_FORMAT_PCM or WAVE_FORMAT_EXTENSIBLE, nBlockAlign must be equal to the product of /// nChannels and wBitsPerSample divided by 8 (bits per byte). For non-PCM formats, this member must be computed /// according to the manufacturer's specification of the format tag. /// /// /// Software must process a multiple of nBlockAlign bytes of data at a time. Data written to and read from a device must /// always start at the beginning of a block. For example, it is illegal to start playback of PCM data in the middle of a sample /// (that is, on a non-block-aligned boundary). /// /// public ushort nBlockAlign; /// /// Bits per sample for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM, then wBitsPerSample /// should be equal to 8 or 16. For non-PCM formats, this member must be set according to the manufacturer's specification of /// the format tag. If wFormatTag is WAVE_FORMAT_EXTENSIBLE, this value can be any integer multiple of 8 and represents /// the container size, not necessarily the sample size; for example, a 20-bit sample size is in a 24-bit container. Some /// compression schemes cannot define a value for wBitsPerSample, so this member can be 0. /// public ushort wBitsPerSample; /// /// Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure. This information can /// be used by non-PCM formats to store extra attributes for the wFormatTag. If no extra information is required by the /// wFormatTag, this member must be set to 0. For WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member /// is ignored. When this structure is included in a WAVEFORMATEXTENSIBLE structure, this value must be at least 22. /// public ushort cbSize; } /// /// The WAVEFORMATEXTENSIBLE structure defines the format of waveform-audio data for formats having more than two channels or /// higher sample resolutions than allowed by WAVEFORMATEX. It can also be used to define any format that can be defined by WAVEFORMATEX. /// /// /// /// WAVEFORMATEXTENSIBLE can describe any format that can be described by WAVEFORMATEX, but provides additional support for /// more than two channels, for greater precision in the number of bits per sample, and for new compression schemes. /// /// /// WAVEFORMATEXTENSIBLE can safely be cast to WAVEFORMATEX, because it simply configures the extra bytes specified by WAVEFORMATEX.cbSize. /// /// /// The dwChannelMask member specifies which channels are present in the multichannel stream. The least significant bit /// corresponds with the front left speaker, the next least significant bit corresponds to the front right speaker, and so on. The /// bits, in order of significance, are defined as follows. /// /// /// /// Speaker position /// Flag bit /// /// /// SPEAKER_FRONT_LEFT /// 0x1 /// /// /// SPEAKER_FRONT_RIGHT /// 0x2 /// /// /// SPEAKER_FRONT_CENTER /// 0x4 /// /// /// SPEAKER_LOW_FREQUENCY /// 0x8 /// /// /// SPEAKER_BACK_LEFT /// 0x10 /// /// /// SPEAKER_BACK_RIGHT /// 0x20 /// /// /// SPEAKER_FRONT_LEFT_OF_CENTER /// 0x40 /// /// /// SPEAKER_FRONT_RIGHT_OF_CENTER /// 0x80 /// /// /// SPEAKER_BACK_CENTER /// 0x100 /// /// /// SPEAKER_SIDE_LEFT /// 0x200 /// /// /// SPEAKER_SIDE_RIGHT /// 0x400 /// /// /// SPEAKER_TOP_CENTER /// 0x800 /// /// /// SPEAKER_TOP_FRONT_LEFT /// 0x1000 /// /// /// SPEAKER_TOP_FRONT_CENTER /// 0x2000 /// /// /// SPEAKER_TOP_FRONT_RIGHT /// 0x4000 /// /// /// SPEAKER_TOP_BACK_LEFT /// 0x8000 /// /// /// SPEAKER_TOP_BACK_CENTER /// 0x10000 /// /// /// SPEAKER_TOP_BACK_RIGHT /// 0x20000 /// /// /// /// The channels specified in dwChannelMask must be present in the prescribed order (from least significant bit up). For /// example, if only SPEAKER_FRONT_LEFT and SPEAKER_FRONT_RIGHT are specified, then the samples for the front left speaker must come /// first in the interleaved stream. The number of bits set in dwChannelMask should be the same as the number of channels /// specified in WAVEFORMATEX.nChannels. /// /// /// For backward compatibility, any wave format that can be specified by a stand-alone WAVEFORMATEX structure can also be defined by /// a WAVEFORMATEXTENSIBLE structure. Thus, every wave-format tag in mmreg.h has a corresponding SubFormat GUID. The /// following table shows some typical wave-format tags and their corresponding SubFormat GUIDs. These GUIDs are defined in Ksmedia.h. /// /// /// /// Wave-Format Tag /// SubFormat GUID /// /// /// WAVE_FORMAT_PCM /// KSDATAFORMAT_SUBTYPE_PCM /// /// /// WAVE_FORMAT_IEEE_FLOAT /// KSDATAFORMAT_SUBTYPE_IEEE_FLOAT /// /// /// WAVE_FORMAT_DRM /// KSDATAFORMAT_SUBTYPE_DRM /// /// /// WAVE_FORMAT_ALAW /// KSDATAFORMAT_SUBTYPE_ALAW /// /// /// WAVE_FORMAT_MULAW /// KSDATAFORMAT_SUBTYPE_MULAW /// /// /// WAVE_FORMAT_ADPCM /// KSDATAFORMAT_SUBTYPE_ADPCM /// /// /// /// Because WAVEFORMATEXTENSIBLE is an extended version of WAVEFORMATEX, it can describe additional formats that cannot be /// described by WAVEFORMATEX alone. Vendors are free to define their own SubFormat GUIDs to identify proprietary /// formats for which no wave-format tags exist. /// /// The following structures, for particular extended formats, are defined as WAVEFORMATEXTENSIBLE. /// /// /// Definition /// Value of SubFormat /// /// /// WAVEFORMATIEEEFLOATEX /// KSDATAFORMAT_SUBTYPE_IEEE_FLOAT /// /// /// WAVEFORMATPCMEX /// KSDATAFORMAT_SUBTYPE_PCM /// /// /// // https://docs.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatextensible typedef struct { WAVEFORMATEX Format; // union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } // WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; [PInvokeData("mmreg.h", MSDNShortId = "179d6c0c-ea80-4e9f-9e1b-43785f20cbd3")] [StructLayout(LayoutKind.Sequential)] public struct WAVEFORMATEXTENSIBLE { /// /// WAVEFORMATEX structure that specifies the basic format. The wFormatTag member must be WAVE_FORMAT_EXTENSIBLE. The /// cbSize member must be at least 22. /// public WAVEFORMATEX Format; /// A union describing the sample format. public WFEUNION Samples; /// Bitmask specifying the assignment of channels in the stream to speaker positions. public uint dwChannelMask; /// /// Subformat of the data, such as KSDATAFORMAT_SUBTYPE_PCM. The subformat information is similar to that provided by the tag in /// the WAVEFORMATEX structure's wFormatTag member. /// public Guid SubFormat; /// A union describing the sample format. [StructLayout(LayoutKind.Explicit, Pack = 2, Size = 2)] public struct WFEUNION { /// /// Number of bits of precision in the signal. Usually equal to WAVEFORMATEX.wBitsPerSample. However, /// wBitsPerSample is the container size and must be a multiple of 8, whereas wValidBitsPerSample can be any /// value not exceeding the container size. For example, if the format uses 20-bit samples, wBitsPerSample must be at /// least 24, but wValidBitsPerSample is 20. /// [FieldOffset(0)] public ushort wValidBitsPerSample; /// /// Number of samples contained in one compressed block of audio data. This value is used in buffer estimation. This value /// is used with compressed formats that have a fixed number of samples within each block. This value can be set to 0 if a /// variable number of samples is contained in each block of compressed audio data. In this case, buffer estimation and /// position information needs to be obtained in other ways. /// [FieldOffset(0)] public ushort wSamplesPerBlock; /// Reserved for internal use by operating system. Set to 0. [FieldOffset(0)] public ushort wReserved; } } } }