void PitchTier_shiftFrequencies (PitchTier me, double tmin, double tmax, double shift, int unit) { try { for (long i = 1; i <= my points -> size; i ++) { RealPoint point = (RealPoint) my points -> item [i]; double frequency = point -> value; if (point -> number < tmin || point -> number > tmax) continue; switch (unit) { case kPitch_unit_HERTZ: { frequency += shift; if (frequency <= 0.0) Melder_throw ("The resulting frequency has to be greater than 0 Hz."); } break; case kPitch_unit_MEL: { frequency = NUMhertzToMel (frequency) + shift; if (frequency <= 0.0) Melder_throw ("The resulting frequency has to be greater than 0 mel."); frequency = NUMmelToHertz (frequency); } break; case kPitch_unit_LOG_HERTZ: { frequency = pow (10.0, log10 (frequency) + shift); } break; case kPitch_unit_SEMITONES_1: { frequency = NUMsemitonesToHertz (NUMhertzToSemitones (frequency) + shift); } break; case kPitch_unit_ERB: { frequency = NUMhertzToErb (frequency) + shift; if (frequency <= 0.0) Melder_throw ("The resulting frequency has to be greater than 0 ERB."); frequency = NUMerbToHertz (frequency); } } point -> value = frequency; } } catch (MelderError) { Melder_throw (me, ": not all frequencies were shifted."); } }
static double SpecialToHertz (double value, int pitchUnit) { return pitchUnit == kPitch_unit_HERTZ ? value : pitchUnit == kPitch_unit_HERTZ_LOGARITHMIC ? pow (10.0, value) : pitchUnit == kPitch_unit_MEL ? NUMmelToHertz (value) : pitchUnit == kPitch_unit_LOG_HERTZ ? pow (10.0, value) : pitchUnit == kPitch_unit_SEMITONES_1 ? 1.0 * exp (value * (NUMln2 / 12.0)) : pitchUnit == kPitch_unit_SEMITONES_100 ? 100.0 * exp (value * (NUMln2 / 12.0)) : pitchUnit == kPitch_unit_SEMITONES_200 ? 200.0 * exp (value * (NUMln2 / 12.0)) : pitchUnit == kPitch_unit_SEMITONES_440 ? 440.0 * exp (value * (NUMln2 / 12.0)) : pitchUnit == kPitch_unit_ERB ? NUMerbToHertz (value) : NUMundefined; }
double structPitch :: v_convertSpecialToStandardUnit (double value, long ilevel, int unit) { if (ilevel == Pitch_LEVEL_FREQUENCY) { return unit == kPitch_unit_HERTZ ? value : unit == kPitch_unit_HERTZ_LOGARITHMIC ? pow (10.0, value) : unit == kPitch_unit_MEL ? NUMmelToHertz (value) : unit == kPitch_unit_LOG_HERTZ ? pow (10.0, value) : unit == kPitch_unit_SEMITONES_1 ? 1.0 * exp (value * (NUMln2 / 12.0)): unit == kPitch_unit_SEMITONES_100 ? 100.0 * exp (value * (NUMln2 / 12.0)): unit == kPitch_unit_SEMITONES_200 ? 200.0 * exp (value * (NUMln2 / 12.0)): unit == kPitch_unit_SEMITONES_440 ? 440.0 * exp (value * (NUMln2 / 12.0)): unit == kPitch_unit_ERB ? NUMerbToHertz (value) : NUMundefined; } else { return NUMundefined; } }