2014-10-22 3 views
0

Я пытаюсь создать небольшой пользовательский микшер, который подходит для моих потребностей, используя python 2.7 и pyalsaaudio 0.7, но я застрял в событиях, полученных от alsamixer, когда другая программа меняет значения громкости. Я попытался понять, как работают другие микшеры (например, volti), и, насколько я понимаю, он должен работать так, как ожидалось, но даже если метод схож, я все равно получаю непрерывный цикл ответа на событие от io_add_watch. Итак, я полагаю, что я не понимаю, как работает io_add_watch.gobject.io_add_watch непрерывный обратный вызов от pyalsaaudio

Это небольшая версия кода:

class MyMixer(gtk.Window): 
    def __init__(self): 
     super(MyMixer, self).__init__() 
     self.m = alsaaudio.Mixer(control='Headphone', id=1, cardindex=0) 
     """ here go the mixer widgets """ 
     self.show_all() 
     fd, event = self.m.polldescriptors()[0] 
     self.watch = gobject.io_add_watch(fd, event, self.update) 


    def update(self, *args): 
     print 'changed' 
     """ here I update mixer widgets """ 
     return True 

mixer = MyMixer() 
gtk.main() 

Что я получаю неправильно?

ответ

0

Когда вы получаете событие из описателей опроса, вы должны позвонить snd_mixer_handle_events(). pyalsaaudio не имеет механизма для этого.

+0

Я нашел патч, представленный для этого, но, если я правильно понимаю, он просто позволяет мне обрабатывать определенные события, что не является моей проблемой: моя проблема в том, что после изменения значения в микшере я получаю непрерывные события, а я не знаю, как «остановить» его. Я все еще начинающий питон, и, возможно, я, возможно, не понял, как работает опрос. – musicamante

+1

Вы получаете непрерывные события, потому что события не обрабатываются. –

+0

Хорошо, я посмотрю, смогу ли я исправить этот патч, спасибо. – musicamante

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