Tell me more ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have installed play :

sudo apt-get install sox libsox-fmt-mp3

I can now play my audio files like this :

play Desktop/SONGS/01\ -\ Oh\ Baby\ Girl.mp3

Since I'm learning shell, I wish I could do something like this :

 (sleep 10 ; play Desktop/SONGS/01\ -\ Oh\ Baby\ Girl.mp3 ) &

After 10 sec's, I can see the screen as :

 File Size: 7.38M     Bit Rate: 260k
  Encoding: MPEG audio    Info: 2012
  Channels: 2 @ 16-bit   Track: 01/09
Samplerate: 44100Hz      Album: Maalai Pozhudhin Mayakathilaey :::tunesinn.blogspot.com:::
Replaygain: off         Artist: Hemachandra, Achu
  Duration: 00:03:46.98  Title: Oh Baby Girl

But the song is not playing. But if I do this (without &) :

(sleep 10 ; play Desktop/SONGS/01\ -\ Oh\ Baby\ Girl.mp3 ) 

Is working as expected. But I couldn't able to use my terminal in meanwhile.

How could I resolve my problem, with using &?

share|improve this question
4  
If you only want a CLI player so that you can play audio in the background, I would highly recommend you to try cmus. It even has a script cmuscrobbler for last.fm and you can map global hotkeys in X window system via cmus-remote. Or you could try using an utility like screen. – jeremija Aug 15 '12 at 8:43
cmus is a great program- I should expand this comment into a full answer! – Mik Aug 15 '12 at 12:59

2 Answers

up vote 5 down vote accepted

Backgrounding play with & fails because play wants to output its status, e.g.

In:12.7% 00:00:27.31 [00:03:07.52] Out:1.20M [!=====|=====!] Hd:0.0 Clip:0  

but cannot if backgrounded. So it keeps waiting until aborted.

To solve this, simply run play with the -q (quiet) switch. This will successfully background it and play will terminate when the song ends.

(sleep 10 ; play -q Desktop/SONGS/01\ -\ Oh\ Baby\ Girl.mp3 ) &

You can stop it by either typing killall play (if no other play instances are running), or by kill $! (if you haven't backgrounded other processes in the same terminal after starting play -- $! gives you the PID of the last backgrounded process)

share|improve this answer
This works. But how come now I stop playing the song? – Ant's Aug 15 '12 at 9:12
1  
You can stop it by either typing killall play (if no other play instances are running), or by kill $! (if you haven't backgrounded other processes in the same terminal after starting play -- $! gives you the PID of the last backgrounded process) – izx Aug 15 '12 at 9:31

there is a better way of running things in the "background" from the command line.

sudo apt-get install screen

Its one of the most nifty command line programs for linux. it allows you to have something similair to "tabs in a browser" and switching seamlessly between them without any interruption of running programs. It'not tabs in the terminal program itself though. But within that specific shell you have started.

once install start it by typing

screen 

in a terminal.

you create new "tabs" with ctrl-A c you switch to next tab with ctrl-A n

here is a more thorough tutorial if you find the man pages hard to understand

share|improve this answer

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.