Delphi - Delphi, wav
-
noname00.pas
Re: Delphi - Delphi, wav
А какой тип у этого wav, как его связать с переменной, как считывать данные из него я ничего не могу сделать... только сильно не пинайте, в книгах, которые у меня есть такого нету, помочь, так тоже никого на кафедре, программирующего не Delphi нет, вся информация через интернет...
-
Roman Go
Re: Delphi - Delphi, wav
Код:
Данные то я прочитал, только вот проблема то в том, что я явно не то читаю, что мне нужно, когда читаю по символьно, то выводит непонятно что, а когда предпологаю чтение чисел у меня всегда идут, какие-то цифры, даже там где по идее должны быть буквы... то что там указатели есть, так это я подумал может там храняться указатели на нужные мне значения пытался их достать, глупость конечно... но раз уж набрал так пусть остается
возможно я не с того конца начал, для начала я не пойму что это за формат, [url=http://*http://graphics.cs.msu.su/courses/cg02b/assigns/hw-2/help/wavfmt.htm]http://*http://graphics.cs.msu.su/co...elp/wavfmt.htm[/url] мне ничего не понятно кроме общих слов, "от начала на столько то" а вот на сколько, и как это сколько отступить не понимаю... неполучается... Что это ch, ah, h и как с ними работать...
[s]Исправлено: Roman Go, 6:37 10-12-2002[/s]
Код: Выделить всё
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;Данные то я прочитал, только вот проблема то в том, что я явно не то читаю, что мне нужно, когда читаю по символьно, то выводит непонятно что, а когда предпологаю чтение чисел у меня всегда идут, какие-то цифры, даже там где по идее должны быть буквы... то что там указатели есть, так это я подумал может там храняться указатели на нужные мне значения пытался их достать, глупость конечно... но раз уж набрал так пусть остается
возможно я не с того конца начал, для начала я не пойму что это за формат, [url=http://*http://graphics.cs.msu.su/courses/cg02b/assigns/hw-2/help/wavfmt.htm]http://*http://graphics.cs.msu.su/co...elp/wavfmt.htm[/url] мне ничего не понятно кроме общих слов, "от начала на столько то" а вот на сколько, и как это сколько отступить не понимаю... неполучается... Что это ch, ah, h и как с ними работать...
[s]Исправлено: Roman Go, 6:37 10-12-2002[/s]
-
Roman Go
Re: Delphi - Delphi, wav
Код:
Вот этот кусочек кода читает данные, чтение начинается сразу после индификатора data (+4 байта отведенных под размер области данных).
Читает, то он читает и даже рисунок похожий получается, но данные я читаю не те, дело в том что у меня есть программка читающая wav файлы и если я открываю один и тот же файл своей программкой и ей я получаю разные результаты.
Число каналов - 1, Число байт для представления одного отсчета - 2, разрядность - 16. Это параметры файла на котором я эксперементирую, дело в том что не один из них я не учитываю, ибо не знаю как это сделать.
Цитата:
Число байт для представления одного отсчета - 2
А я читаю по четыре байта, а если читаю по 2 то получаю абсолютно неправильный результат. К тому же мой код дает ровно половину от тех значений, которые записанны в файле
как учесть при чтение разрядность, число байт для чтения, число каналов...
Добавлено:
Что такое полное слово? Как прочитать старший и младший байт, и вообще имеет ли это какое-либо отношение к тому что я пытаюсь сделать?
Добавлено:
Цитата:
Формат звуковых данных с дискретностью 16 бит выглядит аналогично. Для монофонического сигнала данные хранятся в массиве 16-битовых слов.
Один байт - 8 бит, а я таки читаю по четыре байта.
Цитата:
Для стерео-фонического используется массив двойных слов, причем младшему слову соот-ветствует левый канал, а старшему - правый.
Код: Выделить всё
while not eof(f) do
begin
blockread(f,buf,sizeof(buf));
setLength(data, length(data)+1);
data[i]:=buf;
inc(i);
end;
closefile(f);Вот этот кусочек кода читает данные, чтение начинается сразу после индификатора data (+4 байта отведенных под размер области данных).
Читает, то он читает и даже рисунок похожий получается, но данные я читаю не те, дело в том что у меня есть программка читающая wav файлы и если я открываю один и тот же файл своей программкой и ей я получаю разные результаты.
Число каналов - 1, Число байт для представления одного отсчета - 2, разрядность - 16. Это параметры файла на котором я эксперементирую, дело в том что не один из них я не учитываю, ибо не знаю как это сделать.
Цитата:
Число байт для представления одного отсчета - 2
А я читаю по четыре байта, а если читаю по 2 то получаю абсолютно неправильный результат. К тому же мой код дает ровно половину от тех значений, которые записанны в файле
как учесть при чтение разрядность, число байт для чтения, число каналов...Добавлено:
Что такое полное слово? Как прочитать старший и младший байт, и вообще имеет ли это какое-либо отношение к тому что я пытаюсь сделать?
Добавлено:
Цитата:
Формат звуковых данных с дискретностью 16 бит выглядит аналогично. Для монофонического сигнала данные хранятся в массиве 16-битовых слов.
Один байт - 8 бит, а я таки читаю по четыре байта.

Цитата:
Для стерео-фонического используется массив двойных слов, причем младшему слову соот-ветствует левый канал, а старшему - правый.