Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Wave chunk   Найти похожие ветки 

 
DenKop ©   (2002-09-01 22:42) [0]

Состряпал простенький код чтения чанка вав файла, но в результате получаю файл след. содержания:
4
4
4
4
4
4
и так 44100 раз

А вот сам код:
procedure TForm1.Button3Click(Sender: TObject);
var
buf:integer;
FileStream1:TFileStream;
f:TextFile;
i:longint;
begin
AssignFile(f,"WaveChunk.txt");ReWrite(f);
FileStream1:=TFileStream.Create("1.wav",fmOpenRead);
try
FileStream1.Seek(SizeOf(TWaveHeader),soFromBeginning);
for i:=1 to 44100 do
begin
buf:=FileStream1.Read(Buf,SizeOf(integer));
WriteLn(f,inttostr(buf));
Application.ProcessMessages;
end;
Label1.Caption:="Complete";
finally
FileStream1.Free;
CloseFile(f);
end;
end;

Уважаемые мастера подскажите пожалуйста, что я делаю не правильно.


 
DenKop ©   (2002-09-01 22:44) [1]

И ещё, забыл уточнить пар-ры вав:
PCM 44100KHz 16bit stereo


 
Anatoly Podgoretsky ©   (2002-09-01 23:09) [2]

Вот это лишнее buf:=


 
MJH ©   (2002-09-02 03:31) [3]

гы...а с какого перепуг WriteLn
?
может ты ноборот сделаешь?
в файл звука записывай методом tfilestream.write()
и не забудь про хедер вавы....
вобщем почитай доку по ваве, сразу поймешь что к чему


 
DenKop ©   (2002-09-02 22:33) [4]


> Вот это лишнее buf:=

Протупил, согласен (Read возвр. кол-во прочит. байт). Всё понял, вопрос снят.


> гы...а с какого перепуг WriteLn
> ?
> может ты ноборот сделаешь?

Вот эти умничества действительно лишние, но ежели MJH ещё неизвестно, то напомню, что WriteLn пишет в файл переданное значение с переводом каретки, а иначе я в этом txt ниччо не разберу.


> в файл звука записывай методом tfilestream.write()

Пока вопрос стоит о чтении, а не о записи.



> и не забудь про хедер вавы....

Вот про это я действительно забыл, точнее помнил только о TWaveHeader.

Благодарю за помощь.


 
MJH ©   (2002-09-03 04:34) [5]

Вот эти умничества действительно лишние, но ежели MJH ещё неизвестно
понтования тоже ни к чему....
во-первых - я прочитал (наверное спросони) "записать"
во-вторых - данные хранятся в PCM формате следующим образом:
L,R,L,R,L,R и т.д., где L и R - SmallInt (или Short)
ты считываешь оба канала сразу, но так можно
далее

FileStream1.Read(Buf,4);
^^^^здесь была твоя ошибка, ты присваеваешь буфу размер и поэтому и получаешь 4
L:=LOWORD(buf);
R:=HIWORD(buf);
WriteLn(f,L);WriteLn(f,R);
как видишь, WriteLn() и Write() не нуждаются в переводе записываемой переменной в стринг


 
DenKop ©   (2002-09-04 17:41) [6]


> во-первых - я прочитал (наверное спросони) "записать"

У каждого свои трудности.

> как видишь, WriteLn() и Write() не нуждаются в переводе
> записываемой переменной в стринг

Это мелочи. Пишется автоматически, но ведь не в этом суть.

> понтования тоже ни к чему....

Согласен, но иногда это бывает полезным.


 
DenKop ©   (2002-09-04 17:43) [7]


> во-первых - я прочитал (наверное спросони) "записать"

У каждого свои трудности.

> как видишь, WriteLn() и Write() не нуждаются в переводе
> записываемой переменной в стринг

Это мелочи. Пишется автоматически, но ведь не в этом суть.

> понтования тоже ни к чему....

Согласен, но иногда это бывает полезным.



Страницы: 1 вся ветка

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
4-61886
Oleg_G
2002-11-05 22:30
2002.12.19
Вопрос в том, как можно разделить поток данных


1-61592
sasha_delphi
2002-12-10 12:23
2002.12.19
Чтение из EXCEL файлов.


8-61714
FreeMen
2002-09-02 08:05
2002.12.19
Как сделать полноэкранное окно?


1-61587
phantom2040
2002-12-10 08:59
2002.12.19
Работа со временем


1-61625
Riperr
2002-12-07 08:59
2002.12.19
Metods