shithub: aubio

Download patch

ref: 09b082dcc7142901aa0b6690ddfe8b4aef572e9a
parent: 65f1edc7adf261ce6a3cf8715a2b658cb2b8440e
author: Paul Brossier <piem@altern.org>
date: Tue Nov 30 17:28:53 EST 2004

src/pitchyin.c



--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2004-11-39  Paul Brossier <piem@altern.org>
 	* configure.ac: added -lmx on macosx
+	* python/aubiocut: seeks for local minima before peak
+	* src/pitchyinc.c: adds draft for all-in-one faster function
 
 2004-10-28  Paul Brossier <piem@altern.org>
 	* src/Makefile.am: added config.h installation
--- a/src/pitchyin.c
+++ b/src/pitchyin.c
@@ -86,3 +86,44 @@
 	return 0;
 }
 
+
+/* all the above in one */
+void aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t * yin){
+	uint_t c,j,tau;
+	smpl_t tmp, tmp2;
+	for (c=0;c<input->channels;c++)
+	{
+		for (tau=0;tau<yin->length;tau++)
+		{
+			yin->data[c][tau] = 0.;
+		}
+		for (tau=1;tau<yin->length;tau++)
+		{
+			for (j=0;j<yin->length;j++)
+			{
+				tmp = input->data[c][j] - input->data[c][j+tau];
+				yin->data[c][tau] += SQR(tmp);
+			}
+		}
+		tmp2 = 0.;
+		yin->data[c][0] = 1.;
+		for (tau=1;tau<yin->length;tau++)
+		{
+			tmp += yin->data[c][tau];
+			yin->data[c][tau] *= tau/tmp;
+		}
+	}
+	/* should merge the following with above */
+	do 
+	{
+		if(yin->data[c][tau] < 0.1) { 
+			while (yin->data[c][tau+1] < yin->data[c][tau]) {
+				tau++;
+			}
+			return tau;
+		}
+		tau++;
+	} while (tau<yin->length);
+	return 0;
+}
+