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 HertzToSpecial (double value, int pitchUnit) { return pitchUnit == kPitch_unit_HERTZ ? value : pitchUnit == kPitch_unit_HERTZ_LOGARITHMIC ? value <= 0.0 ? NUMundefined : log10 (value) : pitchUnit == kPitch_unit_MEL ? NUMhertzToMel (value) : pitchUnit == kPitch_unit_LOG_HERTZ ? value <= 0.0 ? NUMundefined : log10 (value) : pitchUnit == kPitch_unit_SEMITONES_1 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 1.0) / NUMln2 : pitchUnit == kPitch_unit_SEMITONES_100 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 100.0) / NUMln2 : pitchUnit == kPitch_unit_SEMITONES_200 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 200.0) / NUMln2 : pitchUnit == kPitch_unit_SEMITONES_440 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 440.0) / NUMln2 : pitchUnit == kPitch_unit_ERB ? NUMhertzToErb (value) : NUMundefined; }
double structPitch :: v_convertStandardToSpecialUnit (double value, long ilevel, int unit) { if (ilevel == Pitch_LEVEL_FREQUENCY) { return unit == kPitch_unit_HERTZ ? value : unit == kPitch_unit_HERTZ_LOGARITHMIC ? value <= 0.0 ? NUMundefined : log10 (value) : unit == kPitch_unit_MEL ? NUMhertzToMel (value) : unit == kPitch_unit_LOG_HERTZ ? value <= 0.0 ? NUMundefined : log10 (value) : unit == kPitch_unit_SEMITONES_1 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 1.0) / NUMln2 : unit == kPitch_unit_SEMITONES_100 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 100.0) / NUMln2 : unit == kPitch_unit_SEMITONES_200 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 200.0) / NUMln2 : unit == kPitch_unit_SEMITONES_440 ? value <= 0.0 ? NUMundefined : 12.0 * log (value / 440.0) / NUMln2 : unit == kPitch_unit_ERB ? NUMhertzToErb (value) : NUMundefined; } else { return unit == Pitch_STRENGTH_UNIT_AUTOCORRELATION ? value : unit == Pitch_STRENGTH_UNIT_NOISE_HARMONICS_RATIO ? value <= 1e-15 ? 1e15 : value > 1.0 - 1e-15 ? 1e-15 : (1.0 - value) / value : /* Before losing precision. */ unit == Pitch_STRENGTH_UNIT_HARMONICS_NOISE_DB ? value <= 1e-15 ? -150.0 : value > 1.0 - 1e-15 ? 150.0 : 10 * log10 (value / (1.0 - value)) : /* Before losing precision. */ NUMundefined; } }