Probleme mit LoopSound + PitchSound?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: Probleme mit LoopSound + PitchSound?

BeitragSo, Jul 31, 2005 4:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte ein Panzerspiel in 3D erstellen. Dabei soll der Panzer immer ein Sound abliefern da der Panzer ja auch bei Stillstand nicht aus ist. Somit habe ich den Sound vorher mit LoopSound endlos gemacht. Wenn der Panzer nun los fährt soll der Sound hoch gepitcht werden. Das tut er auch, aber nur wenn ich den Sound neu starte. Ich möchte aber bei Beschleunigung nicht ständig den Sound neu starten. Das klingt scheiße.

Wenn ich nun pitche passiert garnichts. Was soll ich machen?

Mein Beispielcode ist aus der Onlinehilfe (etwas modifiziert).
Code: [AUSKLAPPEN]
Graphics3D 640,480
SetBuffer BackBuffer()

plane=CreatePlane()

camera=CreateCamera()
PositionEntity camera,0,1,-10

light=CreateLight()
RotateEntity light,90,0,0

cube=CreateCube()
PositionEntity cube,0,1,0

microphone=CreateListener(camera,1,10,1)
sound=Load3DSound("..\..\data\ring.wav")

LoopSound sound

pitch=22050

While Not KeyHit(1)
If KeyDown(2) Then pitch=pitch-10
If KeyDown(3) Then pitch=pitch+10
SoundPitch sound,pitch
If KeyDown(205)=1 Then MoveEntity cube,.3,0,0
If KeyDown(203)=1 Then MoveEntity cube,-.3,0,0
If KeyDown(208)=1 Then MoveEntity camera,0,0,-0.05
If KeyDown(200)=1 Then MoveEntity camera,0,0,0.05
If MouseHit(1)=1 Then EmitSound(sound,cube)
RenderWorld
Text 0,0,"Benutze Cursortasten zum Verschieben"
Text 0,20,"Mit linker Maustaste Sound abspielen"
Text 0,40,"Pitch: "+pitch
Flip
Wend
End

Danke im vorraus...

wunderkind

BeitragSo, Jul 31, 2005 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne das Problem jetzt live nachzuvollziehen: Wenn ich mir die englische Hilfe ansehe (und gerade auch die auf Blitzbase.de), dann sieht es so aus, als würden die Änderungen durch soundpitch() erst greifen, nachdem das Abspielen neu gestartet wurde. Vermutlich kann soundpitch() den Sound nicht live ändern. Korregiert mich sollte ich falsch liegen.


Viele Grüße
Dein Blitzforum.de Service Team
 

BlitzBasic303

Betreff: RE:

BeitragSo, Jul 31, 2005 11:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub auch wunderkind hat recht.Tut mir leid für dich Crying or Very sad Aber versuch doch die lautstärke zu ändern und dadurch das motorgeräusch je nach Geschwindigkeit anders anhören zu lassen

Mfg

BlitzBasic303

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Aug 01, 2005 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mal ehrlich. Was machen denn dann die Leute die ein Autorennen programmieren mit den Motorsound? Soll man dann 100 Motorsounds mit unterschiedlichen Frequenzen gleichzeitig abspielen wo man dann nach der Motordrehzahl jeweils die richtigen Sounds nach Lautstärke slidet? Oder einen Sounds immer wieder neu starten, bei ständig ändernder Motordrezahl? Oder eine externe DLL einbeziehen, die elendig anzusteuern ist?

Wenn die letzte Lösung die einzig mögliche ist. Hat dann jemand eine passende DLL mit Beispielcode zur Hand? Würde mich echt freuen... Danke im Vorraus.
 

andy.anonymus

BeitragDo, Feb 01, 2007 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich glaube so passt das:

Code: [AUSKLAPPEN]
AppTitle "Motorgeräuschsimulator"
Graphics 800,700,16,2
Print "REWG"
Print "Anleitung:"
Print "1.Gebe den Motor(sound)namen ein und bestätige mit ENTER."
Print "2.Gebe die Samplerate des Motor(sound)s ein und bestätige wieder mit ENTER."
Print "3.Gebe mit der Pfeil-Nach-Oben-Taste Gas oder Bremse mit der Pfeil-Nach-Unten-Taste."
motorname$ = Input("Motorname:")
sample = Input("Samlerate der Datei:")
Graphics 800,600
motor=LoadSound(motorname$)
LoopSound motor
kanal1=PlaySound(motor)
SetBuffer BackBuffer()
While Not KeyHit (1)
Cls
If KeyDown(200) Then pitch=pitch+200
If KeyDown(208) Then pitch=pitch-200
If pitch > 0 Then pitch=pitch-100
If pitch < 0 Then pitch=pitch+100
gas=sample+pitch
kmh=pitch/100
Text 379,282,motorname$,True,True
Text 379,346,pitch,True,True
Text 379,392,gas,True,True
Text 379,429,kmh+" km/h",True,True
Flip
ChannelPitch kanal1,gas
Wend
StopChannel kanal1
FreeSound motor
End
An die Administration: Löscht mich bitte. (ich meine es ernst!)

Christoph

BeitragDo, Feb 01, 2007 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab schon einmal ein Autospiel gemacht, bei dem ich den Pitchwert des Soundes verändert habe. Allerdings habe ich ihn nicht geloopt, sondern per channelplaying()=0 immer wieder abgespielt (dann funzte Pitch immer, nicht nur bei Neustart des Sounds)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Feb 01, 2007 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mein erster Beitrag ist bereits 1 1/2 Jahre her. So habe ich andy.anonymus bereits per PN angesprochen, mich bei ihm dafür bedankt das er sich die Mühe gemacht hatte, aber auch erwähnt das es 'recht spät ist'.

Mein Buggy-Beispiel ist der Beweis, dass ich es bereits kann. Es geht im übrigen auch ohne If ChannelPlaying... Beim Buggy ist der Motorsample gerade mal eine Amplitude lang, das ginge mit ChannelPlaying sowieso nicht, weil vermutlich mehr Loops benötigt werden, als die Programmschleife her gibt.

Was ich aber noch nicht getestet habe ist, dass Abspielen mit CreateListener und LoopSound und ...Pitch. Weil CreateListener ja nun auch so paar Vorteile aufweist. zB die währen, dass ein Doplereffekt eingegeben werden kann...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group