⬆️ ⬇️

"Sawing" FLAC

On a large, well-known tracker, people often began to share their copies of discs, in flac / ape / wavepack (wv) format, with a file-cue.

In fact, everything is smooth. Indeed, there are players that support the whole thing, and it really works. BUT.

My hobbies are related to electronic club music, respectively, for the sake of one or two tracks, I didn’t want to cut the whole discs before the party (it’s better to make your own literate collections), plus I also wanted to bring all the files to one format, namely FLAC - because New progressive programs (Ableton Live) and players (ipod (with special firmware, or touch with software / cowon) support it.



So, once again, the task is diskname.flac + diskname.cue, from them you need to get a lot of tracks with tags and distinct file names (Artist name, track number, track name) + playlist.



For example, I took the debian lenny distribution (5.0). Apparently, for * buntu users and other debian-based distributions, the commands will also be correct.



What we need:

')

sudo aptitude install build-essential - gcc and the necessary stuff to build support for ape format.

sudo aptitude install cuetools - for working with a cue file.

sudo aptitude install shntool - a set of utilities for cutting audio files and more.

sudo aptitude install wavpack - encoder and decoder for wavpack format

sudo aptitude install flac - encoder and decoder for flac



Downloading mac source (for working with ape)

wget supermmx.org/resources/linux/mac/mac-3.99-u4-b5.tar.gz

Unpack and go to the build directory:

tar xvzf mac-3.99-u4-b5.tar.gz

cd mac-3.99-u4-b5

make

if everything went smoothly - sudo make install.



So, everything is ready!

And now you need to write your script to automate the entire process. But wait, I've already sketched something;)

So, we will have three scripts.



Script for cutting the original into separate tracks and their subsequent tagging.



cuesplit



 #! / bin / bash 
 if ["$ 1" == ""];
 then
     echo "Usage: $ 0 flac / apefile cuesheetname"
     exit
 else
 cuebreakpoints $ 2 |  shnsplit -o flac -O always $ 1
 cuetag $ 2 split-track * .flac
 fi




Script to rename received tracks:

cuerename



 #! / bin / bash 

 TRACKNAME = split-track
 ENDNAME = ". Flac"
 PLAYLISTNAME = "! Playlist.m3u"

 rm $ PLAYLISTNAME 2> / dev / null

 for i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 28 30 31 32 33 34 35 36 38 38 40 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66;  do

	 if [-f $ TRACKNAME $ i $ ENDNAME];
		 then
		 echo -n
		 else
		 exit
	 fi

	 PERFORMER = `cueprint -t '% p_ \ n' -n $ i $ 2 |  tr [: blank:] '_' |  tr ':' '_' |  tr '*' '_'`
	 TRACK = `cueprint -t '_% t \ n' -n $ i $ 2 |  tr [: blank:] '_' |  tr ':' '_' |  tr '*' '_'`
	 echo "$ PERFORMER $ i $ TRACK $ ENDNAME" >> $ PLAYLISTNAME
	 echo "$ PERFORMER $ i $ TRACK $ ENDNAME"
	 mv $ TRACKNAME $ i $ ENDNAME $ PERFORMER $ i $ TRACK $ ENDNAME

 done;


Explanation of the cycle. I needed the tracks to be called 01, 02, 03, for proper sorting, and not 1, 2, 3. On one of the discs there were 66 tracks (my favorite Mexicans) :)



A script that executes the first and second script in turn;)

cuemagic

 #! / bin / bash 
 if ["$ 2" == ""];
 then
     echo "Usage: $ 0 flac / apefile cuesheet-file"
     exit
 else
 cuesplit $ 1 $ 2
 cuerename $ 1 $ 2
 fi




According to statistics, most people are normal windows-users, respectively, there are spaces in the files.

I, unfortunately, a bad programmer (by education - a mining engineer). Therefore, for order and for my scripts to work at all, I wrote another small primitive script to replace spaces in the file name with underscores. I hope in the comments I will be prompted by a more elegant way.



Script for mass renaming files with spaces in the name.

mrnm

 #! / bin / bash. 
 find.  -depth | rename 's / \ / _ / g'




