Конференция "Media" » Работа с .kar файлом??? [D3, D4, D5, D6, D7]
 
  • skiner © (10.07.09 11:03) [20]
    пищю пример как можно по hex адресу вытянуть строку
  • Сергей М. © (10.07.09 11:18) [21]
    В помощь вытягивающему:

    http://www.torry.net/vcl/mmedia/audio/fbmidiplay.zip
  • skiner © (10.07.09 11:51) [22]
    щас буду разбираться, проблемно что нужно под линукс ӕто сделать ((
  • Сергей М. © (10.07.09 12:01) [23]

    > проблемно что нужно под линукс ӕто сделать


    Не вижу никаки проблем в этом)
  • skiner © (10.07.09 15:05) [24]
    всетакие не получается прочитать хоть какуето информацию с midi\kar, все из за ӕтого линукса, на винде получилосяб уже!! ((((((
  • Сергей М. © (10.07.09 15:10) [25]

    > все из за ӕтого линукса


    Ах этот "гадкий линукс" !)
    Вечно он виноват, вечно палки в колеса велосипедистам вставляет !)


    > не получается прочитать хоть какуето информацию


    Показывай как пытался ..
  • skiner © (10.07.09 15:17) [26]
    под линукс не писал ничего раньше, вот по ӕтому ...
    использую 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
  • Сергей М. © (10.07.09 15:57) [27]

    > открывал файл так


    > дальше немогу с ним что-то сделать


    Так ты ж его открыл и тут же закрыл !
    см. 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-устройствами ты управлять не собираешься..
  • skiner © (10.07.09 16:33) [28]
    еще вопрос!
    в лазарусе не хочет компилить ӕтот код

    fst.Seek(4, spBegin);     //'MThd'
    fst.Seek(1, spCurrent);
    fst.Seek(1, spCurrent);  



    ему ненравится spBegin, spCurrent, spCurrent

    использую TMemoryStream

    чем их можно заменить и что они выполняют (за что отвечают)???
  • skiner © (10.07.09 16:43) [29]
    разобрался, заменил их на  soFromBeginning , soFromCurrent
  • Сергей М. © (10.07.09 16:45) [30]

    > ему ненравится spBegin, spCurrent, spCurrent


    Я ж тебе дал ссылку на референс по FPC

    http://www.freepascal.org/docs-html/fcl/index.html

    Там черным по белому написаны допустимые идентификаторы констант

    http://www.freepascal.org/docs-html/rtl/classes/tstream.seek.html

    С какой луны к тебе свалились эти spBegin, spCurrent, spCurrent - не понятно ..


    > за что отвечают


    Читай референс - там подробно описано назначение каждой из констант
  • skiner © (14.07.09 11:29) [31]
    Так толком и не разобрался! текст достать смох с kar файла, а вот время по которому оно отображается нет, и снова ступор! (((((((( помогите!!!!!!!!!!!!
  • Сергей М. © (14.07.09 11:36) [32]
    Показывай код ..
  • skiner © (14.07.09 11:51) [33]
    Листинг Unit1
    ----------------------------------------------------------------

    type

     // Объявление записи клиента
     TCustomer = Record
       greep : String[50];
      // lastName  : String[30];
     end;

     { TForm1 }

     TForm1 = class(TForm)
       Button1: TButton;
       Button2: TButton;
       Memo1: TMemo;
       StringGrid1: TStringGrid;
       procedure Button1Click(Sender: TObject);
       procedure Button2Click(Sender: TObject);
       procedure FormCreate(Sender: TObject);
     private
       { private declarations }
     public
       { public declarations }
     end;

    var
     Form1: TForm1;
       STF_text : string;
     STF_file : text;
    { Dummy variable, current Track: }
     tel : byte;     trk : word;
    { Decide whether to Adapt or not: }
     OK : boolean;
     nr : byte;
     tijd : Longint;
       i2:integer=1;
    {************************************}

    implementation

    { TForm1 }

    {************************************}

    procedure Read_Parameters;
    begin
    // if ParamCount <> 2 then Some_Help;
     SourceText := '/windows/C/paketu/Amore_no.kar'; // '/home/user/Desktop/Amore_no.kar'
     STF_Text := '/windows/C/12.txt';

      ///windows/C/paketu/Aktrisa.kar  /windows/C/11.txt
    { if ouder(Paramstr(0), STF_Text) and
        ouder(SourceText , STF_Text) then
     begin
       Writeln('Nothing to do.') ; Halt;
     end; }


     Assign(SourceFile, SourceText);
     {$I-}
     Reset(SourceFile, 1);
     {$I+}
     if IOresult <> 0 then
     begin
     { If the source MidiFile does NOT exist: }
      // Writeln(SourceText, ' not found.');
       Halt;
     end;

     AssignFile(STF_File, STF_Text);
     Rewrite(STF_File);
    end;

    {************************************}

    {************************************}

    procedure verwerk_tekst;
    var
    // greep : string[50];
     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);

       //form1.memo1.text:=form1.memo1.text+Utf8ToAnsi(char(nr)); //************
     end;

     if customer.greep[1] = '\' then
    { New verse: }
     begin
       customer.greep := '/';
       Writeln(STF_file);

     end;
     if customer.greep[1] = '/' then
    { New line: }
     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));

    // form1.memo1.lines.add(Utf8ToAnsi(char(tel-1)));    ///*************
       Exit;
     end;

     if (customer.greep[1] = '@') and (customer.greep[2]<>'T') then Exit;
    { Title material : }
     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);

    // form1.memo1.lines.add(char(tel-2));    ///*************
       Exit;
     end;

    { Escape sequence: }
     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);
    // form1.memo1.lines.add(Utf8ToAnsi(char(i)));    ///*************
       end
     else
     begin
       Write(STF_file,'_'+customer.greep);
    //  form1.memo1.lines.add(Utf8ToAnsi(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
    //   Writeln('Not a type 1 MidiFile');
       Halt;
     end;
     Write('# bytes =');
    { Loop through all tracks: }
     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);
    //memo1.Lines.LoadFromFile('/windows/C/12.txt');
    end;

    procedure TForm1.Button2Click(Sender: TObject);

    var
    i:integer;
    st:string[1];
    myFile : TextFile;
    text1: string;
    begin   {
    st[0]:='r';
    //ShowMessage(st[0]);

    form1.memo1.lines.Append(st);      ///*************
            }

           //  memo1.Lines.LoadFromFile('/windows/C/12.txt');
             // memo1.text:=Utf8ToAnsi(memo1.text);

                           // myFile:='/windows/C/12.txt';
                            AssignFile(myFile, '/windows/C/12.txt');
                            Reset(myFile);
               while not Eof(myFile) do
     begin
       ReadLn(myFile, text1);
       ShowMessage(text1);
     end;
    end;  


  • Сергей М. © (14.07.09 11:56) [34]
    И где здесь собственно "доставание времени" ?
  • skiner © (14.07.09 12:04) [35]
    второй модуль не влазит, с которым работает ӕтот пример щас http://huizen.dto.tudelft.nl/deBruijn/muziek/pascal/midifile.pas

    брал все здесь
    http://huizen.dto.tudelft.nl/deBruijn/muziek/midicode.htm#stf2trk
  • Сергей М. © (14.07.09 12:12) [36]
    Понятно.
    Ну так что конкретно не работает в этом коде ?
  • skiner © (14.07.09 12:15) [37]
    в коде все выводит, незнаю как сделать что бы достать время для вывода текста, как караоке!!!!??
  • Сергей М. © (14.07.09 12:17) [38]
    Откуда достать-то ?
  • skiner © (14.07.09 12:21) [39]
    Я понимаю вы подержуете форум, что бы он не заснул, но я всетаки надеюсь услышать ответы людей которые уже сталкивались с ӕтой темой или знают как помочь!
 
Конференция "Media" » Работа с .kar файлом??? [D3, D4, D5, D6, D7]
Есть новые Нет новых   [134431   +10][b:0][p:0.005]