Sound nur einmal wiedergeben.

Previous topic - Next topic

Worebu

Hallo Leute, wie bewerkstellige ich es am besten das wenn ich über eine Karte fahre der Sound pro Ziel nur einmal abgespielt wird.
Immer wenn ich auf dem Ziel bleibe gib's eine Schleife und der Sound wird bis zum erbrechen wiedergegeben.
Mit einem Schalter (TRUE / FALSE oder ähnlich) habe ich schon gebastelt, aber nicht so wie ich wollte.
Hat jemand einen Idee für einen "Alten Eingerosteten"? (Cooler Screenname fällt mir gerade auf)    ;)

Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

erico

I´m not sure I understand (translator did a poor job here).

It seems to me you have a need for a sound to play when target is reached and you want it to play only once, not repeted.

You can do it by adding a check variable, or, checking the last position, for example (the later):

if ´last position´ is outside target area and ´current position´ is inside target area
play sound
endif

This way, sound will only be played once you reach the target and not while you stay in target.
I hope this approach helps, depending on your actual need, there may be better ways to do the same thing.

Cheers.

Worebu

Danke erstmal, aber wenn die Maus auf dem Ziel bleibt, wird der Sound immer abgespielt, eine Endlosschleife. Aber die möchte ich gerne verhindern.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Schranz0r

Du musst triggern,
wenn die Maus über der Karte ist spiele den Sound...

Ist die Maus weiterhin auf der Karte unterbreche die Abfrage ( BREAK)
denn der Sound wurde ja schon gespielt und es ist ja die gleiche Karte.

Bis du über einen anderen Karte und der Sound der anderne Karte ist noch aktiv BREAK die schleife...

Erst wenn der Sound aus ist und du gehst auf eine neue Karte oder bist schon drauf musst du den Sound wieder abspielen.


Eigentlich recht simpel
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Worebu

#4
Hmm, entweder kann ich dir nicht folgen oder ich habe mich falsch ausgedrückt.

Also Abfrage:


WHILE TRUE

IF Position der Maus = xxx THEN

   GOSUB Sound()

ENDIF

WEND


FUNCTION Sound:

  PLAYSOUND(0,1,1)

ENDFUNCTION

Also immer wenn IF stimmt spielt's den Sound. Bleibt die Maus auf der Position das IF stimmt läuft die Schleife. Es soll aber nur 1x der Sound kommen
auch wenn IF immer noch stimmt. Beispiel Sternenkarte: Immer wenn ein Planet mit der Maus übergangen wird gibt es einen Ton, nur einmal. Beim nächsten Planeten
wieder einen. Komme ich zurück zu dem ersten gibts es natürlich wieder einen. Der Sound ist ja nur ein kleines Beep oder so. Also keine Musik oder ähnliches.



Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Marmor

if mouse xxx then
if soundwurdegespielt = 0 then
soundwurdegespielt =1

playsound sound
endif
endif

if mouse <> xxx then soundwurdegespielt = 0

(pseudocode)



erico

Quote from: Worebu on 2014-Oct-30
Danke erstmal, aber wenn die Maus auf dem Ziel bleibt, wird der Sound immer abgespielt, eine Endlosschleife. Aber die möchte ich gerne verhindern.

No, if the mouse remains over the target, it won´t play the sound again because your conditional to play it only holds true if the xy coordinates of previous position was outside the target, so in the next loop, the last coordinates will be inside the target and it won´t play again.

Maybe I did not express myself correctly, if that is the case, I can write a pseudo code to illustrate it.

Schranz0r

Ich mach dir heute Nachmittag ein Beispiel wenn ich zuhause bin.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Worebu

Ja bitte, wenn ich die Maus auf der Position lasse gibs doch eine Schleife oder?.
Ich habe mal ein Video einer kleinen Karte abgestellt, Quasi eine Bastelkarte.


@Marmor: Dein Beispiel funktioniert leider nicht , ich komme immer wieder in die Schleife
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Worebu

@SchranzOr, hast Du mal was gebastelt? Ich bekomme es nicht hin. Ich bin jedesmal in einer Schleife.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Schranz0r

Shit, vergessen.. :/

Mach ich sobald ich daheim bin, sry!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

D2O

Hallo Worebu,
sollte so funktionieren.

Code (glbasic) Select
SETCURRENTDIR("Media") // go to media files
SYSTEMPOINTER TRUE
GLOBAL mx,my,b1,b2  /// Mausvariablen

GLOBAL snd_check = FALSE // kontroller ob sound abgespielt werden darf
GLOBAL pos_check = FALSE // Kontroller ob sich die maus über dem objekt befindet

LOADSOUND "1.wav",0 ,1



WHILE TRUE
// Mausposition abfragen
MOUSESTATE mx,my,b1,b2

//Ein rechteck zeichnen ;)
DRAWRECT 50,50,60,60,RGB(0x00, 0x80, 0xff)

// Wenn die Mausposition in dem Rechteck ist
IF  mx > 50 AND mx < 110 AND my > 50 AND my < 110 
pos_check = TRUE // Position ist wahr
ELSE
pos_check = FALSE // wenn nicht dann ist die Position falsch
snd_check = FALSE // genauso den Soundcheck auf Falsch setzen(zurücksetzen)
ENDIF

// ist also die Mausposition Wahr und der Sound wurde noch nicht abgespielt
IF  pos_check = TRUE AND snd_check = FALSE
PLAYSOUND(0, 0,1) // Sound abspielen
snd_check = TRUE // Sound wurde abgespielt
ENDIF





SHOWSCREEN
WEND
END
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Worebu

Suuuper, Danke funzt. Habe ich mir mal geklaut.

@SchranzOr, trotzdem danke für deine Mühe im Vorfeld.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Schranz0r

Sry das ich zu spät war... :'(



:good: :booze:
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Worebu

Hallo, macht nichts. Allerdings nun die Ernüchterung. Wenn ich auf meiner Karte mehr Punkte habe (ca. 16) funktioniert es nicht mehr. Habe alles bis auf 1 Punkt rausgenommen funzt. Wenn ich einen zweiten Punkt mit reinnehme passiert nichts. Der zweite Punkt geht dann in eine Schleife obwohl er Programmtechnisch identisch ist (bis auf die koordinaten).  :rant:
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD