Stores Scale factors for subbands and subframes.
Member of Audio Frame
The task is to encode up to 96 scale factors for the current frame. These are SCF0 . . . 2 (0 . . . 31) in the following diagram:
| previous Frame | current Frame | ||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | 
Only SCF's for subbands which can carry subband samples != 0 due to the allocation field are transmitted.
First step is decode a value via a huffman table. The result with select the prediction strategy:
| c = DecodeHuffman (table11) | |
| if (c < 64) | |
| on (c % 4) | Subframe 0 Scalefactors SCF0 () encoded using . . . | 
| 0 | spectral prediction | 
| 1 | mixed prediction | 
| 2 | temporal prediction | 
| 3 | temporal prediction + LPC | 
| on (c / 4 % 4) | Subframe 1 Scalefactors SCF1 () encoded using . . . | 
| 0 | spectral prediction | 
| 1 | mixed prediction | 
| 2 | temporal prediction | 
| 3 | temporal prediction + LPC | 
| on (c / 16) | Subframe 2 Scalefactors SCF2 () encoded using . . . | 
| 0 | spectral prediction | 
| 1 | mixed prediction | 
| 2 | temporal prediction | 
| 3 | temporal prediction + LPC | 
| if c == 64 | |
| for each subband | Vector book coded Scalefactors SCF0 . . . 2 () encoded using . . . temporal prediction | 
| if c == 65 | |
| for each subband | Vector book coded Scalefactors SCF0 . . . 2 () encoded using . . . temporal prediction + LPC | 
Stationary Frame:
| 0 | 1 bit | 
| for each subband n: Subband Scalefactors SCF(n) | ? bit | 
Non-stationary Frame:
| 1 | 1 bit | 
| Subframe Scalefactors SCF0() | ? bit | 
| Subframe Scalefactors SCF1() | ? bit | 
| Subframe Scalefactors SCF2() | ? bit | 
| previous Frame | current Frame | ||||||||||||
| 
 | 
 | 
   int   code;
   code = Decode_Huffman (table1);
   if ( code < 125 ) {                                       // 3 differential SCFs using a vector codebook
       SCF  [0] [band] = SCF_last [band] + code % 5 - 2;
       SCF  [1] [band] = SCF  [0] [band] + code / 5 % 5 - 2;
       SCF  [2] [band] = SCF  [1] [band] + code /25 - 2;
       SCF_last [band] = SCF  [2] [band];
       predict  [band] = false;
   }
   else if ( code < 134 ) {                                  // 1 differential SCF-block using a vector codebook, prediction
       SCF  [0] [band] = SCF_last [band] + code % 5 - 4;
       SCF  [1] [band] = SCF  [0] [band];
       SCF  [2] [band] = SCF  [1] [band];
       SCF_last [band] = SCF  [2] [band];
       predict  [band] = true;
   }
   else {                                                       // 3 differential SCFs using normal huffman coding
       SCF  [0] [band] = SCF_last [band] + Decode_Huffman (table2);
       SCF  [1] [band] = SCF  [0] [band] + Decode_Huffman (table2);
       SCF  [2] [band] = SCF  [1] [band] + Decode_Huffman (table2);
       SCF_last [band] = SCF  [2] [band];
       predict  [band] = true;
   }
| Last Subframe | Current Subframe | 
| SCFprev ( 0) | SCFcurr ( 0) | 
| SCFprev ( 1) | SCFcurr ( 1) | 
| SCFprev ( 2) | SCFcurr ( 2) | 
| SCFprev ( 3) | SCFcurr ( 3) | 
| SCFprev ( 4) | SCFcurr ( 4) | 
| SCFprev ( 5) | SCFcurr ( 5) | 
| SCFprev ( 6) | SCFcurr ( 6) | 
| SCFprev ( 7) | SCFcurr ( 7) | 
| SCFprev ( 8) | SCFcurr ( 8) | 
| SCFprev ( 9) | SCFcurr ( 9) | 
| SCFprev (10) | SCFcurr (10) | 
| SCFprev (11) | SCFcurr (11) | 
| SCFprev (12) | SCFcurr (12) | 
| SCFprev (13) | SCFcurr (13) | 
| SCFprev (14) | SCFcurr (14) | 
| SCFprev (15) | SCFcurr (15) | 
| SCFprev (16) | SCFcurr (16) | 
| SCFprev (17) | SCFcurr (17) | 
| SCFprev (18) | SCFcurr (18) | 
| SCFprev (19) | SCFcurr (19) | 
| SCFprev (20) | SCFcurr (20) | 
| SCFprev (21) | SCFcurr (21) | 
| SCFprev (22) | SCFcurr (22) | 
| SCFprev (23) | SCFcurr (23) | 
| SCFprev (24) | SCFcurr (24) | 
| SCFprev (25) | SCFcurr (25) | 
| SCFprev (26) | SCFcurr (26) | 
| SCFprev (27) | SCFcurr (27) | 
| SCFprev (28) | SCFcurr (28) | 
| SCFprev (29) | SCFcurr (29) | 
| SCFprev (30) | SCFcurr (30) | 
| SCFprev (31) | SCFcurr (31) | 
Spectral Predictor:
   static signed char  Tab  [32] = { ?, -5, -2, -1, -1, -1, -1, -1, -1 };
   Huffman_Table*      Huff [32] = { ?, tab1, tab2, tab2, tab2, tab3, tab3, tab3, tab3, tab3, tab3, tab3, tab4, ... };
   int                 code;
   int                 band;
   int                 tmp;
   tmp       = Read_Bits (7);
   SCF [][0] = tmp;
   for ( band = 1; band <= Max_Band; band++ ) {
       SCF [][band] = tmp += Decode_Huffman (Huff[band]) + Tab [band];
   }
Mixed Spectral + Temporal Predictor:
   int                 code;
   int                 band;
   SCF [][0] = SCF_last [0] + Decode_Huffman (table);   // ???
   for ( band = 1; band <= Max_Band; band++ ) {
       SCF [][band] =  ( ( SCF_last [band] + SCF [][band-1] ) >> 1 ) + Decode_Huffman (table);
   }
Temporal Predictor:
   int                 code;
   int                 band;
   for ( band = 0; band <= Max_Band; band++ ) {
       SCF [][band] =  SCF_last [band] + Decode_Huffman (table);
   }
![[eMail]](../img/E-Mail.gif) 
      ![[Addr]](../img/SPAM.png)