Eigener Player

Anfängerfragen zum Programmieren mit PureBasic.
KruemelMonster
Beiträge: 8
Registriert: 21.08.2008 01:19
Kontaktdaten:

Eigener Player

Beitrag von KruemelMonster »

Ich mache was will komme aber nicht vorran
Hab schon rum probiert und versucht selbst schon Gegoogelt und trotzdem hab ich keine Lösung gefunden. So einfach das es wohl keine Antwort drauf gibt. :oops:

Hab derzeit das Grundgerüst geschaffen und jetzt hapert es mit dem weiteren Coden, ich versuche die ganze Zeit den Player über den Reiter "Datei" -> "Beenden" zu schließen, klappt aber mit dem Eventmenu überhaupt nicht habe auch schon versucht die Musik Files zu öffnen aber kaum öffne ich den Player springt mir die Ordner Auswahl ins Gesicht.
Würde mich gerne über Tipps freuen.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration


Volume = 100

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #TrackBarGadget_0
EndEnumeration


If InitMovie() = 0
  MessageRequester("Error", "ERROR!", 0)
End
EndIf

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) And CreateGadgetList(WindowID(0))
EndIf

If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    MenuItem(0, "Öffne Datei")
    MenuItem(1, "Beenden")
EndIf

If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 10, 50, 80, 30, "Play")
    ButtonGadget(#Button_1, 10, 80, 80, 30,"Stop")
    ButtonGadget(#Button_2, 10, 110, 80,30,"Pause")
    TrackBarGadget(#TrackBarGadget_0, 5, 150, 287, 60, 100, 180,#PB_TrackBar_Ticks) 
    ListViewGadget(80, 110, 50, 175, 100)
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview")   
    Next
    SetGadgetState(0, 9)
EndIf

 Repeat 
    Event = WindowEvent() 
    If Event = #PB_Event_Menu
       End(1)
      EndIf 
  Until Event = #PB_Event_CloseWindow


  
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du hast 2 Eventloops, das geht schon mal garnicht.
Der erste läßt der CPU keine Luft, hier mal ein Grundgerüst des EventLoop:

Code: Alles auswählen

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
          Debug "Öffne Datei wurde gedrückt"
          ;hier der Code um Datei zu öffenen usw.
          ;für längeren Code besser hier eine Procedure aufrufen
        Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          ; hier code für Play
        Case #Button_1
        Case #Button_2
      EndSelect
  EndSelect
ForEver
Mußte natürlich noch vervollständigen, falls Du mit Select Case nicht
klarkommst, einfach in die Hilfe schauen, ist meist die praktischte
Variante, kannste aber auch auf viele If EndIf umstellen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
KruemelMonster
Beiträge: 8
Registriert: 21.08.2008 01:19
Kontaktdaten:

Beitrag von KruemelMonster »

Danke für deine Hilfe @ts-soft hab das nun auch endlich mit den "Select" <) richtig verstanden.
Auf jeden fall spielt mein Player schon mal Musik und über so einen kleinen Erfolg freut man sich schon mal. :)

Nun zu meinem eigenlichen Problem, würde gerne den "Play-Button" Mit "ResumeMovie(1)" belegen, da aber der Button schon mit PlayMovie(1) belegt ist macht er einige Probleme und spielt die Mp3 wieder von Anfang an ab als an der Stelle weiter zu machen wo er es soll.

Freue mich schon auf die Tipps und bedanke mich schon mal im voraus.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration


Volume = 100


Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #TrackBarGadget_0
EndEnumeration


If InitMovie() = 0
  MessageRequester("Error", "ERROR!", 0)
End
EndIf

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) And CreateGadgetList(WindowID(0))
EndIf

If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    MenuItem(0, "Öffne Datei")
    MenuItem(1, "Beenden")
EndIf

If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 10, 50, 80, 30,"Play")
    ButtonGadget(#Button_1, 10, 80, 80, 30,"Stop")
    ButtonGadget(#Button_2, 10, 110, 80,30,"Pause")
    TrackBarGadget(#TrackBarGadget_0, 5, 150, 287, 60, 100, 180,#PB_TrackBar_Ticks)
    ListViewGadget(80, 110, 50, 175, 100)
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview")   
    Next
    SetGadgetState(0, 9)
EndIf 

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
        movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 1)
        LoadMovie(1, MovieName$)
        Delay(10)
        movieLoaded = 1
        movieState  = 0
          Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
            PlayMovie(1, WindowID(0))
            ResumeMovie(1)
        Case #Button_1
            PauseMovie(1)
        Case #Button_2
            StopMovie(1)
      EndSelect
  EndSelect
ForEver
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ungetested, aber ungefähr so sollte es gehen:

Code: Alles auswählen

movieFirst = #True

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
        movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 1)
        LoadMovie(1, MovieName$)
        Delay(10)
        movieLoaded = 1
        movieState  = 0
          Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
            If movieFirst Or  MovieStatus(1) > 0
              movieFirst = #False
              PlayMovie(1, WindowID(0))
            Else
              ResumeMovie(1)
             EndIf 
        Case #Button_1
            PauseMovie(1)
        Case #Button_2
            StopMovie(1)
      EndSelect
  EndSelect
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
KruemelMonster
Beiträge: 8
Registriert: 21.08.2008 01:19
Kontaktdaten:

Beitrag von KruemelMonster »

Danke auf jeden fall für die Hilfe. :)

