19{
   20  uint8_t head;
   21  uint8_t SamplingRate;
   22  uint32_t TimeInfo;
   23 
   24  unsigned int ChannelMask() const
   25  {
   26    const static uint8_t mask = 0x60;
   27    return (mask & head) >> 5;
   28  }
   29 
   30  unsigned int Amplitude() const
   31  {
   32    const static uint8_t mask = 0x18;
   33    return (mask & head) >> 3;
   34  }
   35 
   36  bool Mark() const
   37  {
   38    const static uint8_t mask = 0x80;
   39    return mask & head;
   40  }
   41 
   42  unsigned int amplitude() const
   43  {
   44    switch (Amplitude())
   45    {
   46      case 1: return 16;
   47      case 2: return 24;
   48    }
   49    return 12;
   50  }
   51 
   52  unsigned int timeInfo() const
   53  {
   54    return ntohl(TimeInfo);
   55  }
   56 
   57  double samplingRate() const
   58  {
   59    const static double conv_factor = 1e6 / 128;
   60    return SamplingRate * conv_factor;
   61  }
   62 
   63  unsigned int audioWordSize() const
   64  {
   65    unsigned int sample_size_bit = amplitude();
   66 
   67    if (!ChannelMask())       
   68      sample_size_bit <<= 1;  
   69 
   70    const unsigned int size_bit = sample_size_bit + 8;
   71 
   73                                           
   74                                           
   75  }
   76 
   77};
static unsigned int roundUpPow2(unsigned int n, unsigned int multiple)