Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Wave chunk [D5, WinXP]


DenKop ©   (2002-09-01 22:42:00) 

Состряпал простенький код чтения чанка вав файла, но в результате получаю файл след. содержания:
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-04 17:43:00) [1]


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

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

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

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

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

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


DenKop   (2002-09-04 17:41:00) [2]


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

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

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

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

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

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


MJH   (2002-09-03 04:34:00) [3]

Вот эти умничества действительно лишние, но ежели 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-02 22:33:00) [4]


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

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


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

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


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

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



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

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

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


MJH   (2002-09-02 03:31:00) [5]

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


Anatoly Podgoretsky   (2002-09-01 23:09:00) [6]

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


DenKop   (2002-09-01 22:44:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо