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

2005-05-04 Thread Erik Osheim
Hello list,

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.

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.

Please include me in the replies since I am not a subscriber to this
list (yet ;) ).

Thanks,

-- Erik
___
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig


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

2005-05-04 Thread Bob Ippolito
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@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig


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

2005-05-04 Thread Robert Brown
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 thelast couple of years (http://www.bearhome.net/mpy3) and it is gettingpretty good these days. I have added keybindings to control volume inlinux using the ossaudiodev module found in python.I wanted to do the same thing under OS X which I am now trying tofully support. After some digging, it looked to me like Carbon.Snd wasthe ticket. However, I can't find any documentation on this module; Idid some digging in Apple provided docs, and was able to get asemi-working, semi-broken version of volume control going (mutes oneear, controls the volume of the other), but I am not sure this will doit.My questions are:1. Does anyone have a good idea how to go about doing this best on OSX? I am not going to be able to support OS 9 (too many unixdependencies) so if there is a cleaner way to do it than Carbon Iwould 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 timefiguring 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@python.orghttp://mail.python.org/mailman/listinfo/pythonmac-sig  --- Robb Brown Seaman Family MR Research Centre Calgary, Alberta, Canada  ___
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig


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

2005-05-04 Thread Bob Ippolito
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@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@python.org
 http://mail.python.org/mailman/listinfo/pythonmac-sig


___
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig