AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TMIDIPlayerComp

TMIDIPlayerComp

Ein Thema von EWeiss · begonnen am 6. Jun 2011 · letzter Beitrag vom 5. Feb 2016
Antwort Antwort
Seite 6 von 11   « Erste     456 78     Letzte » 
Benutzerbild von EWeiss
EWeiss
Registriert seit: 16. Okt 2010
MidiPlayer Componenten Pack.
TMIDIFile2, TMIDIPlayer2 and TSheetMusic.

#### Copyright Notice ####
Copyright (c) 2015 Silhwan Hyun

This Program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2.

This Program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

Revision
----------
v0.9 29 Sep 2015
- initial release
----------
v0.9.1 24 Nov 2015
[Demo program]
- Main unit name was changed (DemoUnit -> ViewSheetUnit)
- Decreased the minimum height of form (856 -> 300)

[TSheetMusic]
- Fixed intermittent inaccurate location of position bar(changed function GetSymbolsWidthSum of SheetMusic.pas)
- Fixed occasional position bar residue at moving position
- Removal of preceding line feed code in first lyrics of MIDI Karaoke file
- Support RIFF-based MIDI file (*.RMI)
----------
v0.9.1.1 29 Nov 2015
[Demo program]
- Fixed displaying of non-localized text for the caption of buttons on several forms.
----------
v0.9.2.0 2 Dec 2015
- Added a project to build dynamic linking library (= MidiSheetForm)
for easy implementation of Midi Sheet Music
---------------------------------------------------------------

You should deactivate previously installed TMIDIFile2, TMIDIPlayer2 to avoid duplicate
conflict before you install New MIDI Player Component Package.
Also you should install FontComboBox and NicePreview component before you load Demo project (ViewSheeMusic.proj).

Anhang gelöscht!
Sucht im Net nach alternativen.

gruss

Geändert von EWeiss ( 7. Feb 2016 um 12:39 Uhr)
 
musicman56
 
#51
  Alt 23. Dez 2011, 14:00
Hallo Emil,

ich habe mir den Quelltext des Players mangels Zeit noch nicht angesehen. Aber, ich kenne einige Bibliotheken von anderen Anbietern und weiß darum, wie diese die Anzeige realisiert haben.

Meistens liest man ja alle Midi-Events in eine Liste (abgeleitete TList) ein, und schickt die Events dann der Reihe nach an den Midi-Port. Diese Liste muss einen Integer mit der aktuellen Text-Position enthalten. Wie ich vorher schon mal angedeutet habe, ist das die Anzahl der Chars von Beginn an (kannst also jederzeit auch den Copyright-String oder andere Events ausblenden). Den Integer erzeugt man ganz einfach bei der ersten Erstellung des "gesamten" Textes im Memo. Um unnötiges Aktualisieren zu verhindern, und die Lesbarkeit beim Abspielen zu verbessern, macht man das meistens "Wort für Wort" oder auch zeilenweise.

Der User kann somit den Trackbar an jede gewünschte Position ziehen, und der Text stimmt immer. Der Vorteil ist: Es geht auch mit einem einfachen Memo, weil "Sel.." und Co verwendet werden kann. Sel.Begin ist der Integer und Sel.End ist die nächste Zeile (Zeilenumbruch)

Aber...only my 2 cents, will mich nicht in deine Planung einmischen.

OT - eigentlich eine Frage an den Forums-Admin: In der Vorschau wird die Signatur angezeigt bzw. angehängt, aber nicht im Beitrag. Was muss man denn da einstellen/ändern? Hab schon in den Einstellungen gesucht, aber nichts gefunden. Komisch ist: Nachdem ich einen Beitrag nachträglich bearbeitet habe, ist die Signatur seltsamerweise da... also doppelt. Evtl. Browser-Problem?

Mit musikalischem Gruss
------------------------
- musicman56 (Otto) -

Geändert von musicman56 (23. Dez 2011 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#52
  Alt 23. Dez 2011, 15:08
Die aktuelle Textposition ermittle ich (OpenGL) über das Elapsed Event also zu welcher zeit der Text geschrieben wird.
Die Procedure

procedure TForm1.MidiPlayerGotLyrics(Track: Integer; Event: PMidiEvent);

liefert mir den korrekten String zurück ein zusätzliches addieren in einer TList innerhalb der Mainform
wäre also in dem Fall doppelt gemoppelt da der Komplette text vorher schon in einer TList addiert wird.

Bei OpenGL habe ich kein problem den Text auszugeben (finden) da er wie schon gesagt über Elapsed ermittelt wird.
Hingegen im Memo/Richedit finde ich einfach nicht den Ansatz wie ich das hier realisieren soll.

gruss
  Mit Zitat antworten Zitat
beanbear6

 
Delphi 7 Enterprise
 
#53
  Alt 24. Dez 2011, 09:28
Hallo Emil,
hm seltsam, ich hab ein RichEdit dazugesetzt wo ich die
Zeilenumbrüche einwandfrei kriege, aber im SyncLyrics
macht er mir das einfach nicht. Hast Du ne Idee, woran
das liegen kann??
Gruß und frohes Fest
Reiner
Miniaturansicht angehängter Grafiken
bild.jpg  
Reiner
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#54
  Alt 28. Mai 2012, 09:57
Neue version online..

gruss
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#55
  Alt 28. Mai 2012, 19:31
hat sich erst mal erledigt

Geändert von EWeiss (30. Mai 2012 um 12:59 Uhr)
  Mit Zitat antworten Zitat
beanbear6

 
Delphi 7 Enterprise
 
#56
  Alt 29. Mai 2012, 04:58
Hi EWeiss,
das sieht ja cool aus!! Jetzt geht auch die Lyrics
einwandfrei.
Ich hab da nen Sonderfall mit diesen Kompos:
Kann ich da auch Lyrics eines externen Hardware-
Midifile-Players importieren und anzeigen lassen?
Gruß beanbear
Reiner
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#57
  Alt 29. Mai 2012, 08:31
Zitat:
Kann ich da auch Lyrics eines externen Hardware-
Midifile-Players importieren und anzeigen lassen?
Die frage ist was du darunter verstehst.
Ich habe eine externe 250Gb große Festplatte (USB) warum sollte ein MidiFile das ich dort ablege nicht funktionieren
vorrausgesetzt das Midifile enthält Lyrics

Lade mal ein MidiFile von dem Player hoch.

gruss

Geändert von EWeiss (29. Mai 2012 um 09:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#58
  Alt 3. Jun 2012, 07:18
Neue Version oben siehe change log

gruss
  Mit Zitat antworten Zitat
midijorss
 
#59
  Alt 24. Jun 2012, 11:20
Hello Emil,

Thanks again to you and Silhwan Hyun for your great effort for TMIDIPlayer2 project
I've tried to play the standard midifile many times than found a solution.

I've added two variations after implemetation and other provided codes in MidiFile2 unit as below.

Delphi-Quellcode:

....

implementation

var
  isMetaLyric : Boolean;
  nMetaTextCount : Integer;

.....

function TMidiFile2.ReadFromFile(const FileName: WideString): Boolean;
var
  FileInfo: TMidiFileInfo;
  I,N: Integer;
begin
  FLyricsTrack := -1;
  FLyrics := '';
  if isMetaLyric then isMetaLyric := False; // Added by midijor
  nMetaTextCount := 0; // Added by midijor

.............
end;

// In SaveMetaEvent procedure
procedure SaveMetaEvent(Status_: byte; Elapsed_: LongWord);
var
  ......
  DataType2 : byte; // Added by midijor
  str3 : AnsiString; // Added by midijor
  ......
begin
  ...........
    TempoMap[TempoCounter-1].Tempo := Tempo;
   end else
   // Added by midijor
   if DataType = $05 then // for metaLyric
   begin
      New(pEvent);
      pEvent^.Event := Status_;
      pEvent^.Positon := Elapsed_;
      pEvent^.Data1 := DataType;
      pEvent^.Msg := str2;
      if isMetaLyric = false then isMetaLyric := True; // isMetaLyric founded
      MidiTrack.AddEvent(pEvent);
   end else
   if DataType = $01 then // for converting metaText to metaLyric
   begin
     if isMetaLyric = false then
     begin
       DataType2 := $05;
       if (str2[1] = '@') then //Chr($40)
       begin
         // some information
       end
       else
       if str2[1] = Chr($5C) then // '\' clear line.
       begin

         if nMetaTextCount > 0 then
         begin

           str3 := Chr(10);
           New(pEvent);
           pEvent^.Event := Status_;
           pEvent^.Positon := Elapsed_;
           pEvent^.Data1 := DataType2;
           pEvent^.Msg := str3;
           MidiTrack.AddEvent(pEvent);

           str3 := ' '+ Chr($A); //for new line
           New(pEvent);
           pEvent^.Event := Status_;
           pEvent^.Positon := Elapsed_;
           pEvent^.Data1 := DataType2;
           pEvent^.Msg := str3;
           MidiTrack.AddEvent(pEvent);
         end;
         nMetaTextCount := nMetaTextCount + 1;

         str3 := Copy(str2, 2, Length(str2) -1);
         New(pEvent);
         pEvent^.Event := Status_;
         pEvent^.Positon := Elapsed_;
         pEvent^.Data1 := DataType2;
         pEvent^.Msg := str3;
         MidiTrack.AddEvent(pEvent);
       end
       else
       if str2[1] = Chr($2F) then // New Line '/'
       begin
         str3 := ' '+ Chr($A); //for new line
         New(pEvent);
         pEvent^.Event := Status_;
         pEvent^.Positon := Elapsed_;
         pEvent^.Data1 := DataType2;
         pEvent^.Msg := str3;
         MidiTrack.AddEvent(pEvent);

         str3 := Copy(str2, 2, Length(str2) -1);
         New(pEvent);
         pEvent^.Event := Status_;
         pEvent^.Positon := Elapsed_;
         pEvent^.Data1 := DataType2;
         pEvent^.Msg := str3;
         MidiTrack.AddEvent(pEvent);
       end
       else
       begin

         New(pEvent);
         pEvent^.Event := Status_;
         pEvent^.Positon := Elapsed_;
         pEvent^.Data1 := DataType2;
         pEvent^.Msg := str2;
         MidiTrack.AddEvent(pEvent);

       end;
     end; // if MidiTrack.isMetaLyric = false then
   end else
   if DataType = $02 then
   begin
     New(pEvent);
     pEvent^.Event := Status_;
     pEvent^.Positon := Elapsed_;
     pEvent^.Data1 := DataType;
     pEvent^.Msg := str2;
     MidiTrack.AddEvent(pEvent);
   end else
   if DataType = $03 then
   begin
     New(pEvent);
     pEvent^.Event := Status_;
     pEvent^.Positon := Elapsed_;
     pEvent^.Data1 := DataType;
     pEvent^.Msg := str2;
     MidiTrack.AddEvent(pEvent);
   end else
   if DataType = $04 then
   begin
     New(pEvent);
     pEvent^.Event := Status_;
     pEvent^.Positon := Elapsed_;
     pEvent^.Data1 := DataType;
     pEvent^.Msg := str2;
     MidiTrack.AddEvent(pEvent);
   end;
end;
           
...........
I hope, you'll do better than me and your "KaraGL" project supports the standard midifile...

Best regards,
midijor

Geändert von midijorss (24. Jun 2012 um 11:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss
 
#60
  Alt 24. Jun 2012, 12:44
Thanks for the Information
i have added all this by me and silhwan self

see here.

Delphi-Quellcode:
    case Event^.Data1 of
      // ** MIDI Karaoke file type 1 (Soft Karaoke) uses data type code $1 for recording lyrics
      // ** instead of data type code $5.
      // ** The identifier of this file type is text "@KMIDI KARAOKE FILE" as the first text at position 0.
      // ** (Applied at ver 0.9.5)
      $1: begin
        if FTrackKeyword = 'then
          if (Event^.Positon = 0) and (Event^.Msg = '@KMIDI KARAOKE FILE') then
            FFoundKaraokeId := true
          else
          // The name of Track 1 = "Soft Karaoke", Track 2 = "Words"
          if FFoundKaraokeId2 and (FTrackName = 'Words') then
            FFoundKaraokeId := true;
            // For very suspicious karaoke file
            if not FFoundKaraokeId then
              if FTrackName = 'Wordsthen
                if High(FRawLyrics) = -1 then
                  if pos('@L', string(FTrackKeyword)) <> 0 then
                    if pos('@T', string(FTrackKeyword)) <> 0 then
                      FFoundKaraokeId := true;
best regards Emil

ps.. the last File show as see image
i can not upload the source on this time without permission of Silhwan. (es geht nichts über Denglish)
Miniaturansicht angehängter Grafiken
24.06.jpg  

Geändert von EWeiss (24. Jun 2012 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2016 by Daniel R. Wolf