1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-01-16 17:41:15 +01:00

Update libvorbis to 1.3.3.

This commit is contained in:
lllucius
2013-10-24 18:24:47 +00:00
parent 78309687be
commit 3a33e2f717
374 changed files with 119632 additions and 45432 deletions

View File

@@ -12,7 +12,7 @@
function: simple utility that runs audio through the psychoacoustics
without encoding
last mod: $Id: psytune.c,v 1.8 2008-02-02 15:53:53 richardash1981 Exp $
last mod: $Id: psytune.c 16037 2009-05-26 21:10:58Z xiphmont $
********************************************************************/
@@ -158,43 +158,43 @@ static vorbis_info_psy _psy_set0={
};
static vorbis_info_floor1 _floor_set0={1,
{0},
{32},
{0},
{0},
{{-1}},
{0},
{32},
{0},
{0},
{{-1}},
2,
{0,1024,
2,
{0,1024,
88,31,243,
88,31,243,
14,54,143,460,
6,3,10, 22,18,26, 41,36,47,
69,61,78, 112,99,126, 185,162,211,
329,282,387, 672,553,825
},
60,30,400,
20,8,1,18.,
20,600,
960};
14,54,143,460,
6,3,10, 22,18,26, 41,36,47,
69,61,78, 112,99,126, 185,162,211,
329,282,387, 672,553,825
},
60,30,400,
20,8,1,18.,
20,600,
960};
static vorbis_info_mapping0 mapping_info={1,{0,1},{0},{0},{0},0, 1, {0},{1}};
static codec_setup_info codec_setup0={ {0,0},
1,1,1,1,1,0,1,
{NULL},
{0},{&mapping_info},
{0},{NULL},
{1},{&_floor_set0},
{2},{NULL},
{NULL},
{&_psy_set0},
&_psy_set0G};
1,1,1,1,1,0,1,
{NULL},
{0},{&mapping_info},
{0},{NULL},
{1},{&_floor_set0},
{2},{NULL},
{NULL},
{&_psy_set0},
&_psy_set0G};
static int noisy=0;
void analysis(char *base,int i,float *v,int n,int bark,int dB){
if(noisy){
@@ -206,18 +206,18 @@ void analysis(char *base,int i,float *v,int n,int bark,int dB){
for(j=0;j<n;j++){
if(dB && v[j]==0)
fprintf(of,"\n\n");
fprintf(of,"\n\n");
else{
if(bark)
fprintf(of,"%g ",toBARK(22050.f*j/n));
else
fprintf(of,"%g ",(float)j);
if(bark)
fprintf(of,"%g ",toBARK(22050.f*j/n));
else
fprintf(of,"%g ",(float)j);
if(dB){
fprintf(of,"%g\n",todB(v+j));
}else{
fprintf(of,"%g\n",v[j]);
}
if(dB){
fprintf(of,"%g\n",todB(v+j));
}else{
fprintf(of,"%g\n",v[j]);
}
}
}
fclose(of);
@@ -257,16 +257,16 @@ int main(int argc,char *argv[]){
if(*argv[0]=='-'){
/* option */
if(argv[0][1]=='v'){
noisy=0;
noisy=0;
}
}else
if(*argv[0]=='+'){
/* option */
if(argv[0][1]=='v'){
noisy=1;
}
/* option */
if(argv[0][1]=='v'){
noisy=1;
}
}else
framesize=atoi(argv[0]);
framesize=atoi(argv[0]);
argv++;
}
@@ -314,194 +314,194 @@ int main(int argc,char *argv[]){
pcm[0][i]=((buffer[i*4+1]<<8)|
(0x00ff&(int)buffer[i*4]))/32768.f;
pcm[1][i]=((buffer[i*4+3]<<8)|
(0x00ff&(int)buffer[i*4+2]))/32768.f;
(0x00ff&(int)buffer[i*4+2]))/32768.f;
}
{
float secs=framesize/44100.;
ampmax+=secs*ampmax_att_per_sec;
if(ampmax<-9999)ampmax=-9999;
float secs=framesize/44100.;
ampmax+=secs*ampmax_att_per_sec;
if(ampmax<-9999)ampmax=-9999;
}
for(i=0;i<2;i++){
float scale=4.f/framesize;
float *fft=work[i];
float *mdct=pcm[i];
float *logmdct=mdct+framesize/2;
float scale=4.f/framesize;
float *fft=work[i];
float *mdct=pcm[i];
float *logmdct=mdct+framesize/2;
analysis("pre",frameno+i,pcm[i],framesize,0,0);
/* fft and mdct transforms */
for(j=0;j<framesize;j++)
fft[j]=pcm[i][j]*=window[j];
drft_forward(&f_look,fft);
analysis("pre",frameno+i,pcm[i],framesize,0,0);
/* fft and mdct transforms */
for(j=0;j<framesize;j++)
fft[j]=pcm[i][j]*=window[j];
drft_forward(&f_look,fft);
local_ampmax[i]=-9999.f;
fft[0]*=scale;
fft[0]=todB(fft);
for(j=1;j<framesize-1;j+=2){
float temp=scale*FAST_HYPOT(fft[j],fft[j+1]);
temp=fft[(j+1)>>1]=todB(&temp);
if(temp>local_ampmax[i])local_ampmax[i]=temp;
}
if(local_ampmax[i]>ampmax)ampmax=local_ampmax[i];
mdct_forward(&m_look,pcm[i],mdct);
for(j=0;j<framesize/2;j++)
logmdct[j]=todB(mdct+j);
local_ampmax[i]=-9999.f;
fft[0]*=scale;
fft[0]=todB(fft);
for(j=1;j<framesize-1;j+=2){
float temp=scale*FAST_HYPOT(fft[j],fft[j+1]);
temp=fft[(j+1)>>1]=todB(&temp);
if(temp>local_ampmax[i])local_ampmax[i]=temp;
}
if(local_ampmax[i]>ampmax)ampmax=local_ampmax[i];
mdct_forward(&m_look,pcm[i],mdct);
for(j=0;j<framesize/2;j++)
logmdct[j]=todB(mdct+j);
analysis("mdct",frameno+i,logmdct,framesize/2,1,0);
analysis("fft",frameno+i,fft,framesize/2,1,0);
analysis("mdct",frameno+i,logmdct,framesize/2,1,0);
analysis("fft",frameno+i,fft,framesize/2,1,0);
}
for(i=0;i<2;i++){
float amp;
float *fft=work[i];
float *logmax=fft;
float *mdct=pcm[i];
float *logmdct=mdct+framesize/2;
float *mask=fft+framesize/2;
float amp;
float *fft=work[i];
float *logmax=fft;
float *mdct=pcm[i];
float *logmdct=mdct+framesize/2;
float *mask=fft+framesize/2;
/* floor psychoacoustics */
_vp_compute_mask(&p_look,
pg_look,
i,
fft,
logmdct,
mask,
ampmax,
local_ampmax[i],
framesize/2);
/* floor psychoacoustics */
_vp_compute_mask(&p_look,
pg_look,
i,
fft,
logmdct,
mask,
ampmax,
local_ampmax[i],
framesize/2);
analysis("mask",frameno+i,mask,framesize/2,1,0);
analysis("mask",frameno+i,mask,framesize/2,1,0);
{
vorbis_block vb;
vorbis_dsp_state vd;
memset(&vd,0,sizeof(vd));
vd.vi=&vi;
vb.vd=&vd;
vb.pcmend=framesize;
{
vorbis_block vb;
vorbis_dsp_state vd;
memset(&vd,0,sizeof(vd));
vd.vi=&vi;
vb.vd=&vd;
vb.pcmend=framesize;
/* floor quantization/application */
nonzero[i]=_floor_P[1]->forward(&vb,floor_look,
mdct,
logmdct,
mask,
logmax,
flr[i]);
}
/* floor quantization/application */
nonzero[i]=_floor_P[1]->forward(&vb,floor_look,
mdct,
logmdct,
mask,
logmax,
flr[i]);
}
_vp_remove_floor(&p_look,
pg_look,
logmdct,
mdct,
flr[i],
pcm[i],
local_ampmax[i]);
_vp_remove_floor(&p_look,
pg_look,
logmdct,
mdct,
flr[i],
pcm[i],
local_ampmax[i]);
for(j=0;j<framesize/2;j++)
if(fabs(pcm[i][j])>1500)
fprintf(stderr,"%ld ",frameno+i);
analysis("res",frameno+i,pcm[i],framesize/2,1,0);
analysis("codedflr",frameno+i,flr[i],framesize/2,1,1);
for(j=0;j<framesize/2;j++)
if(fabs(pcm[i][j])>1500)
fprintf(stderr,"%ld ",frameno+i);
analysis("res",frameno+i,pcm[i],framesize/2,1,0);
analysis("codedflr",frameno+i,flr[i],framesize/2,1,1);
}
/* residue prequantization */
_vp_partition_prequant(&p_look,
&vi,
pcm,
nonzero);
&vi,
pcm,
nonzero);
for(i=0;i<2;i++)
analysis("quant",frameno+i,pcm[i],framesize/2,1,0);
analysis("quant",frameno+i,pcm[i],framesize/2,1,0);
/* channel coupling / stereo quantization */
_vp_couple(&p_look,
&mapping_info,
pcm,
nonzero);
&mapping_info,
pcm,
nonzero);
for(i=0;i<2;i++)
analysis("coupled",frameno+i,pcm[i],framesize/2,1,0);
analysis("coupled",frameno+i,pcm[i],framesize/2,1,0);
/* decoupling */
for(i=mapping_info.coupling_steps-1;i>=0;i--){
float *pcmM=pcm[mapping_info.coupling_mag[i]];
float *pcmA=pcm[mapping_info.coupling_ang[i]];
for(j=0;j<framesize/2;j++){
float mag=pcmM[j];
float ang=pcmA[j];
if(mag>0)
if(ang>0){
pcmM[j]=mag;
pcmA[j]=mag-ang;
}else{
pcmA[j]=mag;
pcmM[j]=mag+ang;
}
else
if(ang>0){
pcmM[j]=mag;
pcmA[j]=mag+ang;
}else{
pcmA[j]=mag;
pcmM[j]=mag-ang;
}
}
float *pcmM=pcm[mapping_info.coupling_mag[i]];
float *pcmA=pcm[mapping_info.coupling_ang[i]];
for(j=0;j<framesize/2;j++){
float mag=pcmM[j];
float ang=pcmA[j];
if(mag>0)
if(ang>0){
pcmM[j]=mag;
pcmA[j]=mag-ang;
}else{
pcmA[j]=mag;
pcmM[j]=mag+ang;
}
else
if(ang>0){
pcmM[j]=mag;
pcmA[j]=mag+ang;
}else{
pcmA[j]=mag;
pcmM[j]=mag-ang;
}
}
}
for(i=0;i<2;i++)
analysis("decoupled",frameno+i,pcm[i],framesize/2,1,0);
analysis("decoupled",frameno+i,pcm[i],framesize/2,1,0);
for(i=0;i<2;i++){
float amp;
float amp;
for(j=0;j<framesize/2;j++)
pcm[i][j]*=flr[i][j];
for(j=0;j<framesize/2;j++)
pcm[i][j]*=flr[i][j];
analysis("final",frameno+i,pcm[i],framesize/2,1,1);
analysis("final",frameno+i,pcm[i],framesize/2,1,1);
/* take it back to time */
mdct_backward(&m_look,pcm[i],pcm[i]);
/* take it back to time */
mdct_backward(&m_look,pcm[i],pcm[i]);
for(j=0;j<framesize/2;j++)
out[i][j]+=pcm[i][j]*window[j];
for(j=0;j<framesize/2;j++)
out[i][j]+=pcm[i][j]*window[j];
analysis("out",frameno+i,out[i],framesize/2,0,0);
analysis("out",frameno+i,out[i],framesize/2,0,0);
}
/* write data. Use the part of buffer we're about to shift out */
for(i=0;i<2;i++){
char *ptr=buffer+i*2;
float *mono=out[i];
int flag=0;
for(j=0;j<framesize/2;j++){
int val=mono[j]*32767.;
/* might as well guard against clipping */
if(val>32767){
if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
flag=1;
val=32767;
}
if(val<-32768){
if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
flag=1;
val=-32768;
}
ptr[0]=val&0xff;
ptr[1]=(val>>8)&0xff;
ptr+=4;
}
char *ptr=buffer+i*2;
float *mono=out[i];
int flag=0;
for(j=0;j<framesize/2;j++){
int val=mono[j]*32767.;
/* might as well guard against clipping */
if(val>32767){
if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
flag=1;
val=32767;
}
if(val<-32768){
if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
flag=1;
val=-32768;
}
ptr[0]=val&0xff;
ptr[1]=(val>>8)&0xff;
ptr+=4;
}
}
fprintf(stderr,"*");
@@ -509,8 +509,8 @@ int main(int argc,char *argv[]){
memmove(buffer,buffer2,framesize*2);
for(i=0;i<2;i++){
for(j=0,k=framesize/2;j<framesize/2;j++,k++)
out[i][j]=pcm[i][k]*window[k];
for(j=0,k=framesize/2;j<framesize/2;j++,k++)
out[i][j]=pcm[i][k]*window[k];
}
frameno+=2;
}else
@@ -518,7 +518,7 @@ int main(int argc,char *argv[]){
}
fprintf(stderr,"average raw bits of entropy: %.03g/sample\n",acc/tot);
fprintf(stderr,"average nonzero samples: %.03g/%d\n",nonz/tot*framesize/2,
framesize/2);
framesize/2);
fprintf(stderr,"Done\n\n");
return 0;
}