windows-nt/Source/XPSP1/NT/multimedia/media/mixerapp/nonmixer.c
2020-09-26 16:20:57 +08:00

285 lines
7.8 KiB
C

/*****************************************************************************
*
* Component: sndvol32.exe
* File: nonmixer.c
* Purpose: non-mixer api specific implementations
*
* Copyright (c) 1985-1995 Microsoft Corporation
*
*****************************************************************************/
/*
* These are the volume control api's we have to work with.
*
* WINMMAPI MMRESULT WINAPI midiOutGetVolume(HMIDIOUT hmo, LPDWORD pdwVolume);
* WINMMAPI MMRESULT WINAPI midiOutSetVolume(HMIDIOUT hmo, DWORD dwVolume);
* WINMMAPI MMRESULT WINAPI waveOutGetVolume(UINT uId, LPDWORD pdwVolume);
* WINMMAPI MMRESULT WINAPI waveOutSetVolume(UINT uId, DWORD dwVolume);
* WINMMAPI MMRESULT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume);
* WINMMAPI MMRESULT WINAPI auxGetVolume(UINT uDeviceID, LPDWORD pdwVolume);
*
* */
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include "volumei.h"
int Nonmixer_GetNumDevs()
{
UINT cNumDevs = 0;
int iDev;
UINT uMxID;
BOOL fAdd = FALSE;
//
// Is aux support required?
//
iDev = auxGetNumDevs();
for (;iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_AUX) == MMSYSERR_NODRIVER)
{
AUXCAPS axcaps;
if (auxGetDevCaps(iDev-1, &axcaps, sizeof(AUXCAPS))
== MMSYSERR_NOERROR)
{
if (axcaps.dwSupport & AUXCAPS_VOLUME)
fAdd = TRUE;
}
}
}
if (fAdd)
cNumDevs++;
iDev = midiOutGetNumDevs();
for (; iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NODRIVER)
{
MIDIOUTCAPS mocaps;
if (midiOutGetDevCaps(iDev-1, &mocaps, sizeof(MIDIOUTCAPS))
== MMSYSERR_NOERROR)
{
if ((mocaps.dwSupport & MIDICAPS_VOLUME) ||
(mocaps.dwSupport & MIDICAPS_LRVOLUME))
fAdd = TRUE;
}
}
}
if (fAdd)
cNumDevs++;
iDev = waveOutGetNumDevs();
for (; iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_WAVEOUT) == MMSYSERR_NODRIVER)
{
WAVEOUTCAPS wocaps;
if (waveOutGetDevCaps(iDev-1, &wocaps, sizeof(WAVEOUTCAPS))
== MMSYSERR_NOERROR)
{
if ((wocaps.dwSupport & WAVECAPS_VOLUME) ||
(wocaps.dwSupport & WAVECAPS_LRVOLUME))
fAdd = TRUE;
}
}
}
if (fAdd)
cNumDevs++;
return cNumDevs;
}
void Nonmixer_SetLines(
PVOLCTRLDESC pvcd)
{
;
}
const TCHAR szAuxIn[] = TEXT ("Aux-In");
const TCHAR szCD[] = TEXT ("CDROM");
const TCHAR szAux[] = TEXT ("Aux");
const TCHAR szMidiOut[] = TEXT ("Midi-Out");
/*
* Nonmixer_CreateVolumeDescription
*
* Return an array of volumedescriptions
*
*/
PVOLCTRLDESC Nonmixer_CreateVolumeDescription (
int iDest,
DWORD * pcvcd )
{
int iDev;
PVOLCTRLDESC pvcd = NULL;
UINT uMxID;
DWORD cLines = 0;
//
// aux's
//
for (iDev = auxGetNumDevs(); iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_AUX) == MMSYSERR_NODRIVER)
{
AUXCAPS axcaps;
if (auxGetDevCaps(iDev-1, &axcaps, sizeof(AUXCAPS))
== MMSYSERR_NOERROR)
{
if (axcaps.dwSupport & AUXCAPS_VOLUME)
{
LPCTSTR pszLabel;
DWORD dwSupport = 0L;
pszLabel = szAux;
pszLabel = axcaps.wTechnology & AUXCAPS_CDAUDIO
? szCD : pszLabel;
pszLabel = axcaps.wTechnology & AUXCAPS_AUXIN
? szAuxIn : pszLabel;
dwSupport |= axcaps.dwSupport & AUXCAPS_LRVOLUME ? VCD_SUPPORTF_STEREO : VCD_SUPPORTF_MONO;
pvcd = PVCD_AddLine(pvcd
, iDev
, VCD_TYPE_AUX
, axcaps.szPname
, (LPTSTR)pszLabel
, dwSupport
, &cLines );
}
}
}
}
for (iDev = midiOutGetNumDevs(); iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NODRIVER)
{
MIDIOUTCAPS mocaps;
if (midiOutGetDevCaps(iDev-1, &mocaps, sizeof(MIDIOUTCAPS))
== MMSYSERR_NOERROR)
{
if (mocaps.dwSupport & MIDICAPS_VOLUME)
{
DWORD dwSupport = 0L;
dwSupport |= mocaps.dwSupport & MIDICAPS_LRVOLUME ? VCD_SUPPORTF_STEREO : VCD_SUPPORTF_MONO;
pvcd = PVCD_AddLine(pvcd
, iDev
, VCD_TYPE_MIDIOUT
, mocaps.szPname
, (LPTSTR)szMidiOut
, dwSupport
, &cLines );
}
}
}
}
iDev = waveOutGetNumDevs();
for (; iDev > 0; iDev --)
{
if (mixerGetID((HMIXEROBJ)IntToPtr(iDev-1)
, &uMxID
, MIXER_OBJECTF_WAVEOUT) == MMSYSERR_NODRIVER)
{
WAVEOUTCAPS wocaps;
if (waveOutGetDevCaps(iDev-1, &wocaps, sizeof(WAVEOUTCAPS))
== MMSYSERR_NOERROR)
{
if (wocaps.dwSupport & WAVECAPS_VOLUME)
{
const TCHAR szWaveOut[] = TEXT ("Wave-Out");
DWORD dwSupport = 0L;
dwSupport |= wocaps.dwSupport & WAVECAPS_LRVOLUME ? VCD_SUPPORTF_STEREO : VCD_SUPPORTF_MONO;
pvcd = PVCD_AddLine(pvcd
, iDev
, VCD_TYPE_WAVEOUT
, wocaps.szPname
, (LPTSTR)szWaveOut
, dwSupport
, &cLines );
}
}
}
}
//
// Setup indicies, etc...
//
Nonmixer_SetLines(pvcd);
*pcvcd = cLines;
return pvcd;
}
void Nonmixer_PollingUpdate(
PMIXUIDIALOG pmxud)
{
}
BOOL Nonmixer_Init(
PMIXUIDIALOG pmxud)
{
return TRUE;
}
void Nonmixer_GetControl(
PMIXUIDIALOG pmxud,
HWND hctl,
int imxul,
int ictl)
{
;
}
void Nonmixer_SetControl(
PMIXUIDIALOG pmxud,
HWND hctl,
int imxul,
int ictl)
{
;
}
void Nonmixer_Shutdown(
PMIXUIDIALOG pmxud)
{
;
}
const TCHAR szNonMixer[] = TEXT ("Wave,MIDI,Aux");
BOOL Nonmixer_GetDeviceName(
PMIXUIDIALOG pmxud)
{
lstrcpy(pmxud->szMixer, szNonMixer);
return TRUE;
}