So, bin mal wieder am ende mit meinem Anfänger Latein :|
Diesmal ist das Problem die Musiklautstärke(Z.: 81 - 91), er nimmt die Werte an aber immer nur den letzten, wenn ich überall "Case"'s davor setze nimmt er nur den letzten an.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Volume = 100

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #TrackBarGadget_0
EndEnumeration


If InitMovie() = 0
  MessageRequester("Error", "ERROR!", 0)
End
EndIf

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) And CreateGadgetList(WindowID(0))
EndIf

If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    MenuItem(0, "Öffne Datei")
    MenuItem(1, "Beenden")
EndIf



If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 10, 50, 80, 30,"Play")
    ButtonGadget(#Button_1, 10, 80, 80, 30,"Stop")
    ButtonGadget(#Button_2, 10, 110, 80,30,"Pause")
    TrackBarGadget(#TrackBarGadget_0, 5, 150, 287, 60, 0, 100,#PB_TrackBar_Ticks)
    GetGadgetState(#TrackBarGadget_0)
    SetGadgetAttribute(#TrackBarGadget_0,100,0)
    GadgetToolTip(#TrackBarGadget_0, "Volumen")
    ListViewGadget(80, 110, 50, 175, 100)
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview")   
    Next
    SetGadgetState(0, 9)
EndIf 

movieFirst = #True 

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
        movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 1)
        LoadMovie(1, MovieName$)
        Delay(10)
        movieLoaded = 1
        movieState  = 0
          Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
      
      Select EventGadget()
        Case #Button_0
            If movieFirst Or  MovieStatus(1) > 0
               movieFirst = #False
               PlayMovie(1, WindowID(0)) 
            Else
              ResumeMovie(1)
            EndIf 
        Case #Button_1
            StopMovie(1)
        Case #Button_2
            PauseMovie(1)
            

       Case   #TrackBarGadget_0
               SetGadgetState(#TrackBarGadget_0, 0)
               MovieAudio(1,0,0)
               
               #TrackbarGadget_0    
               SetGadgetState(#TrackBarGadget_0, 100)
               MovieAudio(1,100,0)
               
               #Trackbargadget_0        
               SetGadgetState(#TrackBarGadget_0,50)
               MovieAudio(1,50,0)
   
       
    EndSelect
  EndSelect
ForEver
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Volume = 100

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #TrackBarGadget_0
EndEnumeration


If InitMovie() = 0
  MessageRequester("Error", "ERROR!", 0)
End
EndIf

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) And CreateGadgetList(WindowID(0))
EndIf

If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    MenuItem(0, "Öffne Datei")
    MenuItem(1, "Beenden")
EndIf



If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 10, 50, 80, 30,"Play")
    ButtonGadget(#Button_1, 10, 80, 80, 30,"Stop")
    ButtonGadget(#Button_2, 10, 110, 80,30,"Pause")
    TrackBarGadget(#TrackBarGadget_0, 5, 150, 287, 60, 0, 100,#PB_TrackBar_Ticks)
    SetGadgetState(#TrackBarGadget_0,100) ; Änderung hier..
    SetGadgetAttribute(#TrackBarGadget_0,100,0)
    GadgetToolTip(#TrackBarGadget_0, "Volumen")
    ListViewGadget(80, 110, 50, 175, 100)
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview")   
    Next
    SetGadgetState(0, 9)
    
EndIf

movieFirst = #True

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
        movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 1)
        LoadMovie(1, MovieName$)
        Delay(10)
        movieLoaded = 1
        movieState  = 0
          Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
     
      Select EventGadget()
        Case #Button_0
            If movieFirst Or  MovieStatus(1) > 0
               movieFirst = #False
               PlayMovie(1, WindowID(0))
            Else
              ResumeMovie(1)
            EndIf
        Case #Button_1
            StopMovie(1)
        Case #Button_2
            PauseMovie(1)
           
      ;Änderung hier..
       Case   #TrackBarGadget_0
        If IsMovie(1)
          MovieAudio(1,GetGadgetState(#TrackBarGadget_0),0)
        EndIf

       
    EndSelect
  EndSelect
ForEver
Schau mal in die Hilfe. Ich glaube du kennst den unterschied zwischen SetGadgetAttribute() & SetGadgetState() nicht. ;)

Gruß Marvin
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

        If IsMovie(1)
          MovieAudio(1,GetGadgetState(#TrackBarGadget_0),0)
        EndIf 
@KruemelMonster
Von diesen IsMovie mußte noch ein paar einfügen, sonst gibts IMA :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Mir ist eben noch was aufgefallen..

Code: Alles auswählen

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) ;Hier -> And CreateGadgetList(WindowID(0))
EndIf

[...]
If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
[...]
Das obere CreateGadgetlist() ist zuviel... Den Befehl nur aufrufen wenn du
Gadgets erstellst (zumindest als Anfänger), gibt zwar keinen fehler da
#Window_0=0 und möglich; muss aber nicht sein..
KruemelMonster
Beiträge: 8
Registriert: 21.08.2008 01:19
Kontaktdaten:

Beitrag von KruemelMonster »

Danke für die tollen Tipps und Lösungen :)
So ein Hilfsbereites Board hab ich langen nicht mehr gesehen. <)

Da bin (schon) wieder, hab unwichtige Sachen gelöscht die ich nicht mehr brauch/brauchen werde und Kleinigkeiten hinzugefügt die ich irgendwann mal in Angriff nehmen will.

So wie ich es gemerkt habe, haben sich schon jetzt einige Fehler eingeschlichen, Der "Stop" Button hält den Player wohl(?) gänzlich an, selbst beim neuen öffnen einer Mp3 File reagiert er nicht. Auch das mehrmalige Betätigen des Play Buttons führt zum Anhalten der Musik File.

So und mein nächstes Problem ist das ich über den String den Titel sowie Interpreten anzeigen lassen will, trotzdem hab ich bis jetzt noch keine Lösung gefunden(Z.: 92-97). :(

Ps.: Was ist IMA?:oops:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Volume = 100

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #TrackBarGadget_0
EndEnumeration


If InitMovie() = 0
  MessageRequester("Error", "ERROR!", 0)
End
EndIf

If OpenWindow(#Window_0, 110, 110, 300, 200, "Player", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
EndIf

If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
      MenuItem(0, "Öffne Datei")
      MenuBar()
      MenuItem(2, "Playlist Öffnen")
      MenuItem(3, "Playlist Speichern")
      MenuBar()
      MenuItem(1, "Beenden")
   
    MenuTitle("Abspielen")
      MenuItem(5, "Pause")
      MenuItem(6, "Stop")
      MenuBar()
      MenuItem(7, "Wiederholen")
      MenuItem(8, "Zufallsmodus")
    MenuTitle("Optionen")
      MenuBar()
      MenuItem(9,"Einstellungen")
EndIf

If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#String_0, 15, 15, 270,21,"", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 10, 50, 80, 30,"Play")
    ButtonGadget(#Button_1, 10, 80, 80, 30,"Stop")
    ButtonGadget(#Button_2, 10, 110, 80,30,"Pause")
    TrackBarGadget(#TrackBarGadget_0, 5, 150, 287, 60, 0, 100,#PB_TrackBar_Ticks)
    SetGadgetState(#TrackBarGadget_0,100) ; Änderung hier..
    GadgetToolTip(#TrackBarGadget_0, "Volumen")
    ListViewGadget(80, 110, 50, 175, 100)
EndIf

movieFirst = #True

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break ; fenster schliessen wurde gedrückt
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; Öffne Datei
        movieName$ = OpenFileRequester("Bitte wählen sie den gewünschten Musiktitel!", "", "Audiodateien|*.mp3;*.avi;*.wav;*.mid;*.ram;*.wma;*.aif|Alle Dateien|*.*", 1)
        LoadMovie(1, MovieName$)
        Delay(10)
          Case 1; Beenden
          Break
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          If movieFirst Or  MovieStatus(1) > 0
               movieFirst = #False
               PlayMovie(1, WindowID(0))
               
              Else
              ResumeMovie(1)
         EndIf
        Case #Button_1
            If IsMovie(1)
              StopMovie(1)
            EndIf
        Case #Button_2
            If IsMovie(1)
              PauseMovie(1)
            EndIf
        Case   #TrackBarGadget_0      
          If IsMovie(1)
            MovieAudio(1,GetGadgetState(#TrackBarGadget_0),0)
          EndIf
          
        Case #String_0
          If 
            SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          EndIf
  
  
            
    EndSelect
  EndSelect
   
ForEver  
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

KruemelMonster hat geschrieben: Ps.: Was ist IMA?:oops:
Invalid Memory Access (ungültiger Speicherzugriff)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten