Skip to main content
Known Participant
April 1, 2016
Question

After Effects error: Time argument is out of range.

  • April 1, 2016
  • 1 reply
  • 3128 views

hi,all:

      i've written a keyframer plugin.the AE often prompt a dialog(which shows "After Effects error: Time argument is out of range.") when the plugin deletes some keyframes and inserts lots of keyframe.i checked out the time argument and found the time is valid.on what condition the AE will promt the dialog?

     thanks advance

This topic has been closed for replies.

1 reply

Known Participant
April 1, 2016

the dialog wo'nt show if i just insert keyframes(do'nt delete keyframes before insert lots of keyframes).who can help me?

Community Expert
April 1, 2016

try deleting the keyframes in reverse order.

not only is it much faster, it could also prevent an issue where the key

index is out of range because the list shortens as you delete. meaning, key

10 will become key 7 after deleting 3 keys.

i know it's not directly related to the message that you're seeing, but

perhaps it's messes something up that later manifests as what problem

you're getting.

Known Participant
April 1, 2016

static A_Err GenerateVibration(A_char * pEffectName,A_long startFrameIndex,A_long EndFrameIndex)

{

  A_Err err = A_Err_NONE;

  if(-1 == startFrameIndex || -1 == EndFrameIndex || startFrameIndex == EndFrameIndex)

  {

  return A_Err_PARAMETER;

  }

  AEGP_SuiteHandler suites(sP);

  AEGP_ErrReportState errorState;

  ERR(suites.UtilitySuite5()->AEGP_StartQuietErrors(&errorState));

  AEGP_LayerH layerH = NULL;

  A_long num_effectsL =0;

  A_long num_paramsL = 0;

  A_char type_nameAC[AEGP_MAX_ITEM_NAME_SIZE] = {'\0'};

  A_char effect_nameAC[AEGP_MAX_ITEM_NAME_SIZE] = {'\0'};

  AEGP_EffectRefH effectH = NULL;

  AEGP_StreamRefH streamSrcBackLeftH = NULL;

  AEGP_StreamRefH streamSrcBackRightH = NULL;

  AEGP_StreamRefH streamSrcFrontCenterH = NULL;

  AEGP_StreamRefH streamAmpH = NULL;

  AEGP_StreamRefH streamFreqH = NULL;

  AEGP_StreamRefH streamVibrateModeH = NULL;

  AEGP_StreamRefH streamDesBackLeftH = NULL;

  AEGP_StreamRefH streamDesBackRightH = NULL;

  AEGP_StreamRefH streamDesFrontCenterH = NULL;

  AEGP_ProjectH proj;

  ERR(suites.ProjSuite6()->AEGP_GetProjectByIndex(0,&proj));

  AEGP_ItemH itemH;

  AEGP_ItemType itemType;

  ERR(suites.ItemSuite8()->AEGP_GetFirstProjItem(proj,&itemH));

  while(err == PF_Err_NONE && itemH != NULL)

  {

  ERR(suites.ItemSuite6()->AEGP_GetItemName(itemH,type_nameAC));

  ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH,&itemType));

  if(itemType == AEGP_ItemType_COMP)

  {

  //composition

  std::string strCompName = "QSC";

  std::string strTemp = type_nameAC;

  if(strCompName.compare(strTemp.c_str()) != 0)

  continue;

  A_long numLayers;

  AEGP_CompH compH;

  AEGP_LayerH layerH;

  A_Boolean bFindQscEffect = FALSE;

  suites.CompSuite8()->AEGP_GetCompFromItem(itemH,&compH);

  suites.LayerSuite7()->AEGP_GetCompNumLayers(compH,&numLayers);

  for(A_long index = 0;index < numLayers;index++)

  {

  suites.LayerSuite7()->AEGP_GetCompLayerByIndex(compH,index,&layerH);

  if(layerH != NULL)

  {

  ERR(suites.EffectSuite2()->AEGP_GetLayerNumEffects(layerH, &num_effectsL));//得到效果插件个数

  for (A_long jL = 0; !err && jL < num_effectsL; jL++)

  {

  ERR(suites.EffectSuite2()->AEGP_GetLayerEffectByIndex(S_my_id, layerH, jL, &effectH));

  if (!err && effectH)

  {

  AEGP_InstalledEffectKey key;

  ERR(suites.EffectSuite2()->AEGP_GetInstalledKeyFromLayerEffect(effectH, &key));

  ERR(suites.EffectSuite2()->AEGP_GetEffectName(key, effect_nameAC));

  std::string strEffectName = pEffectName;

  std::string strTemp = effect_nameAC;

  if(strEffectName.compare(strTemp.c_str()) != 0)

  {

  ERR(suites.EffectSuite2()->AEGP_DisposeEffect(effectH));

  continue;

  }

  bFindQscEffect = TRUE;

  ERR(suites.StreamSuite2()->AEGP_GetEffectNumParamStreams(effectH, &num_paramsL));

  if (num_paramsL != FEATHER_Count)

  {

  ERR(suites.UtilitySuite5()->AEGP_EndQuietErrors(TRUE,&errorState));

  return A_Err_NONE;

  }else

  {

  A_Err err2 = A_Err_NONE;

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_ID1, &streamSrcBackLeftH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_ID2, &streamSrcFrontCenterH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_ID3, &streamSrcBackRightH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_Amp, &streamAmpH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_Freq, &streamFreqH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_DISK_VibrateMode, &streamVibrateModeH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_BackLeft, &streamDesBackLeftH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_FrontCenter, &streamDesFrontCenterH));

  ERR(suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(S_my_id, effectH,FEATHER_BackRight, &streamDesBackRightH));

  if(streamSrcBackLeftH != NULL && streamSrcFrontCenterH != NULL && streamSrcBackRightH != NULL && streamAmpH != NULL &&

  streamFreqH != NULL && streamVibrateModeH != NULL && streamDesBackLeftH != NULL && streamDesBackRightH != NULL && streamDesFrontCenterH != NULL)

  {

  A_long freqKFs = 0;

  ERR(suites.KeyframeSuite4()->AEGP_GetStreamNumKFs(streamFreqH,&freqKFs));

  if(startFrameIndex > freqKFs)

  {

  err = A_Err_PARAMETER;

  }

  else

  {

  if(startFrameIndex < 0)

  {

  startFrameIndex = 0;

  }

  if(EndFrameIndex == -1 || EndFrameIndex > freqKFs)

  {

  EndFrameIndex = freqKFs;

  }

  AEGP_LTimeMode timeMode = AEGP_LTimeMode_LayerTime;

  A_Time timeKf;

  A_Time timeKfNext;

  // A_Time timeKfFirst;

  // A_Time timeKfLast;

  A_long preInterpIndexBackleft = -1;

  A_long preInterpIndexBackRight = -1;

  A_long preInterpIndexFrontCenter = -1;

  A_long indexPLBackLeft = 0;

  A_long indexPLBackRight = 0;

  A_long indexPLFrontCenter = 0;

  AEGP_StreamType stream_type;

  AEGP_StreamValue2 valueFreq;

  AEGP_KeyframeEase in_easeP0BackLeft;

  AEGP_KeyframeEase out_easeP0BackLeft;

  AEGP_KeyframeEase in_easeP0BackRight;

  AEGP_KeyframeEase out_easeP0BackRight;

  AEGP_KeyframeEase in_easeP0FrontCenter;

  AEGP_KeyframeEase out_easeP0FrontCenter;

  AEGP_KeyframeInterpolationType inPNone = AEGP_KeyInterp_NONE;

  AEGP_KeyframeInterpolationType inPLine = AEGP_KeyInterp_LINEAR;

  AEGP_KeyframeInterpolationType inPBezier = AEGP_KeyInterp_BEZIER;

  AEGP_KeyframeInterpolationType inPTemp = AEGP_KeyInterp_BEZIER;

  AEGP_KeyframeInterpolationType outPTemp = AEGP_KeyInterp_BEZIER;

  AEGP_StreamValue2 valueAmpBackLeft;

  AEGP_StreamValue2 valueAmpBackRight;

  AEGP_StreamValue2 valueAmpFrontCenter;

  AEGP_StreamValue2 valueDesBackLeft;

  AEGP_StreamValue2 valueDesBackRight;

  AEGP_StreamValue2 valueDesFrontCenter;

  A_Boolean pre_expressionB = TRUE;

  A_FpLong dpBackLeft = 0.0;

  A_FpLong dpBackRight = 0.0;

  A_FpLong dpFrontCenter = 0.0;

  A_long vibrateMode = 0;

  A_FpLong InsertKeyFrameMinGap = 0.0;

  bool positive = true;

  // ERR(suites.KeyframeSuite4()->AEGP_GetKeyframeTime(streamFreqH,startFrameIndex,timeMode,&timeKfFirst));

  // ERR(suites.KeyframeSuite4()->AEGP_GetKeyframeTime(streamFreqH,EndFrameIndex,timeMode,&timeKfLast));

  for(A_long index = startFrameIndex;index < EndFrameIndex;index++)

  {

  ERR(suites.KeyframeSuite4()->AEGP_GetKeyframeTime(streamFreqH,index,timeMode,&timeKf));

  ERR(suites.KeyframeSuite4()->AEGP_GetKeyframeTime(streamFreqH,index+1,timeMode,&timeKfNext));

  if( (timeKf.scale != timeKfNext.scale) && (timeKf.scale != 0) )

  {

  A_FpLong temp = (A_FpLong)timeKf.value/timeKf.scale;

  timeKf.scale = timeKfNext.scale;

  timeKf.value = temp*timeKfNext.scale;

  }

  AEGP_StreamValue val;

  AEGP_StreamValue *sample_valP = &val;

  AEGP_StreamType stream_typeVibMode;

  ERR(suites.StreamSuite2()->AEGP_GetStreamType(streamVibrateModeH, &stream_typeVibMode));

  if (AEGP_StreamType_NO_DATA != stream_typeVibMode)

  {

  ERR(suites.StreamSuite2()->AEGP_GetNewStreamValue(S_my_id,

  streamVibrateModeH,

  AEGP_LTimeMode_LayerTime,

  &timeKf,

  pre_expressionB,

  sample_valP));

  if(AEGP_StreamType_OneD == stream_typeVibMode)

  {

  vibrateMode = sample_valP->val.one_d;

  if(vibrateMode > ViarateMode_RotateAntiClockWise || vibrateMode < ViarateMode_UpDown)

  {

  vibrateMode = ViarateMode_UpDown;

  }

  }

  ERR(suites.StreamSuite2()->AEGP_DisposeStreamValue(sample_valP));

  }

  A_long tempIndex = 0;

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesBackLeftH,timeMode,&timeKf,&tempIndex));

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesBackRightH,timeMode,&timeKf,&tempIndex));

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesFrontCenterH,timeMode,&timeKf,&tempIndex));

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesBackLeftH,timeMode,&timeKfNext,&tempIndex));

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesBackRightH,timeMode,&timeKfNext,&tempIndex));

  ERR(suites.KeyframeSuite4()->AEGP_InsertKeyframe(streamDesFrontCenterH,timeMode,&timeKfNext,&tempIndex));

  std::vector<InsertedKeyframeInfo> vecBackLeftKeyframes;

  std::vector<InsertedKeyframeInfo> vecBackRightKeyframes;

  std::vector<InsertedKeyframeInfo> vecFrontCenterKeyframes;

  AEGP_AddKeyframesInfoH addBackLeftKeyframesInfoH = NULL;

  AEGP_AddKeyframesInfoH addBackRightKeyframesInfoH = NULL;

  AEGP_AddKeyframesInfoH addFrontCenterKeyframesInfoH = NULL;

  suites.KeyframeSuite4()->AEGP_StartAddKeyframes(streamDesBackLeftH, &addBackLeftKeyframesInfoH);

  suites.KeyframeSuite4()->AEGP_StartAddKeyframes(streamDesBackRightH, &addBackRightKeyframesInfoH);

  suites.KeyframeSuite4()->AEGP_StartAddKeyframes(streamDesFrontCenterH, &addFrontCenterKeyframesInfoH);

  ERR(suites.KeyframeSuite4()->AEGP_GetNewKeyframeValue(S_my_id,streamFreqH,index,&valueFreq));

  ERR(suites.StreamSuite2()->AEGP_GetStreamType(streamFreqH, &stream_type));

  InsertKeyFrameMinGap = (A_FpLong)timeKf.scale/100;

  timeKf.value += InsertKeyFrameMinGap;

  timeKfNext.value -= InsertKeyFrameMinGap;

  A_FpLong timeSeconds = (A_FpLong)timeKfNext.value/timeKfNext.scale - (A_FpLong)timeKf.value/timeKf.scale;

  A_long needKeyFramePerSecond = 0;

  A_long needKeyFrameTotal = 0;

  A_FpLong timeSampGap = 0.0;

  A_FpLong timeDPBackLeftOffset = 0.0;

  A_FpLong timeDPBackRightOffset = 0.0;

  A_FpLong timeDPFrontCenterOffset = 0.0;

  A_Time timeInsertKFBackLeft;

  A_Time timeInsertKFBackLeftPre;

  A_Time timeInsertKFBackRight;

  A_Time timeInsertKFBackRightPre;

  A_Time timeInsertKFFrontCenter;

  timeInsertKFBackLeft = timeKf;

  timeInsertKFBackLeftPre = timeKf;

  timeInsertKFBackRight = timeKf;

  timeInsertKFBackRightPre = timeKf;

  timeInsertKFFrontCenter = timeKf;

  needKeyFramePerSecond = (A_FpLong)valueFreq.val.one_d*2;

  needKeyFrameTotal = needKeyFramePerSecond*timeSeconds;

  timeSampGap = (A_FpLong)1/(A_FpLong)needKeyFramePerSecond*timeKf.scale;

  dpBackLeft = dpModeArray[vibrateMode].dpBL;

  dpBackRight = dpModeArray[vibrateMode].dpBR;

  dpFrontCenter = dpModeArray[vibrateMode].dpFC;

  timeDPBackLeftOffset = ((A_FpLong)1/needKeyFramePerSecond*timeKf.scale)*dpBackLeft*2;

  timeDPBackRightOffset = ((A_FpLong)1/needKeyFramePerSecond*timeKf.scale)*dpBackRight*2;

  timeDPFrontCenterOffset = ((A_FpLong)1/needKeyFramePerSecond*timeKf.scale)*dpFrontCenter*2;

  if(valueFreq.val.one_d < 1.0)

  {

  ERR(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueFreq));

  continue;

  }

  else

  {

  if(AEGP_StreamType_OneD == stream_type)

  {

  A_FpLong nextCheckVibModeTime = 0.0;

  while( (timeInsertKFBackLeft.value <= timeKfNext.value) && (timeInsertKFBackRight.value <= timeKfNext.value) &&

  (timeInsertKFFrontCenter.value <= timeKfNext.value) )

  {

  A_long maxTime = 0;

  if(timeInsertKFBackLeft.value > timeInsertKFBackRight.value)

  {

  maxTime = timeInsertKFBackLeft.value;

  }

  else

  {

  maxTime = timeInsertKFBackRight.value;

  }

  if(maxTime < timeInsertKFFrontCenter.value)

  {

  maxTime = timeInsertKFFrontCenter.value;

  }

  maxTime += timeSampGap;

  if(maxTime > timeKfNext.value)

  break;

  outPTemp = inPTemp = inPBezier;

  if(timeInsertKFBackLeft.value == timeKf.value)

  {

  timeInsertKFBackLeft.value += timeDPBackLeftOffset;

  timeInsertKFBackRight.value += timeDPBackRightOffset;

  timeInsertKFFrontCenter.value += timeDPFrontCenterOffset;

  }

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamSrcBackLeftH,timeMode,&timeInsertKFBackLeft,pre_expressionB,&valueDesBackLeft));

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamSrcBackRightH,timeMode,&timeInsertKFBackRight,pre_expressionB,&valueDesBackRight));

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamSrcFrontCenterH,timeMode,&timeInsertKFFrontCenter,pre_expressionB,&valueDesFrontCenter));

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamAmpH,timeMode,&timeInsertKFBackLeft,pre_expressionB,&valueAmpBackLeft));

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamAmpH,timeMode,&timeInsertKFBackRight,pre_expressionB,&valueAmpBackRight));

  ERR(suites.StreamSuite3()->AEGP_GetNewStreamValue(S_my_id,streamAmpH,timeMode,&timeInsertKFFrontCenter,pre_expressionB,&valueAmpFrontCenter));

  if(!positive)

  {

  valueDesBackLeft.val.one_d = valueDesBackLeft.val.one_d + valueAmpBackLeft.val.one_d;

  valueDesBackRight.val.one_d = valueDesBackRight.val.one_d + valueAmpBackRight.val.one_d;

  if(vibrateMode == ViarateMode_RotateAntiClockWise || vibrateMode == ViarateMode_RotateClockWise)

  valueDesFrontCenter.val.one_d = valueDesFrontCenter.val.one_d + valueAmpFrontCenter.val.one_d/2;

  else

  valueDesFrontCenter.val.one_d = valueDesFrontCenter.val.one_d + valueAmpFrontCenter.val.one_d;

  }

  else

  {

  valueDesBackLeft.val.one_d = valueDesBackLeft.val.one_d - valueAmpBackLeft.val.one_d;

  valueDesBackRight.val.one_d = valueDesBackRight.val.one_d - valueAmpBackRight.val.one_d;

  if(vibrateMode == ViarateMode_RotateAntiClockWise || vibrateMode == ViarateMode_RotateClockWise)

  valueDesFrontCenter.val.one_d = valueDesFrontCenter.val.one_d - valueAmpFrontCenter.val.one_d/2;

  else

  valueDesFrontCenter.val.one_d = valueDesFrontCenter.val.one_d - valueAmpFrontCenter.val.one_d;

  }

  positive = !positive;

  if(dpBackLeft >= 0)

  {

  if((timeInsertKFBackLeft.value - timeKf.value) > InsertKeyFrameMinGap)

  {

  ERR(suites.KeyframeSuite4()->AEGP_AddKeyframes(addBackLeftKeyframesInfoH,timeMode,&timeInsertKFBackLeft,&indexPLBackLeft));

  ERR(suites.KeyframeSuite4()->AEGP_SetAddKeyframe(addBackLeftKeyframesInfoH, indexPLBackLeft, &valueDesBackLeft));

  InsertedKeyframeInfo info;

  info.index = indexPLBackLeft;

  info.value = valueDesBackLeft.val.one_d;

  vecBackLeftKeyframes.push_back(info);

  timeInsertKFBackLeftPre = timeInsertKFBackLeft;

  preInterpIndexBackleft = indexPLBackLeft;

  }

  timeInsertKFBackLeft.value += timeSampGap;

  }

  if(dpBackRight >= 0)

  {

  if((timeInsertKFBackRight.value - timeKf.value) > InsertKeyFrameMinGap)

  {

  ERR(suites.KeyframeSuite4()->AEGP_AddKeyframes(addBackRightKeyframesInfoH,timeMode,&timeInsertKFBackRight,&indexPLBackRight));

  ERR(suites.KeyframeSuite4()->AEGP_SetAddKeyframe(addBackRightKeyframesInfoH, indexPLBackRight, &valueDesBackRight));

  InsertedKeyframeInfo info;

  info.index = indexPLBackRight;

  info.value = valueDesBackRight.val.one_d;

  vecBackRightKeyframes.push_back(info);

  timeInsertKFBackRightPre = timeInsertKFBackRight;

  preInterpIndexBackRight = indexPLBackRight;

  }

  timeInsertKFBackRight.value += timeSampGap;

  }

  if(dpFrontCenter >= 0)

  {

  if((timeInsertKFFrontCenter.value - timeKf.value) > InsertKeyFrameMinGap)

  {

  ERR(suites.KeyframeSuite4()->AEGP_AddKeyframes(addFrontCenterKeyframesInfoH,timeMode,&timeInsertKFFrontCenter,&indexPLFrontCenter));

  ERR(suites.KeyframeSuite4()->AEGP_SetAddKeyframe(addFrontCenterKeyframesInfoH, indexPLFrontCenter, &valueDesFrontCenter));

  InsertedKeyframeInfo info;

  info.index = indexPLFrontCenter;

  info.value = valueDesFrontCenter.val.one_d;

  vecFrontCenterKeyframes.push_back(info);

  preInterpIndexFrontCenter = indexPLFrontCenter;

  }

  timeInsertKFFrontCenter.value += timeSampGap;

  }

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueDesBackLeft));

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueDesBackRight));

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueDesFrontCenter));

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueAmpBackLeft));

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueAmpBackRight));

  ERR2(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueAmpFrontCenter));

  }

  }

  ERR(suites.StreamSuite4()->AEGP_DisposeStreamValue(&valueFreq));

  }

  suites.KeyframeSuite4()->AEGP_EndAddKeyframes(TRUE, addBackLeftKeyframesInfoH);

  suites.KeyframeSuite4()->AEGP_EndAddKeyframes(TRUE, addBackRightKeyframesInfoH);

  suites.KeyframeSuite4()->AEGP_EndAddKeyframes(TRUE, addFrontCenterKeyframesInfoH);

  for(std::vector<InsertedKeyframeInfo>::iterator it = vecBackLeftKeyframes.begin();it != vecBackLeftKeyframes.end();it++)

  {

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackLeftH,it->index,AEGP_KeyframeFlag_TEMPORAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackLeftH,it->index,AEGP_KeyframeFlag_SPATIAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackLeftH,it->index,AEGP_KeyframeFlag_TEMPORAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackLeftH,it->index,AEGP_KeyframeFlag_SPATIAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackLeftH,it->index,AEGP_KeyframeFlag_ROVING,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeInterpolation(streamDesBackLeftH,it->index,inPTemp,outPTemp));

  in_easeP0BackLeft.speedF = 0.0;

  in_easeP0BackLeft.influenceF = VibrateInfluenceF;

  out_easeP0BackLeft.speedF = 0.0;

  out_easeP0BackLeft.influenceF = VibrateInfluenceF;

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeTemporalEase(streamDesBackLeftH,it->index,0,&in_easeP0BackLeft,&out_easeP0BackLeft));

  }

  vecBackLeftKeyframes.clear();

  for(std::vector<InsertedKeyframeInfo>::iterator it = vecBackRightKeyframes.begin();it != vecBackRightKeyframes.end();it++)

  {

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackRightH,it->index,AEGP_KeyframeFlag_TEMPORAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackRightH,it->index,AEGP_KeyframeFlag_SPATIAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackRightH,it->index,AEGP_KeyframeFlag_TEMPORAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackRightH,it->index,AEGP_KeyframeFlag_SPATIAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesBackRightH,it->index,AEGP_KeyframeFlag_ROVING,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeInterpolation(streamDesBackRightH,it->index,inPTemp,outPTemp));

  in_easeP0BackRight.speedF = 0.0;

  in_easeP0BackRight.influenceF = VibrateInfluenceF;

  out_easeP0BackRight.speedF = 0.0;

  out_easeP0BackRight.influenceF = VibrateInfluenceF;

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeTemporalEase(streamDesBackRightH,it->index,0,&in_easeP0BackRight,&out_easeP0BackRight));

  }

  vecBackRightKeyframes.clear();

  for(std::vector<InsertedKeyframeInfo>::iterator it = vecFrontCenterKeyframes.begin();it != vecFrontCenterKeyframes.end();it++)

  {

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesFrontCenterH,it->index,AEGP_KeyframeFlag_TEMPORAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesFrontCenterH,it->index,AEGP_KeyframeFlag_SPATIAL_AUTOBEZIER,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesFrontCenterH,it->index,AEGP_KeyframeFlag_TEMPORAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesFrontCenterH,it->index,AEGP_KeyframeFlag_SPATIAL_CONTINUOUS,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeFlag(streamDesFrontCenterH,it->index,AEGP_KeyframeFlag_ROVING,FALSE));

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeInterpolation(streamDesFrontCenterH,it->index,inPTemp,outPTemp));

  in_easeP0FrontCenter.speedF = 0.0;

  in_easeP0FrontCenter.influenceF = VibrateInfluenceF;

  out_easeP0FrontCenter.speedF = 0.0;

  out_easeP0FrontCenter.influenceF = VibrateInfluenceF;

  ERR(suites.KeyframeSuite4()->AEGP_SetKeyframeTemporalEase(streamDesFrontCenterH,it->index,0,&in_easeP0FrontCenter,&out_easeP0FrontCenter));

  }

  vecFrontCenterKeyframes.clear();

  }

  }

  }

  else

  {

  err = A_Err_PARAMETER;

  }

  if(streamSrcBackLeftH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamSrcBackLeftH));

  if(streamSrcFrontCenterH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamSrcFrontCenterH));

  if(streamSrcBackRightH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamSrcBackRightH));

  if(streamAmpH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamAmpH));

  if(streamFreqH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamFreqH));

  if(streamVibrateModeH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamVibrateModeH));

  if(streamDesBackLeftH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamDesBackLeftH));

  if(streamDesFrontCenterH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamDesFrontCenterH));

  if(streamDesBackRightH != NULL)

  ERR2(suites.StreamSuite2()->AEGP_DisposeStream(streamDesBackRightH));

  }

  ERR(suites.EffectSuite2()->AEGP_DisposeEffect(effectH));

  break;

  }

  }

  }

  if(bFindQscEffect)

  break;

  }

  break;

  }

  err = suites.ItemSuite8()->AEGP_GetNextProjItem(proj,itemH,&itemH);

  }

  ERR(suites.UtilitySuite5()->AEGP_EndQuietErrors(TRUE,&errorState));

  return err;

}


in PF_Cmd_USER_CHANGED_PARAM:

CopyStream(EffectName,FEATHER_FrontCenter,FEATHER_DISK_ID2,startIndex3,endIndex3);

GenerateVibration(EffectName,startIndex,endIndex);