Tag Archives: bash

Little Apes to FLAC Files

The below article remains for archive purposes.  You can now easily convert APE directly to FLAC with ffmpeg.

##

# One command per ape... 

ffmpeg -i inputname.ape outputname.flac 

# ... in a loop cd into containing folder and... 

for apeFile in *.ape ; do 
    ffmpeg -i "${apeFile}" "${apeFile%\.ape}.flac" 
done 

##

You may come across individual APE files which you would like to convert to FLAC files.  This can be especially useful if you have an album FLAC and an accompanying CUE file and you are having trouble getting the APE to burn correctly.

There is a fairly simple tool for dealing with this conversion.  As fortune would have it this tool will also manage conversions to and from ALAC, SHN, TTN, and WAVE files.  How can they pack so much fun into such a small package?  Now it’ll be that much easier to clean your collection up and keep everything tidy: flacflacflac.

Ok, so you’ll need—and if you’ve been following along here you already have—the MAC (Monkey Audio Codec).

Next you’ll need to get something called apeinfo.   There exist both 32 and 64 bit versions so be sure you get the proper version for whichever Ubuntu you are running.  You will find them here.  You will want to change the name of the file you download to merely apeinfo (so remove the _32 or _64) or it won’t work when called up by the next tool.

The next tool being known as convtoflac.  You may find that here.

Download both of your files and they all gets stuck into /usr/local/bin.

I downloaded each of these to my desktop and then used sudo to copy them into /usr/local/bin.  Make certain you have given them execute permissions (set the execute bit).  By storing them in /usr/local/bin I am sure they are in my command path (basically those places your system looks when you type a command) and they are ready to use.  Here is the command you need to move the apeinfo file from the Desktop to /usr/local/bin:

sudo mv /home/[usename]/Desktop/apeinfo /usr/local/bin/apeinfo

You can copy and paste that line and make the necessary substitutions for your system, download location, and specific file.

Once you have these installed correctly you are ready to use the tools to make conversions.  I have written a small simple script for making all of this work together.  If you make my script executable and place it  in your /usr/local/bin you can merely call the whole thing up by typing the name of the command (whatever you decide to name your version of my script) in your terminal.  I named my script Ape2Flac.sh.

##
#!/bin/bash
# by JamesIsIn from JamesIsIn.com
# Do something nice today.

#  Ape2Flac.sh

#  also requires apeinfo and convtoflac
#  http://jamesisin.com/a_high-tech_blech/?p=1335

for i in *.ape
do convtoflac.sh "$i"
done

##

This method will preserve any existing tags.

To fire it up, navigate into the folder in which you have the APE files and run my script (by typing its name into the command line).  It’s that easy.

See, nothing to fear from the command line.

Happy hunting.

Share

Out of My Shell and into My Collection

As you may have heard, I’m building a music server for my home (aka my local network).  I’m rippin’ dem discs down to .flac files and stowing dem on a phat drive.  Caught between geek and gangster, I’m having a good time.

I am using Sound Juicer to squeeze my CD’s into flacs.  You can read about my encoding woes and solutions here.

Sound Juicer: Applications —> Sound & Video —> Audio CD Extractor

One thing about using Sound Juicer is that it likes to put all the files for an album or boxset into a single folder with the name of that album or boxset (under a folder with the name of the person or band or whatever).  That works out fine if you rip single albums (like Pink Floyd’s Meddle, for instance).  It creates files with the track numbers (optional, but I like it) and track names:

01 One Of These Days.flac

As you can see, that’s pretty straight forward.  Where I run into trouble is when I rip a boxset, such as The Immortal Soul of Al Green.  This is a four disc set.  Sound Juicer wants to create a folder called “The Immortal Soul of Al Green” and put all of the tracks into that folder.  That means I have four track ones and four track twos…

Ack!  What a mess that is.

So I did some hunting around the web and got some help from this blogger here, and I wrote a script that would do me a favor.

I don’t really want to create folders called “The Immortal Soul of Al Green CD1” and “The Immortal Soul of Al Green CD2” all the way down the line for each double album and boxset I encounter.  Instead I will be satisfied by prepending each track number with the corresponding disc number for that particular album.  Single albums I will not change.

So, for the album “The Immortal Soul of Al Green” I will run a script on those files for disc three such that the files will change as follows:

01 Take Me To The River.flac —> 03.01 Take Me To The River.flac

This tells me that this song is the first track on the third disc of this set.  Using this method keeps all of the songs from this boxset in one folder (called “The Immortal Soul of Al Green”) under the folder in my collection called Al Green.  Further, when I look in this folder all of the songs are in order.  Very convenient and easy to comprehend.

At first I was doing this by renaming each file as they were ripped.  Lame.  Oh, so very lame.  Curdled lameness.

(I have updated this renaming script.  You can find that new version here.)

Here is the script I settled upon thanks to a little research and some kind coders far and wide:

for filename in *.flac
do
mv "$filename" ../Changed/03."$filename"
echo $filename changed | tee -a /home/[username]/Desktop/Changed/logfile
done

As you may guess, this is the script for changing the names of the songs from CD 3.  Remember to use your actual username.  To make the scripts necessary for other CD’s simply change the 03 to whatever disc number you are interested in (01 or 02 or whatever).  Put this into an empty file and save it.  I saved mine as ChangeScript.sh (the sh file extension merely indictates it’s a shell script).  Name yours whatever you want.  (The line beginning echo is totally superfluous to the actions desired and so can be omitted, but it allows the script to tell you what it’s doing and so it can be very handy.)  After you have saved this file you will want to alter the permissions of the file and allow execution:

  1. Right-click the .sh file you created and saved
  2. Choose Properties from the context menu which appears
  3. On the Properties dialog select the Permissions tab
  4. Check the “Allow executing file as program” box

Here is the setup I was using in which this script was functioning.  I had a folder on my Desktop for each disc number (01-08) and after a disc would rip I would drop all the files for that disc into the appropriate folder.  I had a copy of the script in each folder (each using the corresponding disc number 01-08).  Open a command prompt (Applications —> Accessories —> Terminal) and get to the folder where you plan to do this work—I used my Desktop (enter: cd ~Desktop).

In a command prompt after dropping all the files for a disc into the correct folder I would perform the following actions to get into that folder and run the script (you won’t need the ../ the first time):

  • cd ../01
  • ChangeScript.sh

This would put all of the files into another folder on my Desktop which I called Changed.  (It also creates a logfile in Changed in case that interests you.)  Once I had changed all the discs for a set I would move the files from Changed into my library.  Then I would move on to the next set.

Totally confusing?  You’ll get there.  Hang on tight.

Hope this has been helpful.

Share