And now an example of work!

 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # ls -la
 total 411841
 drwxrwxrwx 1 root root 0 2009-06-04 00:26.
 drwxrwxrwx 1 root root 0 2009-06-04 02:56 ..
 -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log
 drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers
 -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal Choice - Navigator.cue
 -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal Choice - Navigator.flac
 -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal Choice - Navigator.log
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # mrnm
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # ls -la
 total 411841
 drwxrwxrwx 1 root root 0 2009-06-29 20:13.
 drwxrwxrwx 1 root root 0 2009-06-04 02:56 ..
 -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log
 drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers
 -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal_Choice _-_ Navigator.cue
 -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal_Choice _-_ Navigator.flac
 -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal_Choice _-_ Navigator.log
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # cuemagic Terminal_Choice _-_ Navigator.flac Terminal_Choice _-_ Navigator.cue
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track01.flac] (3: 07.70): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track02.flac] (5: 05.02): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track03.flac] (6: 03.03): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track04.flac] (3: 49.72): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track05.flac] (1: 51.05): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track06.flac] (5: 55.52): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track07.flac] (4: 40.68): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track08.flac] (5: 46.30): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track09.flac] (5: 00.20): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track10.flac] (1: 11.63): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track11.flac] (6: 06.00): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track12.flac] (6: 07.35): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track13.flac] (4: 17.70): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track14.flac] (1: 48.35): 100% OK
 Splitting [Terminal_Choice _-_ Navigator.flac] (64: 21.10) -> [split-track15.flac] (3: 29.10): 100% OK
 Terminal_Choice_01_ (Intro) _Actual_Reality? .Flac
 Terminal_Choice_02_Without_Warning.flac
 Terminal_Choice_03_Victim_Of_Life.flac
 Terminal_Choice_04_Someone.flac
 Terminal_Choice_05_Navigator_I.flac
 Terminal_Choice_06_Der_Tod.flac
 Terminal_Choice_07_House_Of_Evil.flac
 Terminal_Choice_08_No_Escape.flac
 Terminal_Choice_09_The_Sons_Of_Doom.flac
 Terminal_Choice_10_Tenderness.flac
 Terminal_Choice_11_Navigator_II.flac
 Terminal_Choice_12_The_Eternal_Evil.flac
 Terminal_Choice_13_Kaltes_Herz.flac
 Terminal_Choice_14_Navigator_III.flac
 Terminal_Choice_15_Navigator_IV_ (Version) .flac
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # ls -la
 total 828610
 drwxrwxrwx 1 root root 0 2009-06-29 20:17.
 drwxrwxrwx 1 root root 0 2009-06-04 02:56 ..
 -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log
 drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers
 -rwxrwSrwx 1 root root 574 2009-06-29 20:17! playlist.m3u
 -rwxrwSrwx 1 root root 17370275 2009-06-29 20:17 Terminal_Choice_01_ (Intro) _Actual_Reality.flac
 -rwxrwSrwx 1 root root 37622950 2009-06-29 20:17 Terminal_Choice_02_Without_Warning.flac
 -rwxrwSrwx 1 root root 38571483 2009-06-29 20:17 Terminal_Choice_03_Victim_Of_Life.flac
 -rwxrwSrwx 1 root root 25643068 2009-06-29 20:17 Terminal_Choice_04_Someone.flac
 -rwxrwSrwx 1 root root 11619094 2009-06-29 20:17 Terminal_Choice_05_Navigator_I.flac
 -rwxrwSrwx 1 root root 41084081 2009-06-29 20:17 Terminal_Choice_06_Der_Tod.flac
 -rwxrwSrwx 1 root root 32317355 2009-06-29 20:17 Terminal_Choice_07_House_Of_Evil.flac
 -rwxrwSrwx 1 root root 39866544 2009-06-29 20:17 Terminal_Choice_08_No_Escape.flac
 -rwxrwSrwx 1 root root 35956407 2009-06-29 20:17 Terminal_Choice_09_The_Sons_Of_Doom.flac
 -rwxrwSrwx 1 root root 6399212 2009-06-29 20:17 Terminal_Choice_10_Tenderness.flac
 -rwxrwSrwx 1 root root 30924941 2009-06-29 20:17 Terminal_Choice_11_Navigator_II.flac
 -rwxrwSrwx 1 root root 46413377 2009-06-29 20:17 Terminal_Choice_12_The_Eternal_Evil.flac
 -rwxrwSrwx 1 root root 30521201 2009-06-29 20:17 Terminal_Choice_13_Kaltes_Herz.flac
 -rwxrwSrwx 1 root root 10079967 2009-06-29 20:17 Terminal_Choice_14_Navigator_III.flac
 -rwxrwSrwx 1 root root 21843539 2009-06-29 20:17 Terminal_Choice_15_Navigator_IV_ (Version) .flac
 -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal_Choice _-_ Navigator.cue
 -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal_Choice _-_ Navigator.flac
 -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal_Choice _-_ Navigator.log
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] # rm Terminal_Choice _-_ *
 grinder: / home / massiv / LOSSLESS / Terminal Choice - Navigator [1998] #




If you have any questions, please ask. Especially welcome rational suggestions and thoughts about the elegant solution to the problem with spaces and other special characters :)



ps When I finished the article, I noticed that such tags were already indicated by someone, looked for these tags, everything turned out well - the person had already written about this, but he had slightly different goals. In any case, this example can be a good example of how not to program or how amateurs program;)

Source: https://habr.com/ru/post/63182/



All Articles