СообЧа > База Знаний > Программирование > Delphi

Вопрос

Мне нужно загрузить файл с расширением Wav и взять из него для начала значения сигналов в единицу времени и на их основе строить графики и по полученным данным проводить расчеты… Только вот не очень у меня получается. Для начала я нашел формат Wav

({{!> http://graphics.cs.msu.su/courses/cg02b/assigns/hw-2/help/wavfmt.htm<!}} ) только вот проблема в том, что я вообще не могу понять эту таблицу и как с ней работать, как считывать данные из файла, нужные мне данные, мне ничего не понятно кроме общих слов, «от начала на столько то» а вот на сколько, и как это сколько отступить не знаю… неполучается…

Что это ch, ah, h и как с ними работать…

… Вот, что я наделал:

var Form1: TForm1;

i, i1:integer; implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var f:file;

buf:char;

begin

//i:=0;

assignfile(f,'1.wav');

reset(f, 1); seek(f, i);

BlockRead(f, buf, 1);

memo1.Lines.Add(buf);

closefile(f);

i:=i+1;

end;

procedure TForm1.Button2Click(Sender: TObject);

var f:file;

buf:integer;

p:^integer;

begin

//i:=0;

assignfile(f,'1.wav');

reset(f, 1);

seek(f, i1);

BlockRead(f, buf, 1);

p:=@buf;

memo2.Lines.Add(inttostr(p^));

closefile(f);

i1:=i1+1;

end;

Данные то я прочитал, только вот проблема то в том, что я явно не то читаю, что мне нужно, когда читаю по символьно, то выводит непонятно что, а когда предпологаю чтение чисел у меня всегда идут, какие-то цифры, даже там где по идее должны быть буквы… то что там указатели есть, так это я подумал может там храняться указатели на нужные мне

значения пытался их достать, глупость конечно… но раз уж набрал так пусть остается

Буду благодарен за любую помощь, можно пример кода, можно ссылочку, только чтобы уж сдвинуться с мертвой точки…

Ответ

Если подумать…

Тема вообще очень большая и примеры тебе я сейчас состряпать не смогу, но общее направление дать могу. Использовать тебе надо WinAPI, а точнее следующие разделы справки:

Waveform Audio Reference

здесь есть следующая структура

typedef struct {

WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

WORD wBitsPerSample;

WORD cbSize;

} WAVEFORMATEX;

Из нее можно узнать, сколько байт в секунду (nAvgBytesPerSec, wBitsPerSample), частоту дискретизации (nSamplesPerSec).

Далее надо использовать следующие функции:

HMMIO mmioOpen(

LPSTR szFilename,

LPMMIOINFO lpmmioinfo,

DWORD dwOpenFlags

); //открываем файл

LONG mmioRead(

HMMIO hmmio,

HPSTR pch,

LONG cch

); //читаем блок данных из файла

Все это есть в файле справки «Microsoft Multimedia Programmer's Reference»

Вот, это основное, дальше придется самому.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация