首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个Phonon实例在linux上不能正常工作?

多个Phonon实例在linux上不能正常工作?
EN

Stack Overflow用户
提问于 2012-07-05 05:11:53
回答 1查看 423关注 0票数 1

我在做一个声板程序。该窗口由以下SoundPlayer类的多个实例填充。当运行我的程序时,音量滑块不会影响它们自己的播放器。最后启动的播放器的音量滑块控制整个程序的音量。我已经打印出了audioObjects、volumeSliders等的所有实例,它们都不会在玩家之间共享。我让每个播放器打印出它的音量,使用正确的音量滑块确实改变了音量(audioOutput.volume()),但没有声音效果。使用最后初始化的音量滑块,其他播放器的audioOutput音量不会改变音量值,但仍有声音效果。我不知所措,因为它在多个Windows机器上都能很好地工作,但在ubuntu 12.04上却不行。在其他地方寻求帮助并在多台机器上运行此程序后,我开始认为这是linux的PySide/Phonon问题?

编辑:似乎问题更多地出在audioOutput上。我将一些按钮连接到.setVolume(),并手动调节音量,结果和以前一样。只有最后启动的播放器的音量才会实际影响可听声音,并且对每个播放器都是如此。

SoundPlayer类:(为简洁起见,对一些ui设置进行了修剪。关键部分包括createAttr()/loadAttr(),其中创建了audioOutputs和MediaObjects,以及setupUi(),其中创建了音量滑块。)

代码语言:javascript
运行
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 13:43:14

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11335497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档