Bem-vindo: Qua, 27 de Novembro 2024, 3:41 Pesquisa avançada

Applet de som para OSS4

Escreveu alguma aplicação ou script que quer partilhar? Ou conhece algo que quer partilhar? Sabe alguma linguagem de programação e quer partilhar esse conhecimento com um tutorial? Tem alguma dúvida em alguma linguagem? Então este é o sítio certo.

Applet de som para OSS4

Mensagempor mrk3004 » Seg, 5 de Setembro 2011, 9:22

Python é uma linguagem muito chata, nunca fui com a cara dela, preferiria programar em assembly do que em python (ok ok , não exagera kk) mas agora já não tem mais jeito, tive que me redimir e aprende-la. Uma das minhas primeiras aventuras foi criar um controle de volume simples e funcional para o OSS4.

Código: Selecionar todos
#!/usr/bin/env python
#-*- coding: ISO-8859-1 -*-

#
#            Uma criação de Mrk3004 - Vinycius Maia
#                Versão: 1.0 | Revisão: 0.5.3
#
#             Este é um software de código livre
#          e pode ser modificado de qualquer maneira
#        desde que sejam mantidos os devidos créditos
#              ao autor do script. Faça bom uso.
#
#
# Class TrayIcon:        >> Icone de Notificação
#
#       - clickEvent         >> Ações do Click
#       - update             >> Atualiza Icone
#       - getVolume          >> Pega o volume atual (float)
#
# Class TrayTrackGTK:    >> Popup no icone de notificação
#
#       - criar                     >> Cria janela
#       - getCordenadasTrayIcon     >> Pega cordenadas do Tray
#       - fechar                    >> Fecha janela
#       - TrackMotion_event         >> Ajusta volume ao mover o track
#

import gtk
import pygtk
import gobject
import egg.trayicon
import subprocess
import os

# Configuração Geral
Mixer  = "ossmix"         # Programa controlador do mixer
Controle = "vol"          # Mixer Controlável
VolumeMaximo = 100        # Volume máximo para o mixer selecionado
VolumeMinimo = 30         # Volume mínimo para o mixer selecionado
TrackText = True          # Mostrar Texto na popup do tray
TrackWidth = 40           # Tamanho horizontal da popup
TrackHeight = 150         # Tamanho vertical da popup

class TrayIcon():
    def __init__(self):
   self.trayicon = egg.trayicon.TrayIcon("")
   self.icone = gtk.Image()
   self.icone_atual = ""

   self.tray_eventbox = gtk.EventBox()
       self.tray_eventbox.add(self.icone)
       self.tray_eventbox.connect("button_press_event", self.clickEvent)
       self.trayicon.add(self.tray_eventbox)
       self.trayicon.show_all()

        self.TrayTrackPopup = TrayTrackGTK()
       self.TrayTrackPopup_exists = False

        self.update()

    def clickEvent(self, widget, event):
   # Fix para a amplificação dos mixers
   #subprocess.call([Mixer, "video", "--", "120"])
   #subprocess.call([Mixer, "mono", "--", "120"])
   #subprocess.call([Mixer, "speaker", "--", "120"])
   #subprocess.call([Mixer, "pcm", "--", "120"])
   #subprocess.call([Mixer, "igain", "--", "120"])
   #subprocess.call([Mixer, "vmix0.pcm1", "--", "120"])
   #subprocess.call([Mixer, "vmix0.pcm2", "--", "120"])
   #subprocess.call([Mixer, "vmix0.pcm3", "--", "120"])
   #subprocess.call([Mixer, "vmix0.pcm4", "--", "120"])
   #subprocess.call([Mixer, "vmix0.pcm5", "--", "120"])
   #subprocess.call([Mixer, "vmix0-outvol", "--", "120"])
   #subprocess.call([Mixer, "vmix0-invol", "--", "120"])

      if event.button == 1:
         if self.TrayTrackPopup_exists:
          self.TrayTrackPopup.fechar()
          self.TrayTrackPopup_exists = False
         else:
          self.TrayTrackPopup.criar()
          self.TrayTrackPopup_exists = True
       #elif event.button == 3:
         #   subprocess.Popen(["notify-send", "Controle de Volume para OSS4", "Uma criação de Mrk3004 - Vinycius Maia"])
        self.update()

    def update(self):
       volume = self.getVolume()
   if VolumeMaximo <= 35:
        if volume == VolumeMinimo:
            status = "muted"
        elif volume > (VolumeMaximo /2) +7:
            status = "high"
        elif volume >= (VolumeMaximo /2):
            status = "medium"
        elif volume > VolumeMinimo:
            status = "low"
   else:
    if volume == VolumeMinimo:
            status = "muted"
        elif volume > (VolumeMaximo /2) +30:
            status = "high"
        elif volume >= (VolumeMaximo /2):
            status = "medium"
        elif volume > VolumeMinimo:
            status = "low"

       if status != self.icone_atual:
            self.icone.set_from_icon_name("audio-volume-"+status, 0)
            self.icone_atual = status;

    def getVolume(self):
        process = subprocess.Popen([Mixer, Controle], stdout=subprocess.PIPE)
        volume = float(process.communicate()[0].split()[-1].split(':')[0])
        process.wait()
        return volume

class TrayTrackGTK:
    def criar(self):

   # Cria Janela
        self.scale_window = gtk.Window(type=gtk.WINDOW_POPUP)

   # Tamanho
   self.track_width = TrackWidth
        self.track_height = TrackHeight

   # Pegar Cordenadas da Tray
        track_cordenadas = self.getCordenadasTrayIcon(voltray.icone,self.track_height,self.track_width)

   # Colocar janela da cordenada
        self.scale_window.move(track_cordenadas[0],track_cordenadas[1])

        self.scale = gtk.VScale()

   # Definições
        self.scale.set_update_policy(gtk.UPDATE_CONTINUOUS)
        self.scale.set_digits(1)
        self.scale.set_value_pos(gtk.POS_TOP)
        self.scale.set_draw_value(TrackText)
        self.scale.set_inverted(True)
        self.scale.set_range(VolumeMinimo, VolumeMaximo)

        self.scale.set_size_request(self.track_width,self.track_height)
        self.scale.set_value(voltray.getVolume())

   # Linka os eventos
        self.scale.connect("motion_notify_event", self.TrackMotion_event)
        self.scale_window.add(self.scale)

   # Mostra na tela
        self.scale_window.show_all()

    def getCordenadasTrayIcon(self,trayicon,track_height,windows_width):
        track_cordenadas=trayicon.window.get_origin()
        size=trayicon.window.get_size()
        screen=trayicon.window.get_screen()
        screen_height=screen.get_height()

   if track_cordenadas[1] <= track_height:
            y=track_cordenadas[1]+size[1]
        else:
            y=track_cordenadas[1]-track_height

        msg_xy=(track_cordenadas[0],y)
        return msg_xy

    def fechar(self):
        self.scale_window.destroy()

    def TrackMotion_event(self,widget,event):
         volume = int(self.scale.get_value())
         if volume > 100:
           subprocess.call([Mixer, Controle, "--", "100"])
         elif volume < 0:
          subprocess.call([Mixer, Controle, "--", "0"])
         else:
           subprocess.call([Mixer, Controle, "--", "%d" % volume])
         voltray.update()

if __name__ == "__main__":
    voltray = TrayIcon()
    gtk.main()


Paste: http://paste.ubuntu.com/666498/

Agora tenho um desafio.... Como já devem saber que a egg.trayicon foi substituida por gtk.StatusIcon e, óbviamente se tornou obsoleta, o desafio é atualizar esse script... praticamente vou ter que recriar o applet rs

Mas esse ainda pode esperar um pouco, já que é só a fins de estudo mesmo rsrs
O gato imortal existe, em algum mundo intermediário entre a vida e a morte, observando e esperando, passivo até o momento em que o espírito humano se torna livre. Então, e somente então, ele irá liderar a alma até seu repouso final.
Avatar do usuário
mrk3004
 
Mensagens: 23
Registrado em: 05 Setembro, 2011

Voltar para Scripts, programação e aplicações em desenvolvimento

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante