• Welcome to Valhalla Legends Archive.
 

[Python] Winamp controller class

Started by topaz, May 19, 2006, 07:39 PM

Previous topic - Next topic

topaz

My first Python program! Small stuff, but I see bigger things on the horizon ;)


__version__ = '1.0.0'
__author__ = 'topaz'
__copyright__ = 'BSD (Berkeley Software Distribution) License'

import win32api
import win32gui
import string
import os

WM_COMMAND = 0x400
WM_MSG = 273

class winamp:

    def __init__(me):
        #grabs handle at class initialization for further use
        me.handle = win32gui.FindWindow('Winamp v1.x', None)

    def execute():
        #function for executing winamp if not already open
        os.startfile('C:\Program Files\Winamp\winamp.exe')

    def play(me):
        win32api.SendMessage(me.handle, WM_MSG, 40045, 0)

    def setvol(me, volume):
        #Converts 1-100 scale to 1-255, as read by Winamp
        volume = volume * 2.55
        print volume

        win32api.SendMessage(me.handle, WM_COMMAND, volume, 122)
       
    def next(me):
        win32api.SendMessage(me.handle, WM_MSG, 40048, 0)

    def previous(me):
        win32api.SendMessage(me.handle, WM_MSG, 40044, 0)

    def close(me):
        win32api.SendMessage(me.handle, WM_MSG, 40001, 0)

    def stop(me):
        win32api.SendMessage(me.handle, WM_MSG, 40047, 0)

    def pause(me):
        #Note: this function is both for pausing and unpausing
        win32api.SendMessage(me.handle, WM_MSG, 40046, 0)

    def song(me):
        raw = win32gui.GetWindowText(me.handle)
        song = string.replace(raw, ' - Winamp', '')

        return song
       
    def bitrate(me):
        bitrate = win32api.SendMessage(me.handle, WM_COMMAND, 1, 126)
       
        return bitrate
   
    def playstatus(me):
        playstatus = win32api.SendMessage(me.handle, WM_COMMAND, 0, 104)
           
        if playstatus == 0:
            return 'Winamp is stopped.'
        elif playstatus == 1:
            return 'Winamp is playing.'
        elif playstatus == 3:
            return 'Winamp is paused.'
        else:
            return 'Unrecognized Winamp status.'


usage:

Quoteimport winamp
winamp = winamp.winamp()
winamp.play()

Thanks to Banana fanna fo fanna for his help in learning Python.
RLY...?

Banana fanna fo fanna

A little bit of advice:

- Naming conventions: CamelCase class names, lowercase_underscored method, function, and variable names
- Properties: it might be a little bit nicer to say winamp.volume = 100 rather than winamp.setvol(100). A simple example of properties should serve you nicely:


class TestProperties(object): # must extend object, new-style classes
    def get_prop(self):
        return "get_prop()"
    def set_prop(self, value):
        print "setting",value
    prop = property(get_prop, set_prop)


Also, the convention is to use "self" instead of "me", but it doesn't really matter.