| Autor |
Beitrag |
Infor07
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 21.02.07 09:15
Hi,
ganz einfache Frage  (jedenfalls vermeintlich):
Ich hab einen Random-Mode der am Anfang des Programmes ein Lied auswählt.
Wenn dieses Lied aber zu Ende ist, dann kommt kein neues, der Random-Mode wird
also nicht wieder ausgeführt. Die Wiedergabe endet einfach.
Verwendet habe ich SND_ASYNC. Wenn ich es mit SND_LOOP mache, dann spielt er zwar
wieder eine Datei ab nachdem sie zu Ende ist (im Zufallsmodus), aber leider immer wieder die gleiche, die er am Anfang zufällig ausgewählt hat.
Mein Wunsch: Er soll, nachdem er meinetwegen am Anfang "Sound1" ausgewählt und abgespielt hat danach dann "Sound2" oder "Sound3" oder was auch immer abspielen,
jedenfalls nicht immer wieder "Sound1".
Bedingung: Keine Riesen-Exe oder Resource-Dateien
Ich hoffe jemand hat eine Idee wie das funktionieren könnte.
Danke schonmal,
mfG infor07
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 21.02.07 10:15
Randomize; einmal im OnCreate aufrufen, sonst kommt immer der selbe Zufallswert.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mi 21.02.07 10:29
Ich würd einfach nen TMediaplayer nehmen und OnNotify benutzen. 
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mi 21.02.07 11:17
Blackheart666 hat folgendes geschrieben: | | Randomize; einmal im OnCreate aufrufen, sonst kommt immer der selbe Zufallswert. |
Nein, nicht immer die selbe, aber die Chance dass die selbe kommt, ist größer.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 21.02.07 11:26
Wird zwar OT, aber wird durch Randomize der Pseudo-Zufallsgenerator nicht einfach nur so initialisiert (z.B. anhand der Systemzeit), dass nicht bei jedem Programmstart dieselben Zufallswerte geliefert werden?  Mit der "Wiederholwahrscheinlichkeit" hat das afaik nichts zu tun.
Ansonsten kann ich hierzu nichts sagen - die Flags SND_ASYNC, SND_LOOP hab ich zwar schonmal irgendwo gesehen, aber was man da sonst machen kann... 
_________________ We are, we were and will not be.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mi 21.02.07 12:15
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 21.02.07 12:23
Ah...dann haben wir glaube ich aneinander vorbergeredet. Randomize in der Schleife aufrufen ist ja von vornerein Unsinn. Ich meinte, dass bei sowas (im OnCreate)
Delphi-Quelltext 1: 2:
| for i := 0 to 20 do Memo1.lines.Add(IntToStr(Random(1000))); | bei jedem Programmstart dieselbe Liste von Zahlen erzeugt wird, jedoch bei
Delphi-Quelltext 1: 2: 3:
| randomize; for i := 0 to 20 do Memo1.lines.Add(IntToStr(Random(1000))); | jedesmal neue.
Aber in beiden Fällen "sieht die Liste zufällig aus", d.h. Ein Fehlen/Vorhandensein von einem Randomize hat keinen Einfluss auf die "Wiederholwahrscheinlichkeit" während der Laufzeit.
_________________ We are, we were and will not be.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mi 21.02.07 12:33
Ja, das ist klar. Ich prüf grad den genauen Unterschied zwischen "1x Randomize" und "dauernd Randomize". Da lässt sich ein Durchschnittswert ausgeben.
10 Millionen Durchgänge à 1000 Zufallszahlen [0..9]
1x Randomize:
Abweichung im Schnitt: 11,28
Dauernd Randomize:
Abweichung im Schnitt: ~3,9 (nur 30.000 Durchgänge)
Ohne Randomize:
Abweichung im Schnitt: auch 11,28
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Infor07 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 22.02.07 21:00
Hi,
also das Programm ist eigentlich ein Spiel und die Musik soll nur nebenbei laufen, aber eben im fortlaufenden Zufallsmodus mit echtem Zufall und nicht immer das gleiche Lied (das würde mit SND_LOOP funktionieren).
Quellcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ComboMusikChange(Sender: TObject); var wahl : integer; begin
wahl := RANDOM(5); CASE Form1.ComboMusik.ItemIndex of 6: CASE Wahl of 0: sndPlaySound(PChar('Lied1'),SND_ASYNC); 1: sndPlaySound(PChar('Lied2'),SND_ASYNC); 2: sndPlaySound(PChar('Lied3'),SND_ASYNC); 3: sndPlaySound(PChar('Lied4'),SND_ASYNC); 4: sndPlaySound(PChar('Lied5'),SND_ASYNC); end; |
Wird inzwischen über die Resource abgerufen, hab den aktuellen Quellcode aber gerade nicht da. Jemand nen konkreten Vorschlag wie ich das Problem lösen kann ? Müsste am besten sehr schnell gehen.
Danke schonmal, auch für die bisherigen Posts
Mfg Infor07
Moderiert von raziel: Delphi-Tags hinzugefügt
Edit: Danke für den Delphi-Tag, wusste noch nicht so genau wie das geht 
|
|
|