Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

I have an AppleScript which plays audio files using Play (from hieper.nl) unix cli app.

I would like to find a command line play program with which I can set the volume without touching system output volume. EyeTV has its own volume setting and it's nice to change the volume of EyeTV without changing system volume.

It would be nice if I could pause playing and quit it some other way than using kill.

share|improve this question

1 Answer 1

afplay might do what you need. It's a built-in utility, so no need to download or build anything.

It's fairly basic, but it does include volume control independent of the system volume.

To play a file, simply run afplay somefile.mp3. To alter the volume, you can use the -v switch, followed by a number (in my testing, the range seems to go from 0-2, with 1 being normal volume). So afplay anotherfile.m4a -v 0.5 would play at half the normal volume.

Playback control can be done with some basic Unix signalling to afplay:

kill -17 <pid> # pause playback
kill -19 <pid> # resume playback

There are also a few other options you can see by running afplay -h.

share|improve this answer
    
Thanks for patrix for pointing out how to pause/resume playback. –  robmathers Apr 1 '13 at 17:48
    
I'm afraid volume control is unavailable. When I run afplay sound.wav -v 0.5 I got: may only specify one file to play And then a short description of the available commands, in which -v states for "verbose" and gives technical details of the sound being played. –  user52070 Jun 25 '13 at 21:34
1  
@Norber what version of OS X are you running? On both 10.7 and 10.8, the options I specified are valid (and there's no verbose option). It's possible this is different in 10.6 or earlier. –  robmathers Jun 26 '13 at 15:58
    
I added a couple of bash scripts to make playing and pausing easier: function pid_for_name() { ps -A | grep -m1 $1 | awk '{print $1}' } function pause_af { kill -17 $(pid_for_name afplay) } function play_af { kill -19 $(pid_for_name afplay) } or nicely formatted here: gist.github.com/agrberg/7a09dea9a4ac545decb7 –  Aaron Dec 5 at 16:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.