Programm bringt mich zur Weißglut (Types)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Mr Hopp

Betreff: Programm bringt mich zur Weißglut (Types)

BeitragDi, Aug 16, 2005 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Eigentlich bin ich ja kein Anfänger mehr, aber diese Types kriegen mich immer wieder klein, naja, es heist ja: "Das Leben dreht sich um Fragen und Antworten, auch wenn man weis, das man lange braucht um etwas zu verstehen, sollte man dennoch fragen". Sorry, kleiner Anflug von Poetie. Auf jeden Fall, ich verzweifle noch an den Types. Das programm ist noch nicht weit, und es kommt mir auch erst mal nur auf die Funktion "Laden" an. Zu dem Programm gehören noch 3 Dateien, ich denke aber, die braucht man nicht, für die Types. (Die eine ist eine Wav-Datei zum erzeugen des Sounds; die andere eine txt-Datei, in der die Daten für das laden drin stehen;Und noch eine Datei gibt an, wie viele Stimmen nd so das Lied hat)



Code: [AUSKLAPPEN]
Graphics 800, 600, 32, 1
SetBuffer BackBuffer()

Global Keyboard = LoadSound("Instrumente\Keyboard.wav")
LoopSound Keyboard

Global Hintergrund = LoadImage("Bilder\Hintergrund.png")
Global Cursor = LoadImage("Bilder\Cursor.png")
Global Menue = LoadImage("Bilder\Menue.png")

MaskImage Cursor, 0, 0, 255

Global Laut# = 0.625
Global note = 0
;Global oktave = 0

Type TLied
   Field Stimme.TStimme
   Field Stimmanzahl
   Field aktuelle_s
End Type

Type TStimme
   Field XNote.TNote
   Field Noten_ges
   Field aktuelle_n
End Type

Type TNote
   Field Oktave
      Field Hoehe
   Field Laenge
   Field Besonderheiten
    Field Laut
   Field Note_x
   Field Note_y
End Type

Global Lied.TLied = New TLied
Global Stimme.TStimme = New TStimme
Global XNote.TNote = New TNote
;Global Note.TNote = New TNote

Wiedergabe("Alle meine Entchen\")

;*****************************************************************************************************

Function Laden(WgPfad$)
i = 2

Info = ReadFile("Lieder\"+WgPfad$+"Info.txt")
Stimmanzahl = ReadByte(Info)
CloseFile(Info)

;-------------------------------------------------------------
Lesen = ReadFile("Lieder\"+WgPfad$+"Stimme1.txt")
Repeat

Lied\Stimme.TStimme\XNote.TNote = Last TNote
Lied\Stimme.TStimme\XNote.TNote = New TNote

Lied\Stimme.TStimme\Noten_ges = Lied\Stimme.TStimme\Noten_ges + 1
Lied\Stimme.TStimme\aktuelle_n = Lied\Stimme.TStimme\aktuelle_n + 1

Lied\Stimme.TStimme\XNote.TNote\Oktave = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Hoehe = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Laenge = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Besonderheiten = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Laut = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Note_x = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Note_y = ReadByte(Lesen)

Until KeyHit(1)
CloseFile(Lesen)
;--------------------------------------------------------------
For i = 2 To 6
If Stimmanzahl <= i Then
Lied\Stimme.TStimme = Last TStimme
Lied\Stimme.TStimme = New TStimme
Lied\Stimmanzahl = Lied\Stimmanzahl + 1
Lied\aktuelle_s = Lied\aktuelle_s + 1

Lesen = ReadFile("Lieder\"+WgPfad$+"Stimme"+i+".txt")
Repeat

Lied\Stimme.TStimme\XNote.TNote\Oktave = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Hoehe = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Laenge = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Besonderheiten = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Laut = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Note_x = ReadByte(Lesen)
Lied\Stimme.TStimme\XNote.TNote\Note_y = ReadByte(Lesen)

Until KeyHit(1)
CloseFile(Lesen)
EndIf

Next
End Function

;***************************************************************************************************

Function Auswaehlen()

For ID = 1 To Stimme\aktuelle_n-1 Step 1
Lied\Stimme.TStimme\XNote.TNote = After Lied\Stimme.TStimme\XNote.TNote
Next

End Function

;*****************************************************************************************************

Function Wiedergabe(WgPfad$)
Laden(WgPfad$)

Stimme1_k = PlaySound(Keyboard)


;Info = ReadFile("Lieder\"+WgPfad$+"Info.txt")
;Stimmen = ReadLine(Info)
;CloseFile(Info)

End Function

 

MegaTefyt

BeitragDi, Aug 16, 2005 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, 1. heißt es Poesi Razz und 2. wäre es hilfreicher, wenn du genau sagen könntest, was du machen willst und was denn nicht funktioniert, als einfach den Code hier reinzupappen und die Leute spekulieren zu lassen. Smile
 

Mr Hopp

BeitragDi, Aug 16, 2005 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, mit dem Programm soll man Lieder komponieren können, wobei nach dem Laden die Types durhlaufen werden (Diese Funktion ist erstmal egal) und dabei befehle geben, wie hoch der Pitch und so weiter für den Grundton sein muss. Und (sorry, hab vergessen, das ihr s gar nich laufen lassen könnt) was nicht fnktioniert ist wie gesagt die Funktion "Laden", wo bei dem erstellen eines neuen Objekts (einer neuen Note) immer angezeigt wird, das das Objekt nich existiert. Ich dachte, ich hätte den fehler gefunden, am Anfang existiert es ja wirklich nicht, also habe ich den Last Befehl weggemacht (ein saudoofer Fehler) allerdings wurde mir dann auch das New angestrichen, und so weit bin ich jetz. Ich glaub, der Last Befehl steht inzwischen wieder da.

Alfadur

BeitragDi, Aug 16, 2005 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
cool ist immer zu wissen was der debugger darüber denkt... was sagt er denn!?
A Cray is the only computer that runs an endless loop in less than four hours.
 

Mr Hopp

BeitragDi, Aug 16, 2005 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Was?
 

Dreamora

BeitragDi, Aug 16, 2005 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sollst es im Debug Modus kompilieren, dann gibts ne gescheite Fehlermeldung.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragDi, Aug 16, 2005 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, eben nich, nur während des Programm-Laufes "Object does not exist". Is das denn so schwer zu begreifen?

Ctuchik

BeitragDi, Aug 16, 2005 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du die dateien hochladen könntest wäre das ganze einfacher
im moment blick ich noch nicht so ganz durch Confused

EDIT: Was mir grad auffällt ist, dass deine beiden Repeat-Schleifen ein
Code: [AUSKLAPPEN]
Until KeyHit(1)

am Ende haben! Sollte das nicht ein
Code: [AUSKLAPPEN]
Until Eof(Lesen)

sein!?!

EDIT2: Was ich auch nicht verstehe ist warum du
Code: [AUSKLAPPEN]
Lied\Stimme.TStimme\XNote.TNote = Last TNote

machst. Das wird doch danach bei New TNote quasi überschrieben!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!
 

Dreamora

BeitragDi, Aug 16, 2005 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem liegt wahrscheinlich einfach nur daran, dass du beim Initialisieren scheinbar nicht drüber nachdenkst, was du machst ...

Sprich du initiliasierst Lied aber nie Lied\Stimme, was du in deiner Funktion benutzen willst. Genau so wenig Lied\Stimme\XNote auf das du auch die ganze Zeit am Anfang von Laden zugreifst.

PS: Der Debugger gibt auch Zeilen an bei Fehlern, sollte ich mich nicht irren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Alfadur

BeitragDi, Aug 16, 2005 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
du irrst nicht. der debugger ist unser aller freund.

"Is das denn so schwer zu begreifen?"

gut, nochmal ganz langsam für dich zum mitmeiseln. je nach ide die du benutzt kannst du bei compiler optionen irgendsowas wie "debug" anklicken. da erscheint dann ein häckchen oder sonstwas. dann isser eingeschaltet. dann startest du das programm und wenn dann der fehler kommt wird die entsprechende zeile durch ne rote, blaue, grüne oder andersgeartetet farbe hervorgehoben... dann weißte schonmal in welcher zeile der fehler ist. zusätzlich gibts dann noch irgendwo so tabs wo du die globalen variablen, konstanten etc anschauen kannst, und die funktionen die gerade am laufen sind werden auch angezeigt, inklusive aller variablen... da schauste dann mal nach, dort steht dann sicher irgendsowas wie stimme.Tstimme (null) oder sowas. dann weiße : aha, stimme existiert nicht, also sollte ich besser nicht drauf zu greifen...

alles verstanden? oder ist es zu schwer zu begreifen?! solche "iuiuiui, fehlermeldung"-posts sind nämlich überflüssig wie ein kropf wenn man sich mal die debugger ausgaben anschaut...
A Cray is the only computer that runs an endless loop in less than four hours.
 

Mr Hopp

BeitragDi, Aug 16, 2005 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
 

Dreamora

BeitragDi, Aug 16, 2005 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Das
Code: [AUSKLAPPEN]

Global Lied.TLied = New TLied
Global Stimme.TStimme = New TStimme
Global XNote.TNote = New TNote
 


muss zu

Code: [AUSKLAPPEN]

Global Lied.TLied = New TLied
Lied\Stimme = New TStimme
Lied\Stimme\XNote = New TNote
 


werden, denn in der Funktion greifst du auf diese zu, nur erzeugen tust du sie nie sondern erzeugst andere Variablen die nichts mit "Lied" zu tun haben.
Das meinte ich.


Ich nehme an, der Fehler tritt bei "Lied\Stimme.TStimme\XNote.TNote = Last TNote " auf un zwar weil du auf Lied\Stimme zugreifst, dass nicht existiert. Insofern kannst du auch nicht die letzte Note zuweisen ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Mr Hopp

BeitragDi, Aug 16, 2005 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Jahoo! Aber das versteh ich nich, ich hab zum test mal den Last-Befehl auskomentiert und da hatt's bei new gestoppt, aber jetz klappt's, bleibt nur noch ein anderer Fehler mit der Datei, aber ich denke, das schaff ich alleine, vielen Dank.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group