整个过程是打开一个声音文件,压缩(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中得到,打开流对象时居然返回不可转换?????