Hallo und schönen Sonntag,
ich habe mal wieder ein Problem, da es aber nur entfernt etwas mit dem Raspberry zu tun hat, ich aber eure Hilfe schätze, entsteht das Thema hier im Offtopic-Bereich.
Vor einigen Monaten habe ich mit eurer Hilfe ein kleines Internetradio-Programm in Python geschrieben. Für ein Projekt das auch ein Internetradio besitzen soll, wollte ich die Funktion aus diesem Code übernehmen. Um sicher zu sein, dass der Code, den ich übernehmen will, auch funktioniert habe ich ihn getestet. Dabei kam folgendes raus:
*.py ausführbar gemacht und geöffnet, Radio funktioniert.
*.py in Thonny geöffnet und ausgeführt, Radio funktioniert auch.
*.py in PyCharm geöffnet und ausgeführt, Radio funktioniert nicht.
Das Projekt, dass den Code vom Internetradio enthalten soll, möchte ich in PyCharm schreiben, da ich da eine virtuelle Entwicklungsumgebung habe und ich somit einfacher Module zum Projekt hinzufügen kann. Auch finde ich die Hilfen zur Codedarstellung sehr nützlich.
Installiert habe ich im aktuellen PyCharm-Projekt diese Module:
- Kivy
-Kivy-Garden
-Pygements
-certifi
-chardet
-docutils
-idna
-pip
-python-vlc
-redcmd
-redlib
-requests
-setuptools
-six
-urllib3
-vlc-controller
-vlc-ctrl
-vlcplaylister
-vlcradio
-zope.interface
Das Programm, das in Thonny und als ausführbare Datei funktioniert und nur in PyCharm nicht, sieht so aus:
#!/usr/bin/env python3
import tkinter
import vlc
class MyApp(tkinter.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
"""Diese Funktion erstellt die Bedienelemente"""
self.sender = {
"Radio Bob":
"http://streams.radiobob.de/bob-live/mp3-192/mediaplayer",
"Rock Antenne":
"http://mp3channels.webradio.rockantenne.de/alternative"
}
self.instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
self.player = self.instance.media_player_new()
self.sender.keys()
self.legend = tkinter.StringVar()
self.legend.set("Senderwahl")
self.choicebox = tkinter.OptionMenu(
self, self.legend, *self.sender.keys(),
command=self.switch_radio
)
self.choicebox.pack()
self.buttonplay = tkinter.Button(
self, text="Play",
command=self.player.play
)
self.buttonplay.pack(side="right")
self.buttonstop = tkinter.Button(
self, text="Pause",
command=self.player.pause
)
self.buttonstop.pack(side="right")
def switch_radio(self, sender):
url = self.sender[self.legend.get()]
media = self.instance.media_new(url)
media.get_mrl()
self.player.set_media(media)
print(url)
def main():
root = tkinter.Tk()
app = MyApp(root)
app.mainloop()
if __name__ == "__main__":
main()
Alles anzeigen
Starte ich es in PyCharm erhalte ich als erstes diese Fehlermeldungen:
[000055df15c01a50] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[000055df15ac4390] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
Das tkinter-GUI öffnet sich zwar, aber wenn ich einen Sender auswählen und auf Play klicke, bekomme ich weitere Fehlermeldungen:
[00007fe6c8008ee0] prefetch stream error: unimplemented query (264) in control
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
[000055fee042f390] alsa audio output error: cannot open ALSA device "default": Connection refused
[000055fee042f390] main audio output error: Audio output failed
[000055fee042f390] main audio output error: The audio device "default" could not be used:
Connection refused.
[000055fee042f390] main audio output error: module not functional
[00007fe6c8061a00] main decoder error: failed to create audio output
Im Internet kommen einige Themen zu diesen Fehlern, aber die beziehen sich alle darauf, dass der Code auf dem System an sich nicht funktioniert. Das geht bei mir aber. Speziell zu der Entwicklungsumgebung in PyCharm konnte ich nichts finden.
Ich benutze Python 3.9 und das läuft alles auf Fedora33.
Noch als Zusatzinfo: Das ganze soll später eine Musik-Box werden, die unterschiedliche Internetradio-Sender abspielen kann, dann soll sie Musik die auf einer Cloud hinterlegt ist abspielen können und bei Bedarf soll sie nur als Verstärker für Bluetooth-Geräte dienen. Das soll dann ein Raspberry mit Touch-Display übernehmen (Deswegen auch kivy). Nur ist es für mich viel angenhemer das Projekt mit dem Laptop zu schreiben und Fehler zu beheben, deswegen PyCharm.
Eventuell hatte von euch schon jemand das Problem oder kann mit dem Fehler mehr anfangen wie ich
Vielen Dank und Grüße
Dennis