From ensonic at hora-obscura.de Sun Jun 6 14:00:16 2010 From: ensonic at hora-obscura.de (Stefan Kost) Date: Mon, 07 Jun 2010 00:00:16 +0300 Subject: [Vorbis-dev] Tremor maintenance In-Reply-To: <4BCD8127.4060300@hora-obscura.de> References: <4BCD4D75.4080100@hora-obscura.de> <4BCD8127.4060300@hora-obscura.de> Message-ID: <4C0C0C60.8040407@hora-obscura.de> Am 20.04.2010 13:25, schrieb Stefan Kost: > hi, > xiphmont at xiph.org wrote: >> Conrad, >> >> Thanks for applying. In general try to keep all three branches in >> sync though.... >> >> Monty >> > > do you have any opinion on the versioning? > The last enyry in the CHANGELOG was > *** 20020517: 1.0.2 *** > > Playback bugfix to floor1; mode mistakenly used for sizing instead > of blockflag > > but the configure.in uses > AM_INIT_AUTOMAKE(libvorbisidec,1.2.0) > > The configure entry causes "make dist" to produce a > libvorbisidec-1.2.0.tar.gz. > > Should a next SVN snapshot be 1.2.0 or 1.0.3 ? > > Stefan ping - any thoughts? There has been some confusion about this in the past already as distros where shipping a svn snapshot and calling it 1.2.0, software depending on the 1.2.0 and thus failing on other platforms that only had 1.0.2. Stefan From flatmax at ieee.org Sun Jun 27 02:53:46 2010 From: flatmax at ieee.org (Matt Flax) Date: Sun, 27 Jun 2010 19:53:46 +1000 Subject: [Vorbis-dev] libaudiomask - Audio masking threshold estimation library Message-ID: <1277632427.2044.5.camel@monsiltationax> It is possible that this may be of use to you ... I have just GPL'd and released for the first time my Simultaneous audio masking library. You can get an idea of what it is/does from here : http://www.flatmax.org/libaudiomask-dev/API-libaudiomask/ I am not sure what you are using right now, nor how simple it is to use. The beauty of this library is its simplicity. You can use any reasonable sample rate. You can use any reasonable window size. If you are interested, then you can get the source code here : http://packages.debian.org/sid/libaudiomask-dev Matt --------------------- enjoy some of my music: http://www.jamendo.com/en/album/30616 From bogus@does.not.exist.com Sun Jun 6 23:52:00 2010 From: bogus@does.not.exist.com () Date: Mon, 07 Jun 2010 06:52:00 -0000 Subject: No subject Message-ID: void inverse_mdct_slow(float *buffer, int n) { =A0=A0 int i,j; =A0=A0 int n2 =3D n >> 1; =A0=A0 float *x =3D (float *) malloc(sizeof(*x) * n2); =A0=A0 memcpy(x, buffer, sizeof(*x) * n2); =A0=A0 for (i=3D0; i < n; ++i) { =A0=A0=A0=A0=A0 float acc =3D 0; =A0=A0=A0=A0=A0 for (j=3D0; j < n2; ++j) =A0=A0=A0=A0=A0=A0=A0=A0 // formula from paper: =A0=A0=A0=A0=A0=A0=A0=A0 //acc +=3D n/4.0f * x[j] * (float) cos(M_PI / 2 / = n * (2 * i + 1 + n/2.0)*(2*j+1)); =A0=A0=A0=A0=A0=A0=A0=A0 // formula from wikipedia =A0=A0=A0=A0=A0=A0=A0=A0 //acc +=3D 2.0f / n2 * x[j] * (float) cos(M_PI/n2 = * (i + 0.5 + n2/2)*(j + 0.5)); =A0=A0=A0=A0=A0=A0=A0=A0 // these are equivalent, except the formula from t= he paper inverts the multiplier! =A0=A0=A0=A0=A0=A0=A0=A0 // however, what actually works is NO MULTIPLIER!?= ! =A0=A0=A0=A0=A0=A0=A0=A0 //acc +=3D 64 * 2.0f / n2 * x[j] * (float) cos(M_P= I/n2 * (i + 0.5 + n2/2)*(j + 0.5)); =A0=A0=A0=A0=A0=A0=A0=A0 acc +=3D x[j] * (float) cos(M_PI / 2 / n * (2 * i = + 1 + n/2.0)*(2*j+1)); =A0=A0=A0=A0=A0 buffer[i] =3D acc; =A0=A0 } =A0=A0 free(x); } Thanks Liam Wilson --0-226214673-1312203902=:12407 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable
Hi

The inverse MDCT formula seems to b= e missing from the vorbis specification. From reading the source code of st= b_vorbis (http://nothings.org/stb_vorbis/) I've a good idea of what it migh= t be, but cannot find the formula anywhere in the official specification (t= he one on http://xiph.org/vorbis/doc/Vorbis_I_spec.html ). I also understan= d that the formula stated in the eusipco_corrected.ps paper is incorrect (t= he link from the specification to the paper is also dead).

From the = stb_vorbis.c source:

void inverse_mdct_slow(float *buffer, int n){
   int i,j;
   int n2 =3D n >> 1;
&nb= sp;  float *x =3D (float *) malloc(sizeof(*x) * n2);
   m= emcpy(x, buffer, sizeof(*x) * n2);
   for (i=3D0; i < n; ++= i) {
      float acc =3D 0;
      for (j=3D0; j < n2; ++j)
 =         // formula from paper:
 =         //acc +=3D n/4.0f * x[j] * (floa= t) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1));
   &n= bsp;     // formula from wikipedia
   = ;      //acc +=3D 2.0f / n2 * x[j] * (float) cos(M= _PI/n2 * (i + 0.5 + n2/2)*(j + 0.5));
     &nbs= p;   // these are equivalent, except the formula from the paper i= nverts the multiplier!
         = // however, what actually works is NO MULTIPLIER!?!
   &n= bsp;     //acc +=3D 64 * 2.0f / n2 * x[j] * (float) cos= (M_PI/n2 * (i + 0.5 + n2/2)*(j + 0.5));
     &n= bsp;   acc +=3D x[j] * (float) cos(M_PI / 2 / n * (2 * i + 1 + n/2.0)*(2*j+1));
      buffer[i] =3D acc;
&= nbsp;  }
   free(x);
}

Thanks
Liam Wilson
--0-226214673-1312203902=:12407--