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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 17:22   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
Смех

Цитата:
Вот они приводят исходный код
- они, это кто?

Цитата:
Есть входной и выходной параметр OutData: Parraysingle. Это символьный массив????
- числовой, смысл single -одинарной точности
...вообще, в конце статьи есть ссылки на ресурсы, опробуйте, все вопросы отпадут сами
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.10.2009, 17:55   #12
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

вот в том то все и дело..... что массив этот числовой.....
а я спрашиваю как из моего данного символьного массива сделать числовой.... или тогда как правильно считать данные из wav файла, чтобы массив был числовой....
world12_tk вне форума Ответить с цитированием
Старый 10.10.2009, 18:12   #13
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
Смех

вы мои сообщения, что не читаете? я ж ясно написал, смотрите ссылки- ресурсы к статье, но если лень, вот вам как правильно читать из wav файла:
Код:
function ReadWave(FileName: AnsiString) : TWaveResult;
var
  f             : TFileStream;
  wFileSize     : Cardinal;
  wChankSize    : Cardinal;
  ID            : array[0..3] of Char;
  Header        : TWaveHeaderChank;
  RealFileSize  : Cardinal;

Begin
  FillChar(Result, SizeOf(Result), 0);
  Try
    f := TFileStream.Create(FileName, fmOpenRead);
    f.Seek(0, soFromBeginning);
    f.ReadBuffer(ID[0], 4);       //читаем тип файла
    if String(ID) <> 'RIFF' then Begin      //Определяем тип файла
        Result.ERROR := IncorectFileFormat;
        f.Free;
        exit;
    end;

    f.ReadBuffer(wFileSize, 4);   //читаем размер файла
    //////////////////////////
 //Form1.olog.Lines.Add('FileSize ' + intToStr(wFileSize));
    {if f.size <> (wFileSize + 8)  //Определяем соответствие указанного размера
    then                          //и размера файла(на случай если был поврежден при
      Begin                       //передаче)
        Result.ERROR := FileCorrupt;
        f.Free;
        exit;
      end; }
    f.ReadBuffer(ID[0], 4);
      //////////////////////////
      //Form1.olog.Lines.Add(String(ID));
    if String(ID) <> 'WAVE' then begin   //Определяем формат файла
        Result.ERROR := IncorectFileFormat;
        f.Free;
        exit;
      end;
 
    wChankSize := 0;
    repeat                              //Ищем чанк формата
      f.Seek(wChankSize, soFromCurrent);//Пропускаем все дополнительные чанки
      f.ReadBuffer(ID[0], 4);           //Читаем идентификатор чанка
        //////////////////////////
      //Form1.olog.Lines.Add(String(ID));
      f.ReadBuffer(wChankSize, 4);   //Читаем размер чанка
      if wChankSize > High(integer)  //Проверяем размер загловка на разумность
      then                           //размера вероятно можно установить чило и
        Begin                        //меньше например 100
          Result.ERROR := DataError;
          f.Free;
          exit;
        end;
        //////////////////////////
        //Form1.olog.Lines.Add('chankSize ' + intToStr(wChankSize));
    until  (String(ID)='fmt ') or (String(ID)='data');
    if String(ID)='data'             //Проверяем найден ли заголовок формата
    then
      Begin
        Result.ERROR := HeaderError;
        f.Free;
        exit;
      end;
    f.ReadBuffer(Header, Min(wChankSize, SizeOf(TWaveHeaderChank))); //Читаем заголовок
      //////////////////////////               //меньше нашей структуры
      //Form1.olog.Lines.Add('wFormatTag '     + intToStr(Header.wFormatTag));
      //Form1.olog.Lines.Add('wChannels '      + intToStr(Header.wChannels));
      //Form1.olog.Lines.Add('wSamplesPerSec ' + intToStr(Header.wSamplesPerSec));
       result.wSamplePerSec:= Header.wSamplesPerSec;
      //Form1.olog.Lines.Add('wBlockAlign '    + intToStr(Header.wBlockAlign));
      //Form1.olog.Lines.Add('wBitsPerSample ' + intToStr(Header.wBitsPerSample));
   if wChankSize > SizeOf(TWaveHeaderChank)  //Смещаем указатель чтения в конец блока
    then                                      //нужно только для больших заголовков
      f.Seek(wChankSize - SizeOf(TWaveHeaderChank), soFromCurrent);

    //if wChankSize >= SizeOf(TWaveHeaderChank) //определяем расширенный ли заголовок или нет
    //then messagebox(0,'','',mb_ok);
      //////////////////////////
        //Form1.olog.Lines.Add('wcbSize '        + intToStr(Header.wcbSize));
    wChankSize := 0;
    repeat                              //Ищем чанк данных
      f.Seek(wChankSize, soFromCurrent);//Пропускаем все дополнительные чанки
      f.ReadBuffer(ID[0], 4);           //Читаем идентификатор чанка
        //////////////////////////
      //Form1.olog.Lines.Add(String(ID));
      f.ReadBuffer(wChankSize, 4);      //Читаем  размер чанка
        //////////////////////////
      //Form1.olog.Lines.Add('chankSize '    + intToStr(wChankSize));
    until  String(ID)='data';

    Result.ERROR           := noError;               //Заполняем структуру результата
    Result.wAvgBytesPerSec := Header.wAvgBytesPerSec;
    Result.wBitsPerSample  := Header.wBitsPerSample;
    Result.wChannels       := Header.wChannels;
    Result.Data := TMemoryStream.Create;
    Result.Data.Seek(0, soFromBeginning);
  Result.Data.Size := wChankSize;                 //Выделяем память под данные
    f.ReadBuffer(Result.Data.Memory^, wChankSize);  //Копируем данные в память
  Except
    Result.ERROR := ReadError;
  end;
  f.Free
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.10.2009, 18:12   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ИСПОЛЬЗОВАНИЕ!!!
Код:
var r : TWaveResult;
    i : integer;
    W1, W2 : ShortInt;
begin
 r:= ReadWave(s);
 chart1.Title.Text.Strings[0]:= 'File: ' + extractfilename(s) +
                                ' / Fd [Hz]= '  + floattostr(r.wSamplePerSec);
 r.Data.seek(0, soFromBeginning);
 for i := 1 to r.Data.Size div 2 do begin
  r.Data.readBuffer(W1,1);
  r.Data.readBuffer(W2,1);
  series3.Add(W1); // - ТУТ ВАШИ ДАННЫЕ
  series4.Add(W2)
 end;

 FFTQuad(series4,ser2,fftcnt,false); // ТУТ ДЕЛАЕМ СПЕКТР
еще раз напоминаю, смотрите исходники и все разъясниться
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.10.2009, 18:55   #15
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

pesi программа выдает значение true или false (1,0) почему не выводятся слова?
tanek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задания по паскалю Metall Помощь студентам 7 14.07.2009 09:40
4 задания по Паскалю. Евгений2 Помощь студентам 14 22.05.2009 15:18
4 задания по qBasic matsode Помощь студентам 11 11.05.2009 22:39
2 задания на множества Lirik18 Паскаль, Turbo Pascal, PascalABC.NET 4 01.05.2009 11:45