Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2013, 17:00   #1
thy13
Новичок
Джуниор
 
Регистрация: 12.08.2013
Сообщений: 1
По умолчанию Конвертер в Delphi

как на делфи исполнить конвертер из g.711 a-law 8 kHz mono в wav?
Код:
  // Функция чтения из файла импульсно-кодовой модуляции закон "А"
      for N:=0 to Size-1 do
      begin
        tempb := P^[N];
        tempb := ((not tempb) and $55) or (tempb and $AA) ;    // инверсия четных битов
        tempm := (tempb and $70) shr 4;                        // выделение порядка
        if tempm <> 0 then
        begin
          tempw := ((tempb and $0F) shl 1) + 32 ;  // выделение мантиссы
          tempw := tempw shl (tempm +2)            // восстановление абсолютной величины
        end
        else tempw := (tempb and $0F) shl 4;
        if (tempb and $80) <> 0                     // восстановление знака числа
            then POut^[N] := -tempw
            else POut^[N] := tempw;
      end;
      //  Функция конвертации закончена
может быть в чем то ошибка?

Последний раз редактировалось Stilet; 12.08.2013 в 17:32.
thy13 вне форума Ответить с цитированием
Старый 04.09.2013, 11:36   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

в чем ошибка не знаю, вот относительно рабочий код:

Код:
// -- --
procedure alaw_expand(lseg: long; logbuf: pointer; linbuf: pInt16Array);
var
  n, ix, mant, iexp: int;
begin
  for n := 0 to lseg - 1 do begin
    //
    ix := pArray(logbuf)[n] xor $0055;	//* re-toggle toggled bits */
    //
    ix := ix and $007F;	//* remove sign bit */
    iexp := ix shr 4;	//* extract exponent */
    mant := ix and $000F;	//* now get mantissa */
    if (iexp > 0) then
      mant := mant + 16;	//* add leading '1', if exponent > 0 */
    //
    mant := (mant shl 4) + $0008;	//* now mantissa left justified and */
                                                //* 1/2 quantization step added */
    if (iexp > 1) then	//* now left shift according exponent */
      mant := mant shl (iexp - 1);
    //
    if (pArray(logbuf)[n] > 127) then	//* invert, if negative sample */
      linbuf[n] := mant
    else
      linbuf[n] := -mant;
  end;
end;
pInt16Array - указатель на массив int16
pArray - указатель на массив байт
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер VanHelsing C# (си шарп) 6 17.10.2011 14:25
Конвертер C++ -> delphi и наоборот? VintProg Свободное общение 12 23.08.2010 21:10
конвертер в SCORM 2004 прога на DELPHI веня Общие вопросы Delphi 3 24.04.2009 14:55
конвертер KORT Свободное общение 3 27.08.2007 01:47
конвертер malevich Общие вопросы Delphi 10 14.02.2007 23:19