예제 #1
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
static void shiftX (I, double xfrom, double xto) {
	iam (Sampled);
	inherited (Sampled) shiftX (me, xfrom, xto);
	NUMshift (& my x1, xfrom, xto);
}
예제 #2
0
static void print (void *void_me, Graphics printer) {
	iam (Picture);
	Graphics_play (my graphics, printer);
}
예제 #3
0
파일: Sound.cpp 프로젝트: alekstorm/tala
static void info (I) {
	iam (Sound);
	const double rho_c = 400;   /* rho = 1.14 kg m-3; c = 353 m s-1; [rho c] = kg m-2 s-1 */
	long numberOfSamples = my nx;
	double minimum = my z [1] [1], maximum = minimum;
	classData -> info (me);
	MelderInfo_writeLine3 (L"Number of channels: ", Melder_integer (my ny),
		my ny == 1 ? L" (mono)" : my ny == 2 ? L" (stereo)" : L"");
	MelderInfo_writeLine1 (L"Time domain:");
	MelderInfo_writeLine3 (L"   Start time: ", Melder_double (my xmin), L" seconds");
	MelderInfo_writeLine3 (L"   End time: ", Melder_double (my xmax), L" seconds");
	MelderInfo_writeLine3 (L"   Total duration: ", Melder_double (my xmax - my xmin), L" seconds");
	MelderInfo_writeLine1 (L"Time sampling:");
	MelderInfo_writeLine2 (L"   Number of samples: ", Melder_integer (my nx));
	MelderInfo_writeLine3 (L"   Sampling period: ", Melder_double (my dx), L" seconds");
	MelderInfo_writeLine3 (L"   Sampling frequency: ", Melder_single (1.0 / my dx), L" Hz");
	MelderInfo_writeLine3 (L"   First sample centred at: ", Melder_double (my x1), L" seconds");
	double sum = 0.0, sumOfSquares = 0.0;
	for (long channel = 1; channel <= my ny; channel ++) {
		double *amplitude = my z [channel];
		for (long i = 1; i <= numberOfSamples; i ++) {
			double value = amplitude [i];
			sum += value;
			sumOfSquares += value * value;
			if (value < minimum) minimum = value;
			if (value > maximum) maximum = value;
		}
	}
	MelderInfo_writeLine1 (L"Amplitude:");
	MelderInfo_writeLine3 (L"   Minimum: ", Melder_single (minimum), L" Pascal");
	MelderInfo_writeLine3 (L"   Maximum: ", Melder_single (maximum), L" Pascal");
	double mean = sum / (my nx * my ny);
	MelderInfo_writeLine3 (L"   Mean: ", Melder_single (mean), L" Pascal");
	MelderInfo_writeLine3 (L"   Root-mean-square: ", Melder_single (sqrt (sumOfSquares / (my nx * my ny))), L" Pascal");
	double penergy = sumOfSquares * my dx / my ny;   /* Pa2 s = kg2 m-2 s-3 */
	MelderInfo_write3 (L"Total energy: ", Melder_single (penergy), L" Pascal\u00B2 sec");
	double energy = penergy / rho_c;   /* kg s-2 = Joule m-2 */
	MelderInfo_writeLine3 (L" (energy in air: ", Melder_single (energy), L" Joule/m\u00B2)");
	double power = energy / (my dx * my nx);   /* kg s-3 = Watt/m2 */
	MelderInfo_write3 (L"Mean power (intensity) in air: ", Melder_single (power), L" Watt/m\u00B2");
	if (power != 0.0) {
		MelderInfo_writeLine3 (L" = ", Melder_half (10 * log10 (power / 1e-12)), L" dB");
	} else {
		MelderInfo_writeLine1 (L"");
	}
	if (my nx > 1) {
		for (long channel = 1; channel <= my ny; channel ++) {
			double *amplitude = my z [channel];
			double sum = 0.0;
			for (long i = 1; i <= numberOfSamples; i ++) {
				double value = amplitude [i];
				sum += value;
			}
			double mean = sum / my nx, stdev = 0.0;
			for (long i = 1; i <= numberOfSamples; i ++) {
				double value = amplitude [i] - mean;
				stdev += value * value;
			}
			stdev = sqrt (stdev / (my nx - 1));
			MelderInfo_writeLine5 (L"Standard deviation in channel ", Melder_integer (channel), L": ", Melder_single (stdev), L" Pascal");
		}
	}
}
예제 #4
0
void CommandHistory_back (I) {
	iam (CommandHistory);
	my current--;
}
예제 #5
0
int CommandHistory_empty (I) {
	iam (CommandHistory);
	return my size == 0;
}
예제 #6
0
char32 *CommandHistory_commandName (I, long offsetFromCurrent) {
	iam (CommandHistory);
	long pos = my current + offsetFromCurrent;

	return pos >= 1 && pos <= my size ? Thing_getName ( (Thing) my item[pos]) : NULL;
}
예제 #7
0
int Command_undo (I) {
	iam (Command);
	return my undo (me);
}
예제 #8
0
int structFilesInMemory :: s_compare_name (I, thou) {
	iam (FileInMemory); thouart (FileInMemory);
	return Melder_wcscmp (my d_path, thy d_path);
}
예제 #9
0
int structFilesInMemory :: s_compare_id (I, thou) {
	iam (FileInMemory); thouart (FileInMemory);
	return Melder_wcscmp (my d_id, thy d_id);
}
예제 #10
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
double Sampled_indexToX (I, long i) {
	iam (Sampled);
	return my x1 + (i - 1) * my dx;
}
예제 #11
0
파일: GuiForm.cpp 프로젝트: DsRQuicke/praat
	static void _guiMotifForm_destroyCallback (GuiObject widget, XtPointer void_me, XtPointer call) {
		(void) widget; (void) call;
		iam (GuiForm);
		forget (me);
	}
예제 #12
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
static void scaleX (I, double xminfrom, double xmaxfrom, double xminto, double xmaxto) {
	iam (Sampled);
	inherited (Sampled) scaleX (me, xminfrom, xmaxfrom, xminto, xmaxto);
	NUMscale (& my x1, xminfrom, xmaxfrom, xminto, xmaxto);
	my dx *= (xmaxto - xminto) / (xmaxfrom - xminfrom);
}
예제 #13
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
double Sampled_getXOfMaximum (I, double xmin, double xmax, long ilevel, int unit, int interpolate) {
	iam (Sampled);
	double time;
	Sampled_getMaximumAndX (me, xmin, xmax, ilevel, unit, interpolate, NULL, & time);
	return time;
}
예제 #14
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
double Sampled_getMaximum (I, double xmin, double xmax, long ilevel, int unit, int interpolate) {
	iam (Sampled);
	double maximum;
	Sampled_getMaximumAndX (me, xmin, xmax, ilevel, unit, interpolate, & maximum, NULL);
	return maximum;
}
예제 #15
0
	static gboolean _GuiWindow_destroyCallback (GuiObject widget, GdkEvent *event, gpointer void_me) {
		(void) widget;
		iam (GuiWindow);
		forget (me);
		return TRUE;
	}
예제 #16
0
	static void _GuiGtkDrawingArea_destroyCallback (GuiObject widget, gpointer void_me) {
		(void) widget;
		iam (GuiDrawingArea);
		forget (me);
	}
예제 #17
0
int CommandHistory_offright (I) {
	iam (CommandHistory);
	return my size == 0 || my current == my size + 1;
}
예제 #18
0
	static void _GuiGtkScrollBar_destroyCallback (GuiObject widget, gpointer void_me) {
		(void) widget;
		iam (GuiScrollBar);
		forget (me);
	}
예제 #19
0
int Command_do (I) {
	iam (Command);
	return my execute (me);
}
예제 #20
0
	static void _GuiGtkButton_destroyCallback (GuiObject widget, gpointer void_me) {
		(void) widget;
		iam (GuiButton);
		trace (U"destroying GuiButton ", Melder_pointer (me));
		forget (me);
	}
예제 #21
0
void CommandHistory_forth (I) {
	iam (CommandHistory);
	my current++;
}
예제 #22
0
파일: GuiList.cpp 프로젝트: eginhard/praat
	static void _GuiGtkList_destroyCallback (gpointer void_me) {
		iam (GuiList);
		forget (me);
	}
예제 #23
0
Any CommandHistory_getItem (I) {
	iam (CommandHistory);
	Melder_assert (my current > 0 && my current <= my size);
	return my item[my current];
}
예제 #24
0
static double getVector (I, long irow, long icol) {
	iam (FormantGrid);
	RealTier tier = (structRealTier *)my formants -> item [irow];
	return RealTier_getValueAtIndex (tier, icol);
}
예제 #25
0
int CommandHistory_offleft (I) {
	iam (CommandHistory);
	return my current == 0;
}
예제 #26
0
static double getFunction1 (I, long irow, double x) {
	iam (FormantGrid);
	RealTier tier = (structRealTier *)my formants -> item [irow];
	return RealTier_getValueAtTime (tier, x);
}
예제 #27
0
파일: Sound.cpp 프로젝트: alekstorm/tala
static double getFunction2 (I, double x, double y) {
	iam (Sound);
	long channel = (long) floor (y);
	if (channel < 0 || channel > my ny || y != (double) channel) return 0.0;
	return our getFunction1 (me, channel, x);
}
예제 #28
0
static void _GuiGtkCheckButton_destroyCallback (GuiObject widget, gpointer void_me) {
	(void) widget;
	iam (GuiCheckButton);
	Melder_free (me);
}
예제 #29
0
	static void _guiGtkMenuItem_destroyCallback (GuiObject widget, gpointer void_me) {
		(void) widget;
		iam (GuiMenuItem);
		trace (U"destroying GuiMenuItem ", Melder_pointer (me));
		forget (me);
	}
예제 #30
0
파일: Sampled.cpp 프로젝트: alekstorm/tala
void Sampled_getMaximumAndX (I, double xmin, double xmax, long ilevel, int unit, int interpolate,
	double *return_maximum, double *return_xOfMaximum)
{
	iam (Sampled);
	long imin, imax, i;
	double maximum = -1e301, xOfMaximum = 0.0;
	if (xmin == NUMundefined || xmax == NUMundefined) {
		maximum = xOfMaximum = NUMundefined;
		goto end;
	}
	Function_unidirectionalAutowindow (me, & xmin, & xmax);
	if (! Function_intersectRangeWithDomain (me, & xmin, & xmax)) {
		maximum = xOfMaximum = NUMundefined;   /* Requested range and logical domain do not intersect. */
		goto end;
	}
	if (! Sampled_getWindowSamples (me, xmin, xmax, & imin, & imax)) {
		/*
		 * No sample centres between tmin and tmax.
		 * Try to return the greater of the values at these two points.
		 */
		double fleft = Sampled_getValueAtX (me, xmin, ilevel, unit, interpolate);
		double fright = Sampled_getValueAtX (me, xmax, ilevel, unit, interpolate);
		if (NUMdefined (fleft) && fleft > maximum) maximum = fleft, xOfMaximum = xmin;
		if (NUMdefined (fright) && fright > maximum) maximum = fright, xOfMaximum = xmax;
	} else {
		for (i = imin; i <= imax; i ++) {
			double fmid = our getValueAtSample (me, i, ilevel, unit);
			if (fmid == NUMundefined) continue;
			if (interpolate == FALSE) {
				if (fmid > maximum) maximum = fmid, xOfMaximum = i;
			} else {
				/*
				 * Try an interpolation, possibly even taking into account a sample just outside the selection.
				 */
				double fleft = i <= 1 ? NUMundefined : our getValueAtSample (me, i - 1, ilevel, unit);
				double fright = i >= my nx ? NUMundefined : our getValueAtSample (me, i + 1, ilevel, unit);
				if (fleft == NUMundefined || fright == NUMundefined) {
					if (fmid > maximum) maximum = fmid, xOfMaximum = i;
				} else if (fmid > fleft && fmid >= fright) {
					double y [4], i_real, localMaximum;
					y [1] = fleft, y [2] = fmid, y [3] = fright;
					localMaximum = NUMimproveMaximum (y, 3, 2, NUM_PEAK_INTERPOLATE_PARABOLIC, & i_real);
					if (localMaximum > maximum)
						maximum = localMaximum, xOfMaximum = i_real + i - 2;
				}
			}
		}
		xOfMaximum = my x1 + (xOfMaximum - 1) * my dx;   /* From index plus phase to time. */
		/* Check boundary values. */
		if (interpolate) {
			double fleft = Sampled_getValueAtX (me, xmin, ilevel, unit, TRUE);
			double fright = Sampled_getValueAtX (me, xmax, ilevel, unit, TRUE);
			if (NUMdefined (fleft) && fleft > maximum) maximum = fleft, xOfMaximum = xmin;
			if (NUMdefined (fright) && fright > maximum) maximum = fright, xOfMaximum = xmax;
		}
		if (xOfMaximum < xmin) xOfMaximum = xmin;
		if (xOfMaximum > xmax) xOfMaximum = xmax;
	}
	if (maximum == -1e301) maximum = xOfMaximum = NUMundefined;
end:
	if (return_maximum) *return_maximum = maximum;
	if (return_xOfMaximum) *return_xOfMaximum = xOfMaximum;
}