[Pythonmac-SIG] getting/setting system volume in OS X with python?

Bob Ippolito bob at redivi.com
Thu May 5 05:19:02 CEST 2005


I was thinking specifically of AppleScript and SoundManager when I  
said "There are a couple other ways, but they're all really, really  
old and deprecated and often behave strangely".

On May 4, 2005, at 11:07 PM, Robert Brown wrote:

> You could use Applescript to do it too.  But PyObjC is really a  
> wonderful tool.
>
>
> On 4-May-05, at 8:35 PM, Bob Ippolito wrote:
>
>> On May 4, 2005, at 9:51 PM, Erik Osheim wrote:
>>
>>
>>> I've been developing a curses-based music player in python for the
>>> last couple of years (http://www.bearhome.net/mpy3) and it is  
>>> getting
>>> pretty good these days. I have added keybindings to control  
>>> volume in
>>> linux using the ossaudiodev module found in python.
>>>
>>> I wanted to do the same thing under OS X which I am now trying to
>>> fully support. After some digging, it looked to me like  
>>> Carbon.Snd was
>>> the ticket. However, I can't find any documentation on this  
>>> module; I
>>> did some digging in Apple provided docs, and was able to get a
>>> semi-working, semi-broken version of volume control going (mutes one
>>> ear, controls the volume of the other), but I am not sure this  
>>> will do
>>> it.
>>>
>>> My questions are:
>>>
>>> 1. Does anyone have a good idea how to go about doing this best  
>>> on OS
>>> X? I am not going to be able to support OS 9 (too many unix
>>> dependencies) so if there is a cleaner way to do it than Carbon I
>>> would be interested.
>>>
>>
>> The best way to do it on OS X is to use CoreAudio, but none of that
>> is wrapped in Python.  You can, however, find an Objective-C
>> framework that wraps what you need (MTCoreAudio should be able to do
>> it, but there might be something easier) and just call into that with
>> PyObjC.
>>
>> There are a couple other ways, but they're all really, really old and
>> deprecated and they often behave pretty strangely.
>>
>>
>>> 2. Is there anywhere to get better docs on things like ae*,  
>>> Carbon.*,
>>> etc? It seems like python for mac is incredibly powerful but arcane,
>>> and between no documentation and no doc strings I have a hard time
>>> figuring out what I can do with it.
>>>
>>
>> The first thing you should do is look for another way to do it, with
>> PyObjC or some POSIX API (but probably PyObjC).  There's a very
>> straightforward translation between Objective-C and Python, so you
>> use Apple's Cocoa docs when developing with PyObjC.
>>
>> If there is no way to do what you need with just PyObjC, you should
>> consider just writing a little Objective-C wrapper that does what you
>> need to do (calling into Carbon, CoreFoundation etc.), and call into
>> that from PyObjC.  Use the Apple documentation.  Unfortunately this
>> does require knowing C, but the ONLY documentation and the ONLY
>> supported APIs are for C and Objective-C.  Most of the time, in my
>> experience, it's just quicker to write and debug the code (i.e.
>> QuickTime related stuff) in Objective-C and call into it from PyObjC.
>>
>> If you still feel the need to try and do it with "pure Python", then
>> read the Apple documentation for the relevant function(s) in C, and
>> then guess at how it would be done from Python.  Everything in
>> Carbon.* is automatically generated, but there are a bunch of special
>> cases and the rules are a bit strange.  These modules would sooner go
>> away than become documented.  Don't be surprised if there's a bug in
>> the wrapper or some function call sequence is impossible because the
>> wrapper won't let you pass NULL somewhere, etc.  Writing code using
>> undocumented modules that may be broken is no fun.
>>
>> -bob
>>
>> _______________________________________________
>> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
>> http://mail.python.org/mailman/listinfo/pythonmac-sig
>>
>
> ---------------------------------------------------
> Robb Brown
> Seaman Family MR Research Centre
> Calgary, Alberta, Canada
>
> _______________________________________________
> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig
>



More information about the Pythonmac-SIG mailing list