-
пищю пример как можно по hex адресу вытянуть строку
-
-
щас буду разбираться, проблемно что нужно под линукс ӕто сделать ((
-
> проблемно что нужно под линукс ӕто сделать
Не вижу никаки проблем в этом)
-
всетакие не получается прочитать хоть какуето информацию с midi\kar, все из за ӕтого линукса, на винде получилосяб уже!! ((((((
-
> все из за ӕтого линукса
Ах этот "гадкий линукс" !) Вечно он виноват, вечно палки в колеса велосипедистам вставляет !)
> не получается прочитать хоть какуето информацию
Показывай как пытался ..
-
под линукс не писал ничего раньше, вот по ӕтому ... использую lazarus В общем пытался сделать по ссылке которую вы кидали, мудрували и все в пустую открывал файл так
var
midiFile: file of byte;
begin
AssignFile(midiFile, '/windows/C/paketu/Kim.mid');
FileMode := 0;
Reset(midiFile);
CloseFile(midiFile);
end;
дальше немогу с ним что-то сделать, даже вытянуть информацию об авторе мне бы хоть какойто рабочий пример как читать данные, воспроизводить сам файл мне не нужно описание протокола на русском нашел http://last.h16.ru/protokol/prot.shtml
-
> открывал файл так
> дальше немогу с ним что-то сделать
Так ты ж его открыл и тут же закрыл ! см. CloseFile(midiFile); Или что понимать под "дальше не могу" ? Показывай это самое "дальше" и комментируй что в этом "дальше" ты не можешь .. > как читать данные
А что, в Лазаре разве класс TFileStream отсутствует ? Насколько мне известно, FPC поддерживает этот класс: http://www.freepascal.org/docs-html/rtl/classes/tfilestream.htmlА также имеется класс TMemoryStream http://www.freepascal.org/docs-html/rtl/classes/tmemorystream.htmlкоторый позволяет загрузить файл методом LoadFromFile И вообще http://www.freepascal.org/docs-html/fcl/index.htmlматчасть нужно знать !) > описание протокола на русском нашел
Это ты не в тот огород полез) MIDI-протокол, хоть и имеет прямое отношение к формату и содержимому файлов в форматах SMF/MID/KAR, нужен для управления MIDI-совместимыми устройствами. А ты сам сказал, что никакими MIDI-устройствами ты управлять не собираешься..
-
еще вопрос! в лазарусе не хочет компилить ӕтот код
fst.Seek(4, spBegin); fst.Seek(1, spCurrent);
fst.Seek(1, spCurrent);
ему ненравится spBegin, spCurrent, spCurrent использую TMemoryStream чем их можно заменить и что они выполняют (за что отвечают)???
-
разобрался, заменил их на soFromBeginning , soFromCurrent
-
-
Так толком и не разобрался! текст достать смох с kar файла, а вот время по которому оно отображается нет, и снова ступор! (((((((( помогите!!!!!!!!!!!!
-
Показывай код ..
-
Листинг Unit1----------------------------------------------------------------
type
TCustomer = Record
greep : String[50];
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
STF_text : string;
STF_file : text;
tel : byte; trk : word;
OK : boolean;
nr : byte;
tijd : Longint;
i2:integer=1;
implementation
procedure Read_Parameters;
begin
SourceText := '/windows/C/paketu/Amore_no.kar'; STF_Text := '/windows/C/12.txt';
Assign(SourceFile, SourceText);
Reset(SourceFile, 1);
if IOresult <> 0 then
begin
Halt;
end;
AssignFile(STF_File, STF_Text);
Rewrite(STF_File);
end;
procedure verwerk_tekst;
var
customer : TCustomer;
i, j : byte;
begin
R := R + 2;
tel := Get_Byte(R);
Aantal := Aantal - Longint(tel) - 2;
customer.greep[0] := char(tel);
for k := 1 to tel do
begin
R := R + 1;
nr := Get_Byte(R);
customer.greep[k] := char(nr);
inc(i2);
form1.StringGrid1.RowCount:=i2+5;
form1.StringGrid1.Cells[1,i2]:= Utf8ToAnsi(customer.greep);
end;
if customer.greep[1] = '\' then
begin
customer.greep := '/';
Writeln(STF_file);
end;
if customer.greep[1] = '/' then
begin
customer.greep[0] := char(tel-1);
for k := 2 to tel do
customer.greep[k-1] := customer.greep[k];
Writeln(STF_file);
Write(STF_file,Utf8ToAnsi(customer.greep));
Exit;
end;
if (customer.greep[1] = '@') and (customer.greep[2]<>'T') then Exit;
if (customer.greep[1] = '@') then
begin
customer.greep[0] := char(tel-2);
for k := 3 to tel do
customer.greep[k-2] := customer.greep[k];
Writeln(STF_file,customer.greep);
Exit;
end;
i := 1;
for k := 2 to tel do
begin
i := i + 1;
if (customer.greep[i] = ' ') or (customer.greep[i] = '-') then
begin
for j := i to tel do
customer.greep[tel-j+i+1] := customer.greep[tel-j+i];
customer.greep[i] := '\';
i := i + 1;
tel := tel + 1;
end;
end;
customer.greep[0] :=char(i);
if customer.greep[1] = char(' ') then
begin
Write(STF_file,customer.greep);
end
else
begin
Write(STF_file,'_'+customer.greep);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Read_Parameters;
Read_MidiFile;
R := 1;
Check_MidiFile_Header;
if soort <> 1 then
begin
Halt;
end;
Write('# bytes =');
for trk := 1 to tracks do
begin
Check_Track_Header;
if trk-1 <> 2 then
begin
R := R + Aantal;
Continue;
end;
while Aantal > 0 do
begin
tijd := Get_Delta_Time;
OK := New_Status;
kind := (status shr 4);
nr := Get_Byte(R+1);
if kind = 15 then
if (status=$FF) and (nr=1) then
verwerk_tekst
else tel := byte(Skips_Meta_Event)
else tel := Skips_Midi_Event;
if Aantal <= 0 then End_of_Track;
end;
end;
Writeln;
if R < Gelezen then Writeln('Not at EOF');
if R > Gelezen then Writeln('Beyond EOF');
Writeln(STF_file);
CloseFile(STF_file);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
st:string[1];
myFile : TextFile;
text1: string;
begin
AssignFile(myFile, '/windows/C/12.txt');
Reset(myFile);
while not Eof(myFile) do
begin
ReadLn(myFile, text1);
ShowMessage(text1);
end;
end;
-
И где здесь собственно "доставание времени" ?
-
-
Понятно. Ну так что конкретно не работает в этом коде ?
-
в коде все выводит, незнаю как сделать что бы достать время для вывода текста, как караоке!!!!??
-
Откуда достать-то ?
-
Я понимаю вы подержуете форум, что бы он не заснул, но я всетаки надеюсь услышать ответы людей которые уже сталкивались с ӕтой темой или знают как помочь!
|