هذه المقالة متوفرة أيضا باللغة العربية، اقرأها هنا.
Interested in MCI multimedia processing? First check this article out if you didn’t:
After we received your feedbacks and comments about th.e article, we decided to add a small appendix to the end of the article about setting information (volume, channel, sampling rate, etc.) to a MCI device (a Waveform device of course.)
Like anything else in MCI, you can set device information using a MCI command (string/numeric), and this time it’s the MCI_SET command.
This command is used to set information about a specific device. This command requires an input parameter of the MCI_SET_PARMS structure. However, that input parameter might have extended members for specific devices. Because we are concentrating of Waveform devices, so we are going to use the MCI_WAVE_SET_PARMS structure that contains the extended members for our device and is defined as following:
typedef struct { DWORD_PTR dwCallback; DWORD dwTimeFormat; DWORD dwAudio; UINT wInput; UINT wOutput; WORD wFormatTag; WORD wReserved2; WORD nChannels; WORD wReserved3; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wReserved4; WORD wBitsPerSample; WORD wReserved5; } MCI_WAVE_SET_PARMS;
This structure contains all and every little piece of information that can be set to a device. I expect that you read the main article and you are already familiar with members like dwCallback (other members are self-explanatory) that we have talked about many times, and you are fine too with function calls and setting up input parameters, so I won’t get into the discussion of the structure or how you are going to use that command. However, if you need more help setting up the input parameters for the structure, you should take a brief look at the MCI_WAVE_SET_PARMS Structure documentation in the MSDN.
As you know, the MCI_WAVE_SET_PARMS unmanaged structure can be marshaled in C# as following:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct MCI_WAVE_SET_PARMS { public IntPtr dwCallback; public uint dwTimeFormat; public uint dwAudio; public uint wInput; public uint wOutput; public ushort wFormatTag; public ushort wReserved2; public ushort nChannels; public ushort wReserved3; public uint nSamplesPerSec; public uint nAvgBytesPerSec; public ushort nBlockAlign; public ushort wReserved4; public ushort wBitsPerSample; public ushort wReserved5; }
Congratulations! You did set the device information! So how to get them back?
This can be done through the MCI_STATUS (discussed earlier) by setting up the MCI_STATUS_ITEM flag and setting the query item to the required information you need to query about (like MCI_DGV_STATUS_VOLUME to query about volume.)
More about the MCI_STATUS command can be found in the MSDN documentation.