Форум: "Media";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Media";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c