Главная страница
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.016 c
1-61630
DJ_Sedoy2
2002-12-07 11:14
2002.12.19
Второе дело. Картинку в popup menu или как?


3-61410
SiJack
2002-11-29 09:33
2002.12.19
Referential Integrity


6-61728
delpher_gray
2002-10-20 17:51
2002.12.19
Передача данных через сокеты


1-61621
Анна
2002-12-06 16:31
2002.12.19
использование dll C++ в Delphi


14-61805
Axis_of_Evil
2002-11-27 12:47
2002.12.19
Общедельфийский рейтинг музыки