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

📄 aflibdata.cc

📁 一个共享源码的音频库2
💻 CC
📖 第 1 页 / 共 3 页
字号:
                     *dest_ptr++ = RIGHT(*orig_ptr++, 8)^0x80;                  }               }               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)^0x80;               }               _config.setSampleSize(AFLIB_DATA_8U);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            // Convert 16S to 16U            // Toggle sign bit            case AFLIB_DATA_16U:            {               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  short* orig_ptr = ( short *)_data;                  for (i = 0; i < data_length; i++)                  {                     *orig_ptr = swab_short(*orig_ptr);                     *orig_ptr ^= 0x8000;                     *orig_ptr = swab_short(*orig_ptr);                     orig_ptr++;                     // Maybe just this one will work faster                     // *orig_ptr++ = ^ 0x0080;                  }               }               else               {                  short* orig_ptr = ( short *)_data;                  for (i = 0; i < data_length; i++)                     *orig_ptr++ ^= 0x8000;               }               _config.setSampleSize(AFLIB_DATA_16U);            }            break;            // Convert from 16S to 32S            // Scale to 32-bit            case AFLIB_DATA_32S:            {               short* old_data = (short  *)_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;                  short* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                  {                     *dest_ptr = LEFT(*orig_ptr++, 16);                     *dest_ptr++ = swab_int(*dest_ptr);                  }               }               else               {                  int* dest_ptr = (int *)_data;                  short* orig_ptr = old_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 16);               }               // delete the old orig 16 bit data array               delete [] old_data;            }            break;            default:            {               cerr << "Software Error. Ilegal data size!" << endl;            }            break;         }      }      break;       case AFLIB_DATA_16U:      {         switch (data_size)         {            // Convert from 16U to 8S            // Scale to 8-bit and toggle sign bit            case AFLIB_DATA_8S:            {               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)^0x80;                  }               }               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)^0x80;               }               _config.setSampleSize(AFLIB_DATA_8S);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            // Convert from 16U to 8U            // Scale to 8-bit            case AFLIB_DATA_8U:            {               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_8U);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            // Convert 16U to 16S            // Toggle sign bit            case AFLIB_DATA_16S:            {               if (_config.getDataEndian() != getHostEndian())               {                  short* orig_ptr = (short *)_data;                  for (i = 0; i < data_length; i++)                  {                     *orig_ptr = swab_short(*orig_ptr);                     *orig_ptr ^= 0x8000;                     *orig_ptr = swab_short(*orig_ptr);                     orig_ptr++;                     // Maybe just this one will work faster                     // *orig_ptr++ = ^ 0x0080;                  }               }               else               {                  short* orig_ptr = (short *)_data;                  for (i = 0; i < data_length; i++)                     *orig_ptr++ ^= 0x8000;               }               _config.setSampleSize(AFLIB_DATA_16S);            }            break;            // Convert 16U to 32S            // Toggle sign bit            case AFLIB_DATA_32S:            {               unsigned short * old_data = (unsigned short *)_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 (_config.getDataEndian() != getHostEndian())               {                  unsigned short * orig_ptr = old_data;                  int * dest_ptr = (int *)_data;                  for (i = 0; i < data_length; i++)                  {                     /* TBD no I need to swab orig_ptr too ? */                     *dest_ptr = LEFT(*orig_ptr++, 16)^0x80000000 ;                     *dest_ptr++ = swab_int(*dest_ptr);                  }               }               else               {                  unsigned short * orig_ptr = old_data;                  int * dest_ptr = (int *)_data;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = LEFT(*orig_ptr++, 16)^0x80000000 ;               }               // delete the old orig 16 bit data array               delete [] old_data;            }            break;            default:            {               cerr << "Software Error. Ilegal data size!" << endl;            }            break;         }      }      break;      case AFLIB_DATA_32S:      {         switch (data_size)         {            case AFLIB_DATA_8S:            {               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  {                     int * orig_ptr = ( int *)_data;                     char* dest_ptr = ( char *)orig_ptr;                     for (i = 0; i < data_length; i++)                     {                        *orig_ptr = swab_int(*orig_ptr);                        *dest_ptr++ = RIGHT(*orig_ptr++, 24);                     }                  }               }               else               {                  int* orig_ptr = ( int *)_data;                  char* dest_ptr = ( char *)orig_ptr;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = RIGHT(*orig_ptr++, 24);               }               _config.setSampleSize(AFLIB_DATA_8S);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            case AFLIB_DATA_8U:            {               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  int* orig_ptr = ( int *)_data;                  char* dest_ptr = ( char *)orig_ptr;                  for (i = 0; i < data_length; i++)                  {                     *orig_ptr = swab_int(*orig_ptr);                     *dest_ptr++ = RIGHT(*orig_ptr++, 24)^0x80;                  }               }               else               {                  int* orig_ptr = ( int *)_data;                  char* dest_ptr = ( char *)orig_ptr;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = RIGHT(*orig_ptr++, 24)^0x80;               }               _config.setSampleSize(AFLIB_DATA_8U);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            case AFLIB_DATA_16S:            {               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  {                     int * orig_ptr = ( int *)_data;                     short* dest_ptr = ( short *)orig_ptr;                     for (i = 0; i < data_length; i++)                     {                        *orig_ptr = swab_int(*orig_ptr);                        *dest_ptr++ = RIGHT(*orig_ptr++, 16);                     }                  }               }               else               {                  int* orig_ptr = ( int *)_data;                  short* dest_ptr = ( short *)orig_ptr;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = RIGHT(*orig_ptr++, 16);               }               _config.setSampleSize(AFLIB_DATA_16S);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            case AFLIB_DATA_16U:            {               // IF different endians then swap bytes               if (_config.getDataEndian() != getHostEndian())               {                  int* orig_ptr = ( int *)_data;                  short* dest_ptr = ( short *)orig_ptr;                  for (i = 0; i < data_length; i++)                  {                     *orig_ptr = swab_int(*orig_ptr);                     *dest_ptr++ = RIGHT(*orig_ptr++, 16)^0x8000;                  }               }               else               {                  int* orig_ptr = ( int *)_data;                  short* dest_ptr = ( short *)orig_ptr;                  for (i = 0; i < data_length; i++)                     *dest_ptr++ = RIGHT(*orig_ptr++, 16)^0x8000;               }               _config.setSampleSize(AFLIB_DATA_16U);               _byte_inc = _config.getBitsPerSample() / 8;               _total_length = _config.getChannels() * _length * _byte_inc;            }            break;            default:            {               cerr << "Software Error. Ilegal data size!" << endl;            }            break;         }      }      break;       default:      {         cerr << "Software Error. Ilegal data size!" << endl;      }      break;   }}/*! \brief Converts data from one endian format to another.    This function will convert the data in this object to a different    endian layout. If the user passes the endian layout    that the data is currently in then nothing will be done.*/voidaflibData::convertToEndian(aflib_data_endian endian){   // IF already in correct format then just return   if (_config.getDataEndian() == endian)      return;   switch(_config.getSampleSize())   {      // Endian does not affect this size      case AFLIB_DATA_8S:      case AFLIB_DATA_8U:      {      }      break;      case AFLIB_DATA_16S:      case AFLIB_DATA_16U:      {         long long data_length, i;         short* orig_ptr = (short *)_data;         data_length = (long long)getLength() * (long long)_config.getChannels();         for (i = 0; i < data_length; i++)            *orig_ptr++ = swab_short(*orig_ptr);      }      break;      case AFLIB_DATA_32S:      {         long long data_length, i;         int * orig_ptr = (int *)_data;         data_length = (long long)getLength() * (long long)_config.getChannels();         for (i = 0; i < data_length; i++)            *orig_ptr++ = swab_int(*orig_ptr);      }      default:      {         cerr << "Software Error. Ilegal data size!" << endl;      }      break;   }   if (endian == AFLIB_ENDIAN_LITTLE)      _config.setDataEndian(AFLIB_ENDIAN_BIG);   else      _config.setDataEndian(AFLIB_ENDIAN_LITTLE);}

⌨️ 快捷键说明

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