フィルターを記述する文字列の取得
アプリケーションでは、多くの場合、現在の形式を記述する文字列を表示する必要があります。 このタスクは、 acmFilterTagDetails 関数と acmFilterDetails 関数を使用して簡単に実行できます。 これらの関数は、適切なフィルターまたはフィルター タグを使用して呼び出す必要があります。 次の例は、これらの関数の使用方法を示しています。
#include <mmsystem.h>
#include <mmreg.h>
#include <msacm.h>
BOOL GetFilterDescription
(
LPWAVEFILTER pwfltr,
LPTSTR pszFilterTag,
DWORD cchFilterTag, // Size of pszFilterTag buffer.
LPTSTR pszFilter,
DWORD cchFilter // Size of pszFilter buffer.
)
{
MMRESULT mmr;
errno_t errno;
// Retrieve the name for the filter tag of the specified filter.
if (NULL != pszFilterTag) {
ACMFILTERTAGDETAILS aftd;
// Initialize all unused members of the ACMFILTERTAGDETAILS
// structure to zero.
memset(&aftd, 0, sizeof(aftd));
// Fill in the required members of the ACMFILTERTAGDETAILS
// structure for the ACM_FILTERTAGDETAILSF_FILTERTAG query.
aftd.cbStruct = sizeof(aftd);
aftd.dwFilterTag = pwfltr->dwFilterTag;
// Ask the ACM to find the first available driver that
// supports the specified filter tag.
mmr = acmFilterTagDetails(NULL, &aftd,
ACM_FILTERTAGDETAILSF_FILTERTAG);
if (MMSYSERR_NOERROR != mmr) {
// No ACM driver is available that supports the
// specified filter tag.
return FALSE;
}
// Copy the filter tag name into the calling application's
// buffer.
errno = wcscpy_s(pszFilterTag, cchFilterTag, aftd.szFilterTag);
if (errno != 0)
{
return FALSE;
}
}
// Retrieve the description of the attributes for the specified
// filter.
if (NULL != pszFilter) {
ACMFILTERDETAILS afd;
// Initialize all unused members of the ACMFILTERDETAILS
// structure to zero.
memset(&afd, 0, sizeof(afd));
// Fill in the required members of the ACMFILTERDETAILS
// structure for the ACM_FILTERDETAILSF_FILTER query.
afd.cbStruct = sizeof(afd);
afd.dwFilterTag = pwfltr->dwFilterTag;
afd.pwfltr = pwfltr;
afd.cbwfltr = pwfltr->cbStruct;
// Ask the ACM to find the first available driver that
// supports the specified filter.
mmr = acmFilterDetails(NULL, &afd, ACM_FILTERDETAILSF_FILTER);
if (MMSYSERR_NOERROR != mmr) {
// No ACM driver is available that supports the
// specified filter.
return FALSE;
}
// Copy the description string into the caller's buffer.
errno = wcscpy_s(pszFilter, cchFilter, afd.szFilter);
if (errno != 0)
{
return FALSE;
}
}
return TRUE;
}