我正在製作一個音板程序。該窗口由以下SoundPlayer類的多個實例組成。運行我的程序時,音量滑塊不會影響他們自己的播放器。最後啓動的播放器的音量滑塊控制整個節目的音量。我已經打印出了audioObjects,volumeSliders等的所有實例,並且它們之間沒有任何玩家共享。我讓每個播放器打印出音量,使用正確的音量滑塊確實會改變音量(audioOutput.volume()),但沒有聽覺效果。使用上次啓動的音量滑塊時,其他播放器的audioOutput音量不會更改音量值,但仍有聲音效果。我感到茫然,因爲這在多臺Windows機器上工作得很好,但在Ubuntu 12.04上沒有問題。在其他地方尋求幫助並在多臺機器上運行後,我開始認爲這是一個PySide/Phonon與Linux的問題?多聲子audioOutput實例在Linux上無法正常工作?
編輯:似乎問題更多地與audioOutput。我將一些按鈕連接到了.setVolume()並手動調整了音量,並且像以前一樣調出了相同的音量。只有最後啓動的播放器的音量實際上會影響可聽聲音,並且爲每個播放器都這樣做。關鍵部分包括創建audioOutputs和MediaObjects的createAttr()/ loadAttr()以及創建音量滑塊的setupUi()。)
class SoundPlayer():
def __init__(self, MainWindow, position, instance, attributes):
self.instance = instance
self.mainWindow = MainWindow
self.pos = position
self.setupUi(self.pos)
if attributes == '':
self.createAttr()
self.attributes = [self.name, self.filename]
else:
self.attributes = attributes
self.loadAttr()
self.buttons()
self.directory = QDesktopServices.storageLocation(QDesktopServices.MusicLocation)
def updateDevice(self, device):
self.audio.setOutputDevice(device)
Phonon.createPath(self.media, self.audio)
def loadAttr(self):
self.name = self.attributes[0]
self.filename = self.attributes[1]
self.media = Phonon.MediaObject(self.instance)
self.audio = Phonon.AudioOutput(Phonon.MusicCategory, self.instance)
self.source = Phonon.MediaSource(self.filename)
Phonon.createPath(self.media, self.audio)
self.label.setText(self.name)
self.updateUi()
def createAttr(self):
self.filename = ''
self.name = 'None'
self.media = Phonon.MediaObject(self.instance)
self.audio = Phonon.AudioOutput(Phonon.MusicCategory, self.instance)
self.source = Phonon.MediaSource(self.filename)
Phonon.createPath(self.media, self.audio)
self.media.stateChanged.connect(lambda x,y: self.changed(x,y))
self.label.setText(self.name)
self.updateUi()
def saveAttr(self):
self.attributes = [self.name, self.filename]
def buttons(self):
self.playButton.clicked.connect(self.onplaybutton())
self.resetButton.clicked.connect(self.onresetbutton())
self.stopButton.clicked.connect(self.onstopbutton())
self.optionButton.clicked.connect(self.optionDialog())
def onplaybutton(self):
state = self.media.state()
if state != Phonon.State.PausedState and state != Phonon.State.PlayingState:
self.playButton.setIcon(QtGui.QIcon(":pause.png"))
self.media.setCurrentSource(self.source)
self.media.play()
elif state == Phonon.State.PlayingState:
self.playButton.setIcon(QtGui.QIcon(":play.png"))
self.media.pause()
elif state == Phonon.State.PausedState:
self.playButton.setIcon(QtGui.QIcon(":pause.png"))
time = self.media.currentTime()
self.media.play()
self.media.seek(time)
def onresetbutton(self):
self.media.setCurrentSource(self.source)
self.media.play()
self.playButton.setIcon(QtGui.QIcon(":pause.png"))
def onstopbutton(self):
self.media.stop()
self.playButton.setIcon(QtGui.QIcon(":play.png"))
def updateUi(self):
self.seek = Phonon.SeekSlider(self.media, self.widget)
self.seek.resize(111, 21)
self.seek.show()
self.volume = Phonon.VolumeSlider(self.audio, self.volumeWidget)
self.volume.resize(111, 21)
self.volume.show()
self.playButton.setIcon(QtGui.QIcon(":play.png"))
self.media.stateChanged.connect(lambda x,y: self.changed(x,y))
注意,鏈接只有答案在這裏氣餒的SO。請考慮[編輯您的答案](http://meta.stackexchange.com/a/8259/186599)並在此處添加摘要。 – NAZIK