⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aflibdata.cc

📁 一个共享源码的音频库2
💻 CC
📖 第 1 页 / 共 3 页
字号:
         max_value = 32768;      break;      case AFLIB_DATA_16U:         min_value = 0;         max_value = 65536;      break;      case AFLIB_DATA_32S:         min_value = -2147483646;         max_value = 2147483647;      break;      default:         min_value = 0;         max_value = 0;      break;   }}voidaflibData::setHostEndian(){   // This private function is called from constructors and gets the endian of   // the platform this this object is currently running on.   unsigned short seven = 7;   unsigned char * end_test;   end_test = (unsigned char *)&seven;   if (end_test[0] == seven)      _endian = AFLIB_ENDIAN_LITTLE;   else      _endian = AFLIB_ENDIAN_BIG;}/*! \brief Returns endian state of this computer platform.*/aflib_data_endianaflibData::getHostEndian() const{   return (_endian);}voidaflibData::init(){   delete [] (unsigned char *)_data;   _data = NULL;   allocate();}voidaflibData::allocate(){   // This will allocate a new _data array without deleting any previous _data.   _total_length = _config.getChannels() * _length * _byte_inc;   _data = new unsigned char [_total_length];   if (_data == NULL)   {      cerr << "Error. Out of memory" << endl;   }   else   {      _initialized = TRUE;   }}/*! \brief This will zero all audio data in this object.*/voidaflibData::zeroData(){   // This function will cause the data to be zeroed.   if (_data)      memset(_data, 0, _total_length);}/*! \brief Convert data from one data size to another.    This function will convert the data in this object to a different    size. It will rescale the data. If the user passes the data size    that the data is currently in then nothing will be done.*/voidaflibData::convertToSize(aflib_data_size data_size){   register long long data_length, i;   // IF already in correct format then just return   if (_config.getSampleSize() == data_size)      return;   data_length =  getLength() * _config.getChannels() ;   // Convert to new format   switch(_config.getSampleSize())   {      case AFLIB_DATA_8S:      {         switch (data_size)         {            // Convert from 8S to 8U            case AFLIB_DATA_8U:            {               _config.setSampleSize(AFLIB_DATA_8U);               {                  char* orig_ptr = (char *)_data;                  for (i = 0; i < data_length; i++)                     *orig_ptr++ ^= 0x80;               }            }            break;            // Convert from 8S to 16S            case AFLIB_DATA_16S:            {               char* old_data = (char  *)_data;               // Configure new 16 bit data               _config.setSampleSize(AFLIB_DATA_16S);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  short* dest_ptr = (short *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                  {                     *dest_ptr = LEFT(*orig_ptr++, 8);                     *dest_ptr++ = swab_short(*dest_ptr);                  }               }               else               {                  short* dest_ptr = (short *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 8);               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            // Convert from 8S to 16U            case AFLIB_DATA_16U:            {               char* old_data = (char  *)_data;               // Configure new 16 bit data               _config.setSampleSize(AFLIB_DATA_16U);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  short* dest_ptr = (short *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                  {                     // Scale then toggle sign bit                     *dest_ptr = LEFT(*orig_ptr++, 8)^0x8000;                     *dest_ptr++ = swab_short(*dest_ptr);                  }               }               else               {                  short* dest_ptr = (short *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                     // Scale then toggle sign bit                     *dest_ptr++ = LEFT(*orig_ptr++, 8)^0x8000;               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            // Convert from 8S to 32S            case AFLIB_DATA_32S:            {               char* old_data = (char  *)_data;               // Configure new 32 bit data               _config.setSampleSize(AFLIB_DATA_32S);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  int* dest_ptr = (int *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                  {                     *dest_ptr = LEFT(*orig_ptr++, 24);                     *dest_ptr++ = swab_int(*dest_ptr);                  }               }               else               {                  int* dest_ptr = (int *)_data;                  char* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 24);               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            default:            {               cerr << "Software Error. Ilegal data size!" << endl;            }            break;         }      }      break;       case AFLIB_DATA_8U:      {         switch (data_size)         {            // Convert from 8U to 8S            case AFLIB_DATA_8S:            {               _config.setSampleSize(AFLIB_DATA_8S);               {                  char* orig_ptr = (char *)_data;                  for (i = 0; i < data_length; i++)                     // Toggle sign bit                     *orig_ptr++ ^= 0x80;               }            }            break;            // Convert from 8U to 16S            case AFLIB_DATA_16S:            {               char* old_data = ( char  *)_data;               // Configure new 16 bit data               _config.setSampleSize(AFLIB_DATA_16S);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  char* orig_ptr = old_data;                  short* dest_ptr = (short *)_data;                  for (i = 0; i < data_length; i++)                  {                     *dest_ptr = LEFT(*orig_ptr++, 8)^0x8000 ;                     *dest_ptr++ = swab_short(*dest_ptr);                  }               }               else               {                  char* orig_ptr = old_data;                  short* dest_ptr = (short *)_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 8)^0x8000 ;               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            // Convert from 8U to 16U            case AFLIB_DATA_16U:            {               unsigned char* old_data = (unsigned char  *)_data;               // Configure new 16 bit data               _config.setSampleSize(AFLIB_DATA_16U);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               {                  // IF different endians then swap bytes                  if (_config.getDataEndian() != getHostEndian())                  {                     unsigned short* dest_ptr = ( unsigned short *)_data;                     unsigned char* orig_ptr = old_data;                     for (i = 0; i < data_length; i++)                     {                        *dest_ptr = LEFT(*orig_ptr++, 8);                        *dest_ptr++ = swab_short(*dest_ptr);                     }                  }                  else                  {                     unsigned short* dest_ptr = ( unsigned short *)_data;                     unsigned char* orig_ptr = old_data;                     for (i = 0; i < data_length; i++)                        *dest_ptr++ = LEFT(*orig_ptr++, 8);                  }               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            // Convert from 8U to 32S            case AFLIB_DATA_32S:            {               char* old_data = ( char  *)_data;               // Configure new 32 bit data               _config.setSampleSize(AFLIB_DATA_32S);               _byte_inc = _config.getBitsPerSample() / 8;               // allocate new array without destroying old data               allocate();               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  char* orig_ptr = old_data;                  int* dest_ptr = (int*)_data;                  for (i = 0; i < data_length; i++)                  {                     *dest_ptr = LEFT(*orig_ptr++, 24)^0x80000000 ;                     *dest_ptr++ = swab_int(*dest_ptr);                  }               }               else               {                  char* orig_ptr = old_data;                  int* dest_ptr = (int*)_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 24)^0x80000000 ;               }               // delete the old orig 8 bit data array               delete [] old_data;            }            break;            default:            {               cerr << "Software Error. Ilegal data size!" << endl;            }            break;         }      }      break;       case AFLIB_DATA_16S:      {         switch (data_size)         {            // Convert from 16S to 8S            // Scale to 8-bit            case AFLIB_DATA_8S:            {               // IF different endians then swap bytes         	   if (_config.getDataEndian() != getHostEndian())               {                  {   	           	     short* orig_ptr = ( short *)_data;                     char* dest_ptr = ( char *)orig_ptr;                     for (i = 0; i < data_length; i++)                     {                        *orig_ptr = swab_short(*orig_ptr);                        *dest_ptr++ = RIGHT(*orig_ptr++, 8);                     }                  }               }               else               {                  short* orig_ptr = ( short *)_data;                  char* dest_ptr = ( char *)orig_ptr;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = RIGHT(*orig_ptr++, 8);               }               _config.setSampleSize(AFLIB_DATA_8S);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            // Convert from 16S to 8U            // Scale to 8-bit and toggle sign bit            case AFLIB_DATA_8U:            {      	       // IF different endians then swap bytes         	   if (_config.getDataEndian() != getHostEndian())               {                  short* orig_ptr = ( short *)_data;                  char* dest_ptr = ( char *)orig_ptr;                  for (i = 0; i < data_length; i++)                  {                     *orig_ptr = swab_short(*orig_ptr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -