整个过程是打开一个声音文件,压缩(TrueSpeech),写入另一个文件。我利用Driver的简称(如我使用DSP Group TrueSpeech(TM) Software CODEC,利用szShortName 等于 TrueSpeech(TM))找到Driver,再利用DriverId找到该Driver支持的两种Format。但奇怪的是我使用acmStreamOpen函数的时候居然返回错误。
acmDriverEnum ( DriverEnumCallback, 0, ACM_DRIVERENUMF_NOLOCAL); BOOL CALLBACK DriverEnumCallback (HACMDRIVERID hadid, DWORD, DWORD fdwSupport)
{
MMRESULT mmr;
ACMDRIVERDETAILS acmdd;
acmdd.cbStruct = sizeof(acmdd);
mmr = acmDriverDetails(hadid, &acmdd, 0);
if (mmr){
MessageBox( hwnd, "get driver details failed", "ERR", MB_OK );
return false;
} //enumerate all drivers
//MessageBox( NULL, acmdd.szShortName,"", 0 );
//get driverid by compare driver short name
if( !( strcmp(acmdd.szShortName, drivershortname )) )
{
acd.hadid=hadid;
}
return true;
}//得到Driver id. BOOL CALLBACK FormatEnumCallback
(
HACMDRIVERID hadid,
LPACMFORMATDETAILS pafd,
DWORD dwInstance,
DWORD fdwSupport
)
{
if( pafd->pwfx->wFormatTag == 1 && pafd->dwFormatIndex == 1)
{
acd.pwfxSrc = *(pafd->pwfx);
}
if( pafd->pwfx->wFormatTag == 1 && pafd->dwFormatIndex == 0)
{
acd.pwfxDst = *(pafd->pwfx);
}
return true;
}// 得到 源格式 和目标格式 mmr = acmDriverOpen( &pAacd->had, pAacd->hadid, 0 );
if( mmr )
{
MessageBox( NULL, "Driver open failed", "error", MB_OK );
return false;
}
//open convert stream
mmr = acmStreamOpen( &(pAacd->has), NULL, &(pAacd->pwfxSrc), &(pAacd->pwfxDst), NULL, NULL, 0, ACM_STREAMOPENF_NONREALTIME );
//打开流对象。
这个时候mmr返回 The requested operation can't be performed;
真的很奇怪,两种格式我都是从该Driver中得到,打开流对象时居然返回不可转换?????
acmDriverEnum ( DriverEnumCallback, 0, ACM_DRIVERENUMF_NOLOCAL); BOOL CALLBACK DriverEnumCallback (HACMDRIVERID hadid, DWORD, DWORD fdwSupport)
{
MMRESULT mmr;
ACMDRIVERDETAILS acmdd;
acmdd.cbStruct = sizeof(acmdd);
mmr = acmDriverDetails(hadid, &acmdd, 0);
if (mmr){
MessageBox( hwnd, "get driver details failed", "ERR", MB_OK );
return false;
} //enumerate all drivers
//MessageBox( NULL, acmdd.szShortName,"", 0 );
//get driverid by compare driver short name
if( !( strcmp(acmdd.szShortName, drivershortname )) )
{
acd.hadid=hadid;
}
return true;
}//得到Driver id. BOOL CALLBACK FormatEnumCallback
(
HACMDRIVERID hadid,
LPACMFORMATDETAILS pafd,
DWORD dwInstance,
DWORD fdwSupport
)
{
if( pafd->pwfx->wFormatTag == 1 && pafd->dwFormatIndex == 1)
{
acd.pwfxSrc = *(pafd->pwfx);
}
if( pafd->pwfx->wFormatTag == 1 && pafd->dwFormatIndex == 0)
{
acd.pwfxDst = *(pafd->pwfx);
}
return true;
}// 得到 源格式 和目标格式 mmr = acmDriverOpen( &pAacd->had, pAacd->hadid, 0 );
if( mmr )
{
MessageBox( NULL, "Driver open failed", "error", MB_OK );
return false;
}
//open convert stream
mmr = acmStreamOpen( &(pAacd->has), NULL, &(pAacd->pwfxSrc), &(pAacd->pwfxDst), NULL, NULL, 0, ACM_STREAMOPENF_NONREALTIME );
//打开流对象。
这个时候mmr返回 The requested operation can't be performed;
真的很奇怪,两种格式我都是从该Driver中得到,打开流对象时居然返回不可转换?????
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货