[an error occurred while processing this directive]
Вот хороший работающий вариант, компрессор и декомпрессор(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Анатоль 16 сентября 2005 г. 15:36
В ответ на: Посоветуте плиз как проще на PICе (+) отправлено Digital 16 сентября 2005 г. 13:57

Немного упростил свой, чтоб понятней было, убрал всякую работу с буферами и указателями. Переведешь на АСМ и будет совсем быстро работать.

//------uLaw--------------------------
//
//
const unsigned char NumBits[256]={
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
};

unsigned char Sign, Exponent, Mantissa,uLawData;
signed int PCMData;


void Compress () // ulaw compressing
{
Sign=0;
if (PCMData<0) PCMData=-PCMData;
else Sign=0x80;
PCMData+=132;
if (PCMData<0) PCMData=32767;
Exponent=NumBits[(PCMData>>7)]-1;
Mantissa=(PCMData>>(Exponent+3))&0x0f;
CSound=~(Sign|(Exponent<<4)|Mantissa);
}

void Decompress()
{
uLawData=0x80;
Exponent=(uLawData>>4)&0x07;
Mantissa=(uLawData&0x0f)+16;
PCMData=(Mantissa<<(Exponent+3))-132;
if (!(uLawData&0x80)) PCMData=-PCMData;
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru