Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   The Old-Style-Music-PLAY-Function (https://www.delphipraxis.net/143176-old-style-music-play-function.html)

himitsu 11. Nov 2009 10:05


The Old-Style-Music-PLAY-Function
 
Liste der Anhänge anzeigen (Anzahl: 4)
Hiiiiihooo, :hi:

wer von euch kennt denn noch das gute alte DOS und vorallem das wunderschöne QBasic?

Okey, Okey, jetzt nur nicht so stürmisch die Hände heben. :lol:


Nja, in Zeiten, wo es mit Delphi langsam zu Ende geht, da muß man sich ja Alternativen suchen *hust*.




Oder man holt sich die Funktionen von dort in die Moderne. :angel2:

Hier hätten wir also eine nette Sound-(Play)-Funktion:
Es geht eigentlich recht einfach und jeder, der Musik hatte und mit Noten umgehn kann, kommt vermutlich damit zurecht ... ansonsten kann man ja auch einfach so damit rumspielen. :mrgreen:
Delphi-Quellcode:
// das Nibbles-Startlied
Play('T200o3L8CDEDCDL4ECC');

// und eine einfache Tonleiter (klettert mir bloß nicht zu hoch, es geht tief runter)
Play('MS L8 o1CDEFGABH o2CDEFGABH o3CDEFGABH o4CDEFGABH o5CDEFGABH');
Gut, es ist jetzt vielleicht nicht gerade eine super High-Tech-Funktion,
aber vorallem Anfänger sollten damit sehr leicht ein bissl Ton in ihre Spiele/Programme reinbekommen können.


Der Befehlssatz ist auch recht übersichtlich.
Und selbst wenn man nicht gut komponieren kann,
dann sollte es nicht schwer sein sich was aus irgendeinem Notenblatt abzuschreiben. :nerd:
Code:
Oktaven- and Ton-Befehle:
  Ox        setzt die Oktave (0 - 8 : Standard = 4)
                0 = Kontra-Oktave
                1 = Große Oktave
                2 = Kleine Oktave
                3 = Eingestrichene Oktave
                8 = Sechsgestrichene Oktave
  < oder >  setzt die aktuelle Oktave um 1 herab oder herauf
  A - H     spielt die angegebene Note in der aktuellen Oktave
  Nx        spielt die angegebene Note im gesamten Oktavenraum
                0=O0C  4=O0G  7=O0H  56=O7C  63=O7H
  Xx        spielt die angegebene Frequenz (37 - 32767)

Dauer- und Tempo-Befehle:
  Lx        Setzt die Länge der Noten (1 - 64 : Standard = 4)
                1 = ganze Note
                2 = halbe Note
                64 = 64-tel Note
  Mx        setzt die musikalische Vortragsanweisung auf Legato (ML),
                Normal (MN : Standard) oder Staccato (MS)
  Px        definiert eine Pause (siehe Lx)
  Tx        setzt das Tempo auf viertel Noten pro Minute (32 - 255 : Standard = 120)

Abspiel-Modus:
  Mx        spielt die Musik im Vordergrund (MF = synchron : Standard)
                oder Hintergrund (MB = asynchron) ab

Zusatzbefehle:
  # or +     setzt die vorhergehende Note um einen halben Ton herauf
  -          setzt die vorhergehende Note um einen halben Ton herab
  .         spielt die vorhergehende Note um 3/2 (1.5x) länger, als angegeben
Hier ist also praktisch alles drinnen, was QBasic auch schon konnte.

OK, der Background-Modus ist (noch) nicht integriert,
aber mal sehn, vielleicht gibt es irgendwann auch 'ne Version, welche über die Soundkarte läuft.


[edit] der Befehl X wurde noch schnell eingefügt (gibt es zwar in QBasic nicht, aber kann bestimmt spaßig sein)

[edit2] Demo hinzugefügt

Teekeks 11. Nov 2009 12:16

Re: The Old-Style-Music-PLAY-Function
 
Liste der Anhänge anzeigen (Anzahl: 1)
So,
Ich hab dein Projekt mal 12fix nach Linux für Lazarus portiert!
(ich würde vermuten dass das dann auch mit Mac geht :D)
(s. Anhang).

So noch was zum allgemeinen:
Finde ich richtig toll ^^
Funktioniert sogar einwandfrei :mrgreen:


Gruß Teekeks

turboPASCAL 11. Nov 2009 13:44

Re: The Old-Style-Music-PLAY-Function
 
Zitat:

wer von euch kennt denn noch das gute alte DOS und vorallem das wunderschöne QBasic?
:hi:

Ding, Dang, Dong:
Delphi-Quellcode:
PLAY('O5 L4 CD L8 ED L4 CCD L8 ED L4 CEF L2 G L4 EF L2 G');
k. A.:
Delphi-Quellcode:
PLAY('MFT120L8<GL16P16FEL8FL4GL16P8P16L8B>C<BL16AL8GL4GL16P8P16L8B>C<BL16AL8GGGGL16BL8>C<L2B');
nich die simsons:
Delphi-Quellcode:
PLAY('MFT120L8<AL16P16AA>P4P16DP16DP16[B]P16L8CL16P16CCP4P16FP16F');
Let's go Range error. ;)
Delphi-Quellcode:
PLAY('MFT180o2P2P8L8GGGL2E-P24P8L8FFFL2D');


Das müsste sich leicht auf die Soundcart übertragen lassen.
Ich erinnere mal schnell an das Mattis Mini Midi Dings. :stupid:

himitsu 11. Nov 2009 13:53

Re: The Old-Style-Music-PLAY-Function
 
@TP: das war mir garnicht aufgefallen :oops:
na mal sehn, was da noch alles möglich ist.


Kann es sein, daß dieses Sound/NoSound in Delphi nicht gibt?

Allerdings bin ich bei der Suche danach in der Windows.pas vorbeigekommen
und dort gibt es tatsächlich sowas: :shock:
Delphi-Quellcode:
{ WaitSoundState() Constants }

S_QUEUEEMPTY = 0;
S_THRESHOLD = 1;
S_ALLTHRESHOLD = 2;

{ Accent Modes }

S_NORMAL = 0;
S_LEGATO = 1;
S_STACCATO = 2;

{ SetSoundNoise() Sources }

S_PERIOD512 = 0;    { Freq = N/512 high pitch, less coarse hiss }
S_PERIOD1024 = 1;   { Freq = N/1024 }
S_PERIOD2048 = 2;   { Freq = N/2048 low pitch, more coarse hiss }
S_PERIODVOICE = 3;  { Source is frequency from voice channel (3) }
S_WHITE512 = 4;     { Freq = N/512 high pitch, less coarse hiss }
S_WHITE1024 = 5;    { Freq = N/1024 }
S_WHITE2048 = 6;    { Freq = N/2048 low pitch, more coarse hiss }
S_WHITEVOICE = 7;   { Source is frequency from voice channel (3) }

S_SERDVNA = LongWord(-1);    { Device not available }
S_SEROFM = LongWord(-2);     { Out of memory }
S_SERMACT = LongWord(-3);    { Music active }
S_SERQFUL = LongWord(-4);    { Queue full }
S_SERBDNT = LongWord(-5);    { Invalid note }
S_SERDLN = LongWord(-6);     { Invalid note length }
S_SERDCC = LongWord(-7);     { Invalid note count }
S_SERDTP = LongWord(-8);     { Invalid tempo }
S_SERDVL = LongWord(-9);     { Invalid volume }
S_SERDMD = LongWord(-10);    { Invalid mode }
S_SERDSH = LongWord(-11);    { Invalid shape }
S_SERDPT = LongWord(-12);    { Invalid pitch }
S_SERDFQ = LongWord(-13);    { Invalid frequency }
S_SERDDR = LongWord(-14);    { Invalid duration }
S_SERDSR = LongWord(-15);    { Invalid source }
S_SERDST = LongWord(-16);    { Invalid state }
Eigentlich klingt es ja voll genial, aber in Delphi sind nirgendwo die nötigen Funktionen zu finden :cry:

Selbst Google und MSDN schweigen sich da mehr drüber aus,
aber letztendlich hab ich einfach mal die gesamte Festplatte durchsuchen lassen und wurde fündig.

WaitSoundState und SetSoundNoise verstecken sich in %WinDir%\System\SOUND.DRV
und nochmals in %WinDir%\System32\sound.drv .

Jetzt gibt es nur ein Problem: ich hab absolut keine Ahnung, wie man diese ansteuert.
Nja, immerhin läuft das Windows.Beep (vielleicht zerdebugge ich dieses einmal und finde einen/den Weg).

Forlan 11. Nov 2009 13:59

Re: The Old-Style-Music-PLAY-Function
 
Für mich als Pianisten eine interessante Funktion...
Coming up: Bach - Tocatta mit Fuge in D-Moll; vorgetragen mit Delphi.PLAY() :cyclops:
Ich schau mir das glaub ich mal genauer an... :mrgreen:

turboPASCAL 11. Nov 2009 14:24

Re: The Old-Style-Music-PLAY-Function
 
Zitat:

Coming up: Bach - Tocatta mit Fuge in D-Moll; vorgetragen mit Delphi.PLAY() Cyclops
Ich schau mir das glaub ich mal genauer an..
Aber bitte mit etwas mehr Piff (Allegro). :mrgreen:

@himi,

Doch ich glaube das gab es mal. ziemlich sicher bei Turbo Pascal und auch den ersten Delphiversionen.
Irgend wann wurde es Win oder so nicht weiter unterstützt. Ich galube ab NT.

An sonsten in einen Thrad verlagern. So hab ich es bei Pong gemacht.

Teekeks 11. Nov 2009 14:25

Re: The Old-Style-Music-PLAY-Function
 
Ich hab keine Ahnung wo das bei Delphi ist... Ich vermute es gibt da keine unit namens crt? (da ist das drinne)
Roter kasten:
die Unit crt gibts bei TurboPascal ^^

himitsu 11. Nov 2009 14:33

Re: The Old-Style-Music-PLAY-Function
 
@turboPASCAL:
Also das mit dem MIDI hört sich schon cool an.
Wenn ich die Befehle noch etwas um eine Instrumentenauswahl und Lautstärkte erweitere, dürfte was Brauchbares rauskommen, aber ich glaub das "Beep" laß ich auch mit drinnen.
Der PC-Speaker ist ja manchmal richtig nützlich (z.B. für Alarmsignale).

Wenn ich dann noch etwas weiterspinne ... vielleicht fällt mir dan sogar noch ein, wie ich das ganze dann noch mehrstimmig bekomme :roll:


Das mit dem Thread war schon klar, also für die Background-Wiedergabe, aber ich war erstmal froh daß ich nun die Frequenten und Längenberechnungen richtig hinbekommen hab und das sogar wesentlich kürzer, als es anfangs war und auch von Debuggen her war es einfacher ohne Threads.


Gut, dann werde ich die Oktaven noch etwas ändern müssen, denn hier wird alles eine Oktave tiefer abgespielt, als es QBasic machte, aber dafür gab es insgesamt mehr Oktaven und so wie es aussieht, hat man beim MIDI die Oktaven genauso gestaltet.
Und das obwohl ich schon die untersten zwei Oktaven, von meinen Anfängen, wieder ausgebaut hab ... das 8 Hz C der Subsubkontra-Oktave hörte ja eh kein Mensch mehr :mrgreen:

[edit]
jupp, eine crt.pas oder Ähnliches, hab ich nun auch schon gesucht, aber nicht gefunden

turboPASCAL 11. Nov 2009 14:44

Re: The Old-Style-Music-PLAY-Function
 
Zitat:

Zitat von Teekeks
die Unit crt gibts bei TurboPascal ^^

Ganau.

Zitat:

aber ich glaub das "Beep" laß ich auch mit drinnen.
Na das hoff ich doch.

PS.: Crt.pas

Das hilft aber nichts. Ab Win NT bekommt man keine Zugriffsrechte auf den Speakerport.
Wenn man dos nimmt ist das kein Problem.

Früher bei Win95 & Co ging das so:
http://www.delphi3000.com/articles/article_3766.asp
http://delphi.about.com/cs/adptips20...ltip0303_3.htm

Delphi-Quellcode:
Program Wave_To_Speaker;

uses
  dos, crt, ssystem;

type
  WavHdr = record
    riff   :   array[1..4] of char;
    fsize  :   longint;
    wave   :   array[1..4] of char;
    fmt    :   array[1..4] of char;
    info16  :   longint;
    info1   :   integer;
    channel :   integer;
    sampfreq:   longint;
    bytesec :   longint;
    bytesamp:   integer;
    sampbit :   integer;
    data   :   array[1..4] of char;
    seqsize :   longint;
  end;

const
  max      = 64000;

var
  buf      : array [0..max] of byte;
  fh       : file of byte;
  res, leng : word;
  n        : word;
  hdr      : wavhdr;

procedure PlayPuffer;
var i: Word;
begin
  for i:=0 to leng do
  begin
    {if buf[i] > 128 then sound(hdr.sampfreq); nosound;}
    if buf[i] > 128 then sound(hdr.sampfreq + buf[i])
      else nosound;
    delay(1);
  end;
  nosound;
end;

procedure readfile(filename: string; WaveInfo: Boolean);
begin
  assign(f, filename);
  reset(f,1);
  blockread(f, hdr, sizeof(hdr), res);
  leng := hdr.seqsize;
  if leng > max then
  begin
    leng := max;
    Writeln('File to long!');
    Writeln('Datei wurde von ', hdr.seqsize,' Byte auf ', leng,' Byte gekuerzt.');
  end;
  blockread(f, buf, leng, res);
  Writeln(res, ' Byte gelesen!');
  close(f);

  if WaveInfo then
  begin
    writeln('Dateiname   : ',FileName);
    writeln('ID1          : ',hdr.riff);
    writeln('FileSize    : ',hdr.fsize);
    writeln('ID2          : ',hdr.wave);
    writeln('ID3          : ',hdr.fmt);
    writeln('ID4          : ',hdr.info16);
    writeln('PCM-Format  : ',hdr.info1);
    writeln('Kan„le      : ',hdr.channel);
    writeln('Sampelrate  : ',hdr.sampfreq);
    writeln('Byte pro Sec.: ',hdr.bytesec);
    writeln('Byte-Sample : ',hdr.bytesamp);
    writeln('Bit-Sample  : ',hdr.sampbit);
    writeln('ID5          : ',hdr.data);
    writeln('SeqSize     : ',hdr.seqsize);
  end;

end;


BEGIN
  ClrScr;
  readfile('D:\Wuhu.wav', true);
  PlayPuffer;
END.

himitsu 11. Nov 2009 15:17

Re: The Old-Style-Music-PLAY-Function
 
Das mit dem WAV-an-Speaker kenn ich noch.

Das hatte damals der Druckertreiber vom Lexmark gemacht ... die hatten viele (Fehler)Meldungen als Sprachausgabe und wenn es keine Soundkarte gab, dann nahmen sie diesen weg ... nur blöd, daß solange der PC still stand :lol:

mimi 11. Nov 2009 18:20

Re: The Old-Style-Music-PLAY-Function
 
Toll währe das ganz noch, wenn auch "Dateien" mit eingebunden wird, z.b. ich gebe meine Anweisungen ein und bestimmte Dateien werden dann abgespielt *G*.....

Das mit MIDI Währe natürlich auch noch toll, gerade unter FPC/Lazarus.... für einfache Spiele dürfte das schon Ausreichen...

himitsu 11. Nov 2009 18:54

Re: The Old-Style-Music-PLAY-Function
 
Dateien könntest du ja notfalls mit TStringList einlesen und dann als SL.Text übergeben,
aber ich denke da dürfte dann noch Platz für eine Funktion sein, welche Dateien einlesen kann.


PS: gibt es eigentlich irgendwo eine Liste mit den ganzen/wichtigsten MIDI-Befehlen?

Im MSDN ist ja hierzu nicht wirklich was zu finden.
Ansonsten versuch ich grad das Wichtigste erstmal aus Turbos schönen Programm rauszubekommen.

turboPASCAL 12. Nov 2009 10:50

Re: The Old-Style-Music-PLAY-Function
 
Delphi-Quellcode:
PLAY('T140L8o4CDEGo5CDEGo6CDEGo7CDEGo8Co7GEDCo6GEDCo5GEDCo4GED<A>CE');
PLAY('T140L8o4Ao5Co5Eo5Ao6Co6Eo6Ao7Co7Eo7Ao7Eo7Co6Ao6Eo6Co5Ao5Eo5Co4Ao4Eo4Co4Co4Do4Eo4Go5Co5Do5Eo5Go6Co6Do6Eo6Go7Co7D');
PLAY('T140L8o7Eo7Go8Co7Go7Eo7Do7Co6Go6Eo6Do6Co5Go5Eo5Do5Co4Go4Eo4Do3Ao4Co4Eo4Ao5Co5Eo5Ao6Co6Eo6Ao7Co7Eo7Ao7Eo7Co6Ao6E');
PLAY('T140L8o6Co5Ao5Eo5Co4Ao4Eo4Co3Fo3Go3Ao4Co4Fo4Go4Ao5Co5Fo5Go5Ao6Co6Fo6Go6Ao7Co7Fo7Co6Ao6Go6Fo6Co5Ao5Go5Fo5Co4Ao4G');
//PLAY('T140L8o4Fo4Co3Ao3G#G#Ao4C#D#G#Ao5C#D#G#Ao6C#D#G#Ao7C#D#G#Do7C#A#G#Do6C#A#G#Do5C#A#G#Do4C#A'); // Fehler ? todo
PLAY('T140L8o3Go3Ao4Do4Go4Ao5Do5Go5Ao6Do6Go6Ao7Do7Go7Do6Ao6Go6Do5Ao5Go5Do4Ao4Go4Do3A');
Zitat:

PS: gibt es eigentlich irgendwo eine Liste mit den ganzen/wichtigsten MIDI-Befehlen?
Sicher. Leider hab ich meine nicht mehr (finden können).
http://www.midi.org/techspecs/midimessages.php

himitsu 12. Nov 2009 11:28

Re: The Old-Style-Music-PLAY-Function
 
Bin nun auch auf Wiki fündig geworden ... irgendwie hatte ich das beim ersten Mal nicht gefunden :shock:
http://de.wikipedia.org/wiki/MIDI#Controller
War nun grad am Ausprobieren, welche Controler bei meiner Soundkarte funktionieren
und irgendwie will nimma Main volume (Bn 07) und Balanca (Bn 08 ) gehn :(

Und danke für den Link von midi.org.
hatte zwar mehrmals hinweise auf diese Seite im Netz vorgefunden, aber dort einfach nichts gefunden :oops:

Teekeks 12. Nov 2009 12:35

Re: The Old-Style-Music-PLAY-Function
 
Ich versteh nicht ganz was man mit diesen MIDI's machen kann, ich will das ja dann wieder nach Linux portieren :D
Kann mir das jemand erklären?

chaosben 12. Nov 2009 13:28

Re: The Old-Style-Music-PLAY-Function
 
Wer keinen Speaker mehr im PC hat, kann sich die Unit uBassBeep.pas von hier schnappen und alle "Windows.Beep" durch "BassBeep" ersetzen. Vorher noch ein
Delphi-Quellcode:
Bass_Init(-1, 44100, 0, 0, nil);
und schon geht die Post ab. :dancer: :wink:

mimi 12. Nov 2009 13:47

Re: The Old-Style-Music-PLAY-Function
 
Stimmt. Keine schlechte Idee, dass gleiche könnte für FMOD gemacht werden, dann währe es Plattform unabhängig.
Oder mit meiner "Xine Unit", dann währe es allerdings nur unter Linux benutzbar...

Zitat:

Ich versteh nicht ganz was man mit diesen MIDI's machen kann
Eine Menge ! Die meisten DOS Spiele haben es früher genutzt. Z.B. "Prince OF Persia 1 uns 2" und es hört sich besser an, als der PC-Lautsprecher*G*.

himitsu 12. Nov 2009 14:02

Re: The Old-Style-Music-PLAY-Function
 
@Kekschen:
Im Grunde ist MIDI eine Multimedia-Schnittstelle/Protokoll.

Hier würde jetzt die Soundkarte angesteuert ... ich denk mal, dieses sollte auch unter Linux gehn.
Man könnte auch externe Sachen, wie Soundgeneratoren, ein Keyboard (das für Musik) oder gar 'nen ganzer Mischpult anschließen und entweder damit den PC steuern oder die Geräte.

Kennst vielleicht aus Fernsehsendungen, wenn sich auf so rießigen Mischpulten urplörtlich die Regler von alleine verstellen. :stupid: (sowas könnte man damit z.B. machen)

Aber hier würde einfach nur der Soundkarte gesagt "eh du, stell jetzt mal das und das Instrument ein und gib damit diese undjene Note aus.


Das mit dem BassBeep ... joar, dürfte sich machen lassen, bräuchte da ja nur 'ne Weiche einbauen, welches dann zwischen Beep und BassBeep wechselt.
Also im Prinzip wäre das die einfachste Variante, welche ich dann, wenn ich wieder daheim bin der Original-Prozedur beibringen könnte.

> ich laßß einmal das mit "Beep" als einzelprozedur und versuch grad nochmal zusätzlich alles zusammen (Beep und MIDI) in einer Klasse zu kapseln, weil man beim Midi soviel einstellen kann, daß ich garnicht alles nur in Stringbefehlen umsetzen möchte.

himitsu 18. Nov 2009 20:01

Re: The Old-Style-Music-PLAY-Function
 
Im Post #1 gibt es erstmal 'ne kleine Testversion (Play.7z) mit den neuen Codes.

Von der Klasse mit BASS-Beep und MIDI-Sound ist erstmal nur ein Grudgerüst, mit einigen Basisfunktionen vorhanten

Aber immerhin wurde die Play-Prozedur schonmal verändert.
* aus der Prozedur wurde eine Funktion, welche entweder 0 oder die Fehlerstelle mitteilt, anstatt eine Exception ala "Irgendwo ist was falsch." auszulösen.
* der Befehl X ist dazugekommen > direkte Angabe einer Frequenz 32 Hz bis 32 kHz
* und es gibt einen Schleifenbefehl |:abcde:|, sammt Auslassungszeichen
(siehe Hilfetext in der Datei > Abschnitt Wiederholungen)
* auch die Soundausgabe der Funktion wird jetzt gesamelt
> also bald wird eine asynchrone Soundausgabe möglich sein
(und der Code wird später auch mal so in etwa auch mal in der Klasse verwendet)


In der MIDI-Klasse werden dann noch ein/zwei Befehle dazukommen, da dort dann Mehrkanalsound und natürlich auch das Umschalten der Instumente möglich wäre.

Ansonsten würde mich mal interessieren, ob das mit dem Noten/Befehlen halbwegs gut nutzbar ist, oder ob man noch was grundlegend ändern muß.

PS: wie mir grad auffällt, steht in der Hilfe schon drinnen, daß a - h einem A# - H# entsprichet, was noch nicht stimmt, da noch standardmäßig CaseInsensitiv gearbeitet wird.

Teekeks 19. Nov 2009 06:56

Re: The Old-Style-Music-PLAY-Function
 
Arrg. Ich kann 7z nicht unter Linux enpacken (der entpacker läuft ja nur unter Windows)

Medium 19. Nov 2009 08:20

Re: The Old-Style-Music-PLAY-Function
 
Haufenweise Versionen für diverse Linuxe

himitsu 19. Nov 2009 09:27

Re: The Old-Style-Music-PLAY-Function
 
Gibt es eigentlich einen Kompilerschalter zur FreePascal-Delphi-Unterscheidung?

Und ich hab den Anhang mal durch 'ne Zip ersetzt.

Teekeks 19. Nov 2009 17:58

Re: The Old-Style-Music-PLAY-Function
 
@himitsu: du könntest auf jedenfall darauf prüfen, ob das linux ist, wenn ja: dann kans kein Delphi sein ;)
Delphi-Quellcode:
{ifdef UNIX}

himitsu 19. Nov 2009 18:47

Re: The Old-Style-Music-PLAY-Function
 
OK, dann nehm ich mal das UNIX und baue deine Änderungen aus Post #2 ein.

Die vergessene Sache mit der Groß-/Kleinschreibung (#19 ganz unten) ist nun auch drinnen.

Ja und das Ganze betrifft jetzt erstmal nur die eine/beiden "Standard"-Funktion(en).
Delphi-Quellcode:
Function Play      (Command: String): Integer;
Procedure CheckedPlay(Command: String);
> Anhang (Play.zip) im ersten Post ist geändert.

Teekeks 19. Nov 2009 19:40

Re: The Old-Style-Music-PLAY-Function
 
die Unit MMSystem existiert unter Lazarus nicht → Ich muss mir was einfallen lassen...
Hat jemand eine Idee wie ich sonst MIDI benutzen kann?

himitsu 19. Nov 2009 19:52

Re: The Old-Style-Music-PLAY-Function
 
von der MMSystem wird aktuell all Dieses verwendet
Delphi-Quellcode:
Type HMIDIOUT = Integer;
  PHMIDIOUT  = ^HMIDIOUT;
  MMRESULT   = UINT;

Const MIDI_MAPPER    = UINT(-1);
  MM_MOM_OPEN        = $3C7;
  MM_MOM_CLOSE       = $3C8;
  MM_MOM_DONE        = $3C9;
  MM_MOM_POSITIONCB  = $3CA;
  CALLBACK_FUNCTION  = $00030000;
  MMSYSERR_NOERROR   = 0;
  MMSYSERR_BADERRNUM = 9;
  MMSYSERR_INVALPARAM = 11;
  MAXERRORLENGTH     = 128;

Function midiOutOpen(lphMidiOut: PHMIDIOUT; uDeviceID: UINT;
  dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; StdCall;
  External 'winmm.dll' Name 'midiOutOpen';
Function midiOutClose(hMidiOut: HMIDIOUT): MMRESULT; StdCall;
  External 'winmm.dll' Name 'midiOutClose';
Function midiOutShortMsg(hMidiOut: HMIDIOUT; dwMsg: DWORD): MMRESULT; StdCall;
  External 'winmm.dll' Name 'midiOutShortMsg';
Function midiOutGetVolume(hmo: HMIDIOUT; lpdwVolume: PDWORD): MMRESULT; StdCall;
  External 'winmm.dll' Name 'midiOutGetVolume';
Function midiOutGetErrorText(mmrError: MMRESULT; pszText: {PChar}PAnsiChar;
  uSize: UINT): MMRESULT; StdCall;
  External 'winmm.dll' Name 'midiOutGetErrorTextA';
Zum Testen der "alten" Funktionen kannst du ja auch erstmal die Klasse auskommentieren.

Die Funktionalität des MIDI wird ja durch die Soundkarte bereitgestellt, also dürfte es für Linux auch irgendeinen Weg ('ne API) zur Soundkarte geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz