Seite 1 von 5

Audioplayer

Verfasst: 05.07.2007 16:18
von Yoshi
Ich hab jetzt mal versucht einen Audioplayer zu programmieren, bloß wird mein Code nicht akzeptiert.
Hier der Code:

Code: Alles auswählen

#WindowWidth = 300
#WindowHeight = 150

If InitMovie() = 0 
MessageRequester("Error", "Audiodatei kann nicht geladen werden!", 0)
End
EndIf

If OpenWindow(0, 100, 100, #WindowWidth, #WindowHeight, "Musikplayer v1.0", #PB_Window_Invisible | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)

If CreateMenu(0, WindowID(0))
MenuTitle("Datei")
MenuItem(0, "Musikdatei laden...")
MenuItem(1, "Beenden")

MenuTitle("Lautstärke")
MenuItem(2, "Mute")
MenuBar()
MenuItem(3, "10%")
MenuItem(4, "20%")
MenuItem(5, "25%")
MenuBar()
MenuItem(6, "30%")
MenuItem(7, "40%")
MenuItem(8, "50%")
MenuBar()
MenuItem(9, "60%")
MenuItem(10, "70%")
MenuItem(11, "75%")
MenuBar()
MenuItem(12, "80%")
MenuItem(13, "90%")
MenuItem(14, "100%")
MenuTitle("Wiedergabe")
MenuItem(15, "Play")
MenuItem(16, "Pause")
MenuItem(17, "Stop")

EndIf

If CreateToolBar(0, WindowID(0))
ToolBarImageButton(15, LoadImage(0, "Play.ico"))
ToolBarSeparator()
ToolBarImageButton(16, LoadImage(0, "Pause.ico"))
ToolBarSeparator()
ToolBarImageButton(17, LoadImage(0, "Stop.ico"))
EndIf

HideWindow(0, 0)

Volume=100

Repeat
  
Select WindowEvent()
            
Case #PB_Event_Menu
      
Select EventMenu()
        
Case 0

movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 0)
If movieName$
If LoadMovie(0, movieName$)
movieLoaded = 1
movieState  = 0

If MovieHeight(0) > 0 
ResizeWindow(0, #PB_Ignore, #PB_Ignore, MovieWidth(0), MovieHeight(0)+70)
Else
ResizeWindow(0, #PB_Ignore, #PB_Ignore, #WindowWidth, #WindowHeight)
EndIf
EndIf


Select EventMenu()
Case 1 
End


Case 15

If movieLoaded
If movieState = 2
ResumeMovie(0)
Else
PlayMovie(0, WindowID(0))
EndIf
EndIf

Select EventMenu()
Case 16


If movieLoaded And movieState = 1
PauseMovie(0) 
movieState = 2  


EndIf

Case 17


If movieLoaded And movieState = 1
StopMovie(0)
movieState = 3 


EndIf

Case 2
Volume = 0

Case 3 
Volume = 10

Case 4
Volume = 20

Case 5
Volume = 25

Case 6
Volume = 30

Case 7 
Volume = 40

Case 8
Volume = 50

Case 9
Volume = 60

Case 10
Volume = 70

Case 11
Volume = 75

Case 12
Volume = 80

Case 13
Volume = 90

Case 14
Volume = 100



If movieLoaded
If CurrentWidth <> movieWidth Or CurrentHeight <> movieHeight
ResizeWindow(0, #PB_Ignore, #PB_Ignore, movieWidth+20, movieHeight+100)





CurrentWidth  = movieWidth
CurrentHeight = movieHeight
EndIf
        
If CurrentVolume <> Volume Or CurrentBalance <> Balance  
MovieAudio(0, Volume, Balance)
            
CurrentVolume  = Volume
CurrentBalance = Balance
EndIf
EndIf
        
Case #PB_Event_CloseWindow
End
        
Case #PB_Event_SizeWindow
If IsMovie(0)
ResizeMovie(0, 0, 27, WindowWidth(0), WindowHeight(0)-70)
EndIf
        
Case 0
Delay(20)


     
        If movieLoaded And MovieStatus(0) <> PreviousmovieStatus  ; To prevent flickering on the StatusBar
        
          Select MovieStatus(0)
            Case -1
              StatusBarText(0, 0, "Musik angehalt.", 0)

            Case 0
              StatusBarText(0, 0, "Musik gestoppt.", 0)

            Default
              StatusBarText(0, 0, "Spielt :"+Str(MovieStatus(0)), 0)
              
          EndSelect
          
          PreviousmovieStatus = MovieStatus(0)
        EndIf
          
    EndSelect
    
End

Re: Audioplayer

Verfasst: 05.07.2007 16:20
von Kiffi
Yoshi hat geschrieben:bloß wird mein Code nicht akzeptiert.
was heißt das? Gibt es eine Fehlermeldung? Wenn ja: Wie lautet diese?

Grüße ... Kiffi

Verfasst: 05.07.2007 16:21
von Kaeru Gaman
> bloß wird mein Code nicht akzeptiert.

bisschen genauere fehlerbeschreibung würde auch nicht schaden...

Verfasst: 05.07.2007 16:45
von ts-soft
Wenn Du Deinen Code mal ordentlich einrücken würdest, bzw. einfach mal
die Fehlermeldung des Compilers ernstnehmen :wink: , dann würdest Du
das Problem auch lösen.

Irgendwo fehlt eine EndIf oder EndSelect oder so ähnlich.

Verfasst: 05.07.2007 16:51
von PureBasic4.0
Kaeru Gaman hat geschrieben:bisschen genauere fehlerbeschreibung würde auch nicht schaden...
Kompiliert das Programm doch (bzw. versucht es :lol:). Ihr werdet sehen, dass das hier rauskommt:

Bild

Der Code mit (hoffentlich) richtigen Einrückungen:

Code: Alles auswählen

#WindowWidth = 300
#WindowHeight = 150

If InitMovie() = 0
  MessageRequester("Error", "Audiodatei kann nicht geladen werden!", 0)
  End
EndIf

If OpenWindow(0, 100, 100, #WindowWidth, #WindowHeight, "Musikplayer v1.0", #PB_Window_Invisible | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)

  If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    MenuItem(0, "Musikdatei laden...")
    MenuItem(1, "Beenden")
    
    MenuTitle("Lautstärke")
    MenuItem(2, "Mute")
    MenuBar()
    MenuItem(3, "10%")
    MenuItem(4, "20%")
    MenuItem(5, "25%")
    MenuBar()
    MenuItem(6, "30%")
    MenuItem(7, "40%")
    MenuItem(8, "50%")
    MenuBar()
    MenuItem(9, "60%")
    MenuItem(10, "70%")
    MenuItem(11, "75%")
    MenuBar()
    MenuItem(12, "80%")
    MenuItem(13, "90%")
    MenuItem(14, "100%")
    MenuTitle("Wiedergabe")
    MenuItem(15, "Play")
    MenuItem(16, "Pause")
    MenuItem(17, "Stop")

EndIf

If CreateToolBar(0, WindowID(0))
  ToolBarImageButton(15, LoadImage(0, "Play.ico"))
  ToolBarSeparator()
  ToolBarImageButton(16, LoadImage(0, "Pause.ico"))
  ToolBarSeparator()
  ToolBarImageButton(17, LoadImage(0, "Stop.ico"))
EndIf

HideWindow(0, 0)

Volume=100

Repeat
   
  Select WindowEvent()
             
  Case #PB_Event_Menu
       
  Select EventMenu()
         
  Case 0
  
  movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 0)
  If movieName$
    If LoadMovie(0, movieName$)
    movieLoaded = 1
    movieState  = 0
    
    If MovieHeight(0) > 0
      ResizeWindow(0, #PB_Ignore, #PB_Ignore, MovieWidth(0), MovieHeight(0)+70)
    Else
      ResizeWindow(0, #PB_Ignore, #PB_Ignore, #WindowWidth, #WindowHeight)
    EndIf
  EndIf
  
  
  Select EventMenu()
  Case 1
  End
  
  
  Case 15
  
  If movieLoaded
    If movieState = 2
      ResumeMovie(0)
    Else
      PlayMovie(0, WindowID(0))
    EndIf
  EndIf
  
  Select EventMenu()
  Case 16
  
  
  If movieLoaded And movieState = 1
  PauseMovie(0)
  movieState = 2 
  
  
  EndIf
  
  Case 17
  
  
  If movieLoaded And movieState = 1
  StopMovie(0)
  movieState = 3
  
  
  EndIf
  
  Case 2: Volume = 0
  
  Case 3: Volume = 10
  
  Case 4: Volume = 20
  
  Case 5: Volume = 25
  
  Case 6: Volume = 30
  
  Case 7: Volume = 40
  
  Case 8: Volume = 50
  
  Case 9: Volume = 60
  
  Case 10: Volume = 70
  
  Case 11: Volume = 75
  
  Case 12: Volume = 80
  
  Case 13: Volume = 90
  
  Case 14: Volume = 100
  
  
  
  If movieLoaded
    If CurrentWidth <> movieWidth Or CurrentHeight <> movieHeight
    ResizeWindow(0, #PB_Ignore, #PB_Ignore, movieWidth+20, movieHeight+100)
    
    
    
    
    
    CurrentWidth  = movieWidth
    CurrentHeight = movieHeight
    EndIf
           
    If CurrentVolume <> Volume Or CurrentBalance <> Balance 
      MovieAudio(0, Volume, Balance)
                 
      CurrentVolume  = Volume
      CurrentBalance = Balance
    EndIf
  EndIf
         
  Case #PB_Event_CloseWindow
    End
         
  Case #PB_Event_SizeWindow
    If IsMovie(0)
      ResizeMovie(0, 0, 27, WindowWidth(0), WindowHeight(0)-70)
    EndIf
         
  Case 0
  Delay(20)
  
  
       
          If movieLoaded And MovieStatus(0) <> PreviousmovieStatus  ; To prevent flickering on the StatusBar
         
            Select MovieStatus(0)
              Case -1
                StatusBarText(0, 0, "Musik angehalt.", 0)
  
              Case 0
                StatusBarText(0, 0, "Musik gestoppt.", 0)
  
              Default
                StatusBarText(0, 0, "Spielt :"+Str(MovieStatus(0)), 0)
               
            EndSelect
           
            PreviousmovieStatus = MovieStatus(0)
          EndIf
           
      EndSelect
     
End 
1. Repeatschleife wird nicht beendet
2. So wie es aussieht werden einige EndIfs ausgelassen

Formfehler: Wenn InitMovie() fehlschlägt, heißt das nicht, dass die Audiodatei nicht geöffnet werden kann, sondern dass lediglich die Movie Umgebung nicht geladen werden kann. Das mit den Audiodateien kommt dann später

//edit: Ist es jetzt in Mode gekommen, ein Window Invisible zu öffnen und dann wieder visible zu schalten? :freak:

Verfasst: 05.07.2007 17:10
von Kaeru Gaman
PureBasic4.0 hat geschrieben:
Kaeru Gaman hat geschrieben:bisschen genauere fehlerbeschreibung würde auch nicht schaden...
Kompiliert das Programm doch (bzw. versucht es :lol:). Ihr werdet sehen, dass das hier rauskommt:
wenn ich viel zeit und bock hab, mach ich sowas vielleicht.

aber grundsätzlich bricht er sich doch keinen zacken aus der krone, die fehlermeldung antzugeben.

"mein Code wird nicht akzeptiert" kann auch heißen, dass man versucht,
einen PB code in ner C++-Umgebung zu compilieren...

Verfasst: 05.07.2007 17:11
von ts-soft
>> Ist es jetzt in Mode gekommen, ein Window Invisible zu öffnen
Das ist keine Mode, das hat der Profi schon immer so gemacht :mrgreen:

Verfasst: 05.07.2007 17:17
von PureBasic4.0
ts-soft hat geschrieben:Das ist keine Mode, das hat der Profi schon immer so gemacht :mrgreen:
Warm macht dass dann außer Yoshi keiner? ich habe hier noch nie einen Beitrag gefunden, der solch eine Technologie benutzt :allright:

Verfasst: 05.07.2007 17:26
von ts-soft
PureBasic4.0 hat geschrieben:Warm macht dass dann außer Yoshi keiner? ich habe hier noch nie einen Beitrag gefunden, der solch eine Technologie benutzt :allright:
Sogar der VD macht das, hab den allerdings ewig nicht mehr genutzt.
Für die kleinen Forum Snippets ist es ja auch nicht notwendig. Aber wenn ich
60 oder mehr Gadgets benutzte, mehrere ListViews mit Daten fülle beim
Start, siehts ohne diese Technik echt billig und langsam aus :lol:

Verfasst: 05.07.2007 18:31
von a14xerus
@ Yoshi und auch PB4.0:
Dein (korrigierter) Code ist einfach falsch, kein Wunder das der Compiler meckert.
Nach "End" sind noch 9 Verschiedene Schleifen oder Abfragen nicht beendet.
Und ich erstelle Fenster auch immer Unsichtbar..

edit: Falscher Name.. ich frag mich grade echt wie ich dadrauf kommen konnte... :-/