AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte The Old-Style-Music-PLAY-Function
Thema durchsuchen
Ansicht
Themen-Optionen

The Old-Style-Music-PLAY-Function

Ein Thema von himitsu · begonnen am 11. Nov 2009 · letzter Beitrag vom 19. Nov 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu
Registriert seit: 11. Okt 2003
Hiiiiihooo,

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.


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.

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.
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.
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
Angehängte Dateien
Dateityp: dpr playproject_341.dpr (5,9 KB, 50x aufgerufen)
Dateityp: exe playproject_856.exe (43,0 KB, 66x aufgerufen)
Dateityp: exe demo_459.exe (20,0 KB, 70x aufgerufen)
Dateityp: zip play_106.zip (62,1 KB, 58x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
 
mimi

 
FreePascal / Lazarus
 
#11
  Alt 11. Nov 2009, 18:20
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...
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#12
  Alt 11. Nov 2009, 18:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#13
  Alt 12. Nov 2009, 10:50
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
Matti
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#14
  Alt 12. Nov 2009, 11:28
Bin nun auch auf Wiki fündig geworden ... irgendwie hatte ich das beim ersten Mal nicht gefunden
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
  Mit Zitat antworten Zitat
Teekeks

 
FreePascal / Lazarus
 
#15
  Alt 12. Nov 2009, 12:35
Ich versteh nicht ganz was man mit diesen MIDI's machen kann, ich will das ja dann wieder nach Linux portieren
Kann mir das jemand erklären?
Peter
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

 
Delphi XE2 Professional
 
#16
  Alt 12. Nov 2009, 13:28
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 Bass_Init(-1, 44100, 0, 0, nil); und schon geht die Post ab.
Benjamin Schwarze
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#17
  Alt 12. Nov 2009, 13:47
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*.
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#18
  Alt 12. Nov 2009, 14:02
@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. (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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#19
  Alt 18. Nov 2009, 20:01
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.
  Mit Zitat antworten Zitat
Teekeks

 
FreePascal / Lazarus
 
#20
  Alt 19. Nov 2009, 06:56
Arrg. Ich kann 7z nicht unter Linux enpacken (der entpacker läuft ja nur unter Windows)
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 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