I took a look at that: I think s[][] is the spreading function used
for psymodel 2, layer II.  In LAME, it is never used, so I went ahead
and deleted all that code.  The layer III psy model is modified - see
page 80 in the ISO docs, "adaption of psychoacoustic model II for layer
III")


Mark





> 
> Has anyone taken a close look to the three spreading functions
> in Lame? For me it looks like they are buggy, but correct me
> if I'm wrong.
> 
> Here is how I would patch them.
> 
> Robert
> 
> 
> *** lame3.34/psymodel.c       Tue Oct 12 23:14:57 1999
> --- lame3.34.w2/psymodel.c    Mon Oct 18 21:27:27 1999
> ***************
> *** 328,336 ****
>    * Now compute the spreading function, s[j][i], the value of the spread-*
>    * ing function, centered at band j, for band i, store for later use    *
>    ************************************************************************/
> !      for(j=0;j<CBANDS;j++){
> !         for(i=0;i<CBANDS;i++){
> !            temp1 = (cbval[i] - cbval[j])*1.05;
>              if(temp1>=0.5 && temp1<=2.5){
>                 temp2 = temp1 - 0.5;
>                 temp2 = 8.0 * (temp2*(temp2 - 2.0));
> --- 328,337 ----
>    * Now compute the spreading function, s[j][i], the value of the spread-*
>    * ing function, centered at band j, for band i, store for later use    *
>    ************************************************************************/
> !      for(i=0;i<CBANDS;i++){
> !         for(j=0;j<CBANDS;j++){
> !            if(j!=i) temp1 = (cbval[i] - cbval[j])/.33;
> !            else     temp1 = (cbval[i] - cbval[j])/.66;
>              if(temp1>=0.5 && temp1<=2.5){
>                 temp2 = temp1 - 0.5;
>                 temp2 = 8.0 * (temp2*(temp2 - 2.0));
> ***************
> *** 338,344 ****
>              else temp2 = 0;
>              temp1 += 0.474;
>              temp3 = 15.811389+7.5*temp1-17.5*sqrt((double) (1.0+temp1*temp1));
> !            if(temp3 <= -100) s[i][j] = 0;
>              else {
>                 temp3 = (temp2 + temp3)*LN_TO_LOG10;
>                 s[i][j] = exp(temp3);
> --- 339,345 ----
>              else temp2 = 0;
>              temp1 += 0.474;
>              temp3 = 15.811389+7.5*temp1-17.5*sqrt((double) (1.0+temp1*temp1));
> !            if(temp3 <= -60) s[i][j] = 0;
>              else {
>                 temp3 = (temp2 + temp3)*LN_TO_LOG10;
>                 s[i][j] = exp(temp3);
> ***************
> *** 1032,1039 ****
>         for(j=0;j<part_max;j++)
>       {
>         //      tempx = (bval_l[i] - bval_l[j])*1.05;
> !       if (j>=i) tempx = (bval_l[i] - bval_l[j])*3.0;
> !       else    tempx = (bval_l[i] - bval_l[j])*1.5;
>         /*             if (j>=i) tempx = (bval_l[j] - bval_l[i])*3.0;
>                        else    tempx = (bval_l[j] - bval_l[i])*1.5; */
>         if(tempx>=0.5 && tempx<=2.5)
> --- 1033,1040 ----
>         for(j=0;j<part_max;j++)
>       {
>         //      tempx = (bval_l[i] - bval_l[j])*1.05;
> !       if (j!=i) tempx = (bval_l[j] - bval_l[i])/.33;
> !       else      tempx = (bval_l[j] - bval_l[i])/.66;
>         /*             if (j>=i) tempx = (bval_l[j] - bval_l[i])*3.0;
>                        else    tempx = (bval_l[j] - bval_l[i])*1.5; */
>         if(tempx>=0.5 && tempx<=2.5)
> ***************
> *** 1092,1099 ****
>         for(j=0;j<part_max;j++)
>       {
>         // tempx = (bval_s[i] - bval_s[j])*1.05;
> !       if (j>=i) tempx = (bval_s[i] - bval_s[j])*3.0;
> !       else    tempx = (bval_s[i] - bval_s[j])*1.5;
>         if(tempx>=0.5 && tempx<=2.5)
>           {
>             temp = tempx - 0.5;
> --- 1093,1100 ----
>         for(j=0;j<part_max;j++)
>       {
>         // tempx = (bval_s[i] - bval_s[j])*1.05;
> !       if (j!=i) tempx = (bval_s[j] - bval_s[i])/.33;
> !       else      tempx = (bval_s[j] - bval_s[i])/.66;
>         if(tempx>=0.5 && tempx<=2.5)
>           {
>             temp = tempx - 0.5;
> --
> MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )
> 
> 
--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )

Reply via email to