2012-07-04 2 views
1

Я работаю над программой деки. Окно заполнено несколькими экземплярами нижележащего класса SoundPlayer. При запуске моей программы ползунки уровня не влияют на их собственный плеер. Ползунок громкости последнего инициированного проигрывателя контролирует громкость для всей программы. Я распечатал все экземпляры audioObjects, volumeSliders и т. Д., И ни один из них не делится между игроками. У каждого игрока была распечатка его объема, и использование правильных ползунков громкости меняет громкость (audioOutput.volume()), но без слышимого эффекта. Используя последний начальный слайдер громкости, громкость аудиовыхода для других игроков не изменяет значение громкости, но при этом слышимый эффект. Я не понимаю, так как это работает отлично на нескольких компьютерах Windows, но не на ubuntu 12.04. После поиска помощи в другом месте и запуска этого на нескольких машинах, я начинаю думать, что это проблема PySide/Phonon с Linux?Несколько экземпляров аудиопотока Phonon не работают должным образом в linux?

РЕДАКТИРОВАТЬ: Похоже, проблема кроется в большей мере с аудиовыпуском. Я подключил некоторые кнопки к .setVolume() и вручную отрегулировал громкость, и он прослушал то же самое, что и раньше. Только громкость последнего инициированного игрока влияет на звуковой звук и делает это для каждого игрока.

SoundPlayer класс: (.. Некоторые из настроек пользовательского интерфейса до подрезали для краткости Основные части включают createAttr()/loadAttr(), где создаются audioOutputs и MediaObjects и 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)) 

ответ

0

Скорее всего, не ваша вина: https://bugs.kde.org/show_bug.cgi?id=321288

+0

Обратите внимание, что ссылка только для ответов не рекомендуется здесь на SO. Пожалуйста, рассмотрите [редактирование ответа] (http://meta.stackexchange.com/a/8259/186599) и добавьте здесь резюме. – NAZIK

Смежные вопросы