VC调用ACM音频压缩编程接口的方法
式, 率, 话, 间, 低, 位。 言, 种, 质, 同, 杂, 法。 是, Windows 3.x 比,Windows 95/NT 4.0 持, ACMAudio Compression Manager 器) VCMVideo Compression Manager 器), 器(Coder-Decoder CODEC 序), ACM VCM 缩。95/NT 4.0 CODECs 准, ADPCM 等,Internet Explorer 4.0 CODECs 准, MPEG Layer 3 等。 CODECs ACM 法, VC++ 5.0

CODECs
---- ACM
API msacm.h 中, 外, ACM mmsystem.hmmreg.h 构。 ACM ACM 用, acmGetVersion ACM 息。
----
到, CODECs 息, CODECs 在, 息, 现。

---- MMRESULT mmr=acmMetrics(NULL, ACM_METRIC_COUNT_CODECS, &dwCodecs);

---- mmr = acmDriverEnum(CodecsEnumProc, 0, 0);

---- acmMetrics()
ACM 息, ACM_METRIC_COUNT_CODECS CODECs 数。 acmDriverEnum() CODECs acmDriverEnum() CodecsEnumProc() CODEC 息。Windows 数, CODECs 例。



BOOL CALLBACK CodecsEnumProc(HACMDRIVERID

hadid, DWORD dwInstance, DWORD fdwSupport) {

DWORD dwSize = 0;

if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC)

printf("
多格式转换\n");

ACMDRIVERDETAILS add;

acmdd.cbStruct = sizeof(acmdd);

MMRESULT mmr = acmDriverDetails(hadid, &acmdd, 0);

if (mmr) error_msg(mmr);

else {

printf("
全称: %s\n", acmdd.szLongName);

printf("
描述: %s\n", acmdd.szFeatures);

}

HACMDRIVER had = NULL;

mmr = acmDriverOpen(&had, hadid, 0); //
打开驱动程序

if (mmr) error_msg(mmr);

else {

mmr = acmMetrics(had, ACM_METRIC_

MAX_SIZE_FORMAT, &dwSize);

WAVEFORMATEX* pwf = (WAVEFORMATEX*) malloc(dwSize);

memset(pwf, 0, dwSize);

pwf->cbSize = LOWORD(dwSize) - sizeof(WAVEFORMATEX);

pwf->wFormatTag = WAVE_FORMAT_UNKNOWN;

ACMFORMATDETAILS fd;

memset(&fd, 0, sizeof(fd));

fd.cbStruct = sizeof(fd); fd.pwfx = pwf; fd.cbwfx = dwSize;

fd.dwFormatTag = WAVE_FORMAT_UNKNOWN;

mmr = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0);

if (mmr) error_msg(mmr);

free(pwf);

acmDriverClose(had, 0);

}

return TRUE;

}


---- CodecsEnumProc()
数。 ID 值; 据, 使 用; 能, 成, 如, ACMDRIVERDETAILS_SUPPORTF_CODEC 式。 acmDriverDetails() 息, CODEC 称、