Hi,
ich suche ein Modul welches viele Funktionen für die Soundausgabe bereithält aber dennoch möglichst auf einer High Level Schicht arbeitet.
Ich habe mir Pygame angeschaut welches fast alles bietet was ich brauche bis auf eine Funktion: Das setzen der Position im Musikstream.
Kennt jemand ein Modul welches meinen Anforderungen entspricht?
Schöne Grüße
Miko
Mit Python Sound ausgeben?
Die gibts auf sourceforge nur für Windows. Ich brauch aber was für Linux! Das braucht auch nicht auf Windows laufen. Es reicht wenn die Unixe abgedeckt sind da ich das ganze eh für ein curses Programm verwende.
Dazu ist pysonic auch noch sehr alt. Ich schlage vor wxPython zu verwenden. Hier ist ein Beispiel:
Code: Alles auswählen
# experiment with wxPython's
# wx.media.MediaCtrl(parent, id, pos, size, style, backend)
# the correct backend is usually figured by the control
# wxMEDIABACKEND_DIRECTSHOW Windows
# wxMEDIABACKEND_QUICKTIME Mac OS X
# wxMEDIABACKEND_GSTREAMER Linux
# plays .mid .mp3 .wav .au .avi .mpg
import wx
import wx.media
import os
class MyPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, -1,
style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN)
try:
self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER)
except NotImplementedError:
self.Destroy()
raise
loadButton = wx.Button(self, -1, "Load File")
self.Bind(wx.EVT_BUTTON, self.onLoadFile, loadButton)
playButton = wx.Button(self, -1, "Play")
self.Bind(wx.EVT_BUTTON, self.onPlay, playButton)
pauseButton = wx.Button(self, -1, "Pause")
self.Bind(wx.EVT_BUTTON, self.onPause, pauseButton)
stopButton = wx.Button(self, -1, "Stop")
self.Bind(wx.EVT_BUTTON, self.onStop, stopButton)
ext = ".mid .mp3 .wav .au .avi .mpg"
self.st_file = wx.StaticText(self, -1, ext, size=(200,-1))
self.st_size = wx.StaticText(self, -1, size=(100,-1))
self.st_len = wx.StaticText(self, -1, size=(100,-1))
self.st_pos = wx.StaticText(self, -1, size=(100,-1))
# setup the button and label layout using a sizer
sizer = wx.GridBagSizer(5,5)
sizer.Add(loadButton, (1,1))
sizer.Add(playButton, (2,1))
sizer.Add(pauseButton, (3,1))
sizer.Add(stopButton, (4,1))
sizer.Add(self.st_file, (1, 2))
sizer.Add(self.st_size, (2, 2))
sizer.Add(self.st_len, (3, 2))
sizer.Add(self.st_pos, (4, 2))
# for .avi .mpg video files
sizer.Add(self.mc, (5,1), span=(5,1))
self.SetSizer(sizer)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.onTimer)
self.timer.Start(100)
def onLoadFile(self, evt):
dlg = wx.FileDialog(self, message="Choose a media file",
defaultDir=os.getcwd(), defaultFile="",
style=wx.OPEN|wx.CHANGE_DIR )
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
self.doLoadFile(path)
dlg.Destroy()
def doLoadFile(self, path):
if not self.mc.Load(path):
wx.MessageBox("Unable to load %s: Unsupported format?" % path,
"ERROR", wx.ICON_ERROR | wx.OK)
else:
folder, filename = os.path.split(path)
self.st_file.SetLabel('%s' % filename)
self.GetSizer().Layout()
self.mc.Play()
def onPlay(self, evt):
self.mc.Play()
def onPause(self, evt):
self.mc.Pause()
def onStop(self, evt):
self.mc.Stop()
def onTimer(self, evt):
offset = self.mc.Tell()
self.st_size.SetLabel('size: %s ms' % self.mc.Length())
#self.st_len.SetLabel('( %d seconds )' % (self.mc.Length()/1000))
self.st_pos.SetLabel('position: %d ms' % offset)
app = wx.PySimpleApp()
# create a frame, no parent, -1 is default ID
frame = wx.Frame(None, -1, "play audio and video files", size = (320, 350))
MyPanel(frame, -1)
frame.Show(True)
app.MainLoop()
Atomkraftwerkaktienbesitzer
Danke für die Antworten. Aber es soll eine konsolen Anwendung werden und möglichst auf zusätzliche Installationen (besonders in so großem Umfang wie wx) verzichten.
Deswegen kommt wx für mich nicht in Frage.
Außerdem bekomme ich bei deinem Beispiel einen merkwürdigen Fehler wenn ich das Programm starte:
Traceback (most recent call last):
File "wx_sound_test.py", line 97, in ?
MyPanel(frame, -1)
File "wx_sound_test.py", line 18, in __init__
self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER)
File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/media.py", line 96, in __init__
newobj = _media.new_MediaCtrl(*args, **kwargs)
NotImplementedError
Vielleicht meldet sich ja auch der ein oder andere der schon mehrere sound Libaries angeguckt hat und etwas Erfahrung hat.
Deswegen kommt wx für mich nicht in Frage.
Außerdem bekomme ich bei deinem Beispiel einen merkwürdigen Fehler wenn ich das Programm starte:
Traceback (most recent call last):
File "wx_sound_test.py", line 97, in ?
MyPanel(frame, -1)
File "wx_sound_test.py", line 18, in __init__
self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER)
File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/media.py", line 96, in __init__
newobj = _media.new_MediaCtrl(*args, **kwargs)
NotImplementedError
Vielleicht meldet sich ja auch der ein oder andere der schon mehrere sound Libaries angeguckt hat und etwas Erfahrung hat.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Unter Linux bietet sich das gstreamer mit seinem Python-Binding an. Benutzt habe ich es nicht, wohl aber in Python geschriebene Mediaplayer gesehen, die das nutzen, scheint also funktionsfähig zu sein.
pysonic und FMOD sollten auch unter Linux gehen. Das Problem ist das FMOD non-free ist und ich sowas nur höchst ungerne einsetzen würde. Aber wenn dir das egal ist, kannst du auch diesen Weg gehen.
pysonic und FMOD sollten auch unter Linux gehen. Das Problem ist das FMOD non-free ist und ich sowas nur höchst ungerne einsetzen würde. Aber wenn dir das egal ist, kannst du auch diesen Weg gehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hättest du vielleicht auch ein Tutorial dazu? Die Sachen die ich im Netz gefunden hab sind nicht sonderlich toll.
Wenn FMOD nicht Open Source ist will ich es nicht wirklich benutzen. Pysonic für Linux war nicht auf den Sourceforge Seiten.
Wenn FMOD nicht Open Source ist will ich es nicht wirklich benutzen. Pysonic für Linux war nicht auf den Sourceforge Seiten.
Die Python Tutorials sind alle mit GTK.
Ich hab mir sowas wie bei Pygame erhofft:
http://www.pygame.org/docs/ref/mixer.ht ... ixer.Sound
Aber danke für deine Hilfe. Ich will ja nicht undankbar erscheinen
Ich hab mir sowas wie bei Pygame erhofft:
http://www.pygame.org/docs/ref/mixer.ht ... ixer.Sound
Aber danke für deine Hilfe. Ich will ja nicht undankbar erscheinen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann lass es halt weg. Ich bin mir aber nicht sicher ob du ohne GLib-Mainloop auskommst.Miko hat geschrieben:Die Python Tutorials sind alle mit GTK.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice