[SOLVED] COMP9044 - Week 03 Laboratory Exercises

30.00 $

Category:

Description

5/5 - (6 votes)

Before the lab you should re-read the relevant lecture slides and their accompanying examples.

Create a new directory for this lab called lab03, change to this directory, and fetch the provided code for this week by running these commands:

$ mkdir lab03

$ cd lab03

$ 2041 fetch lab03

Or, if you’re not working on CSE, you can download the provided code as a zip file or a tar file.

Write a shell script jpg2png.sh which converts all images in JPEG format in the current directory to PNG format.

You can assume that JPEG files and only JPEG files have the suffix jpg.

If the conversion is succesful the JPEG file should be removed.

Your script should stop with the error message shown below and exit status 1 if the PNG file already exists.

$ wget https://cgi.cse.unsw.edu.au/~cs2041/20T2/activities/jpg2png/images.zip

$ unzip images.zip Archive:  images.zip   inflating: Johannes Vermeer – The Girl With The Pearl Earring.jpg   inflating: nautilus.jpg   inflating: panic.jpg   inflating: penguins.jpg   inflating: shell.jpg   inflating: stingray.jpg   inflating: treefrog.jpg

$ ./jpg2png.sh

$ ls

‘Johannes Vermeer – The Girl With The Pearl Earring.png’   jpg2png.sh     panic.png  shell.png      treefrog.png  images.zip                        nautilus.png   penguins.png   stingray.png $ wget https://cgi.cse.unsw.edu.au/~cs2041/20T2/activities/jpg2png//penguins.jpg

$ ls

‘Johannes Vermeer – The Girl With The Pearl Earring.png’   jpg2png.sh     panic.png  penguins.png   stingray.png  images.zip                        nautilus.png   penguins.jpg   shell.png      treefrog.png

$ ./jpg2png.sh penguins.png already exists

When you think your program is working, you can use autotest to run some simple automated tests:

$ 2041 autotest jpg2png

Autotest Results

95% of 447 students who have autotested jpg2png.sh so far, passed all autotest tests.

97% passed test jpg2png_0

96% passed test jpg2png_1

97% passed test jpg2png_2

96% passed test jpg2png_3

 

 

Hints

The program display(1) can be used to view image files

The program mutt(1) can be used to send mail from the command line including attachments, for example:

$ echo ‘Penguins are cool.’|mutt -s ‘penguins!’ -e ‘set copy=no’ -a penguins.png 

There is no autotest and no automarking of this question.

When you are finished working on this exercise, demonstrate your work to another student in your lab and ask them to enter a peer assessment. It is preferred you do this during your lab, but if this is not possible you may demonstrate your work to any other COMP(2041|9044) student before Tuesday 23 June 17 59. Note, you must also submit the work with give.

 

Write a shell script date_image.sh which, given a list of image files as arguments, changes each file so it has a label added to the image indicating the time it was taken. You can assume the last-modification time of the image file is the time it was taken.

So for example if we run these commands:

$ cp -p /web/cs2041/20T2/activities/date_image/penguins.jpg  .

$ ls -l penguins.jpg

-rw-r–r– 1 andrewt andrewt 58092 Mar 16 16:08 penguins.jpg

$ ./date_image.sh penguins.jpg

$ display  penguins.jpg

There is no autotest and no automarking of this question.

 

 

Andrew regularly spends time far from the internet and streaming music services such as Spotify, so he has a large collection of MP3 files containing music.

Andrew has a problem: the ID3 tags in the MP3 files in his music collection are incorrect. Unfortunately Andrew’s favourite player software organises music using the information from these ID3 tags. Your task it to fix Andrew’s problem by set the ID3 tags to the correct values. Fortunately the correct value for the tags can be retrieved from the file names and the names of the directories the files are in.

Your task is to write a shell script tag_music.sh, which sets the ID3 tags of MP3 files using the information from file names and directory names.

You’ll first need to make a copy of Andrew’s music collection.

Download music.zip, or copy it to your CSE account using the following command:

$ cp -n /web/cs2041/20T2/activities/tag_music/music.zip .

You assume the names of files and directories follow a standard format. You can determine this format by look at ethe files in Andrew’s music collection.

$ unzip music.zip Archive:  music.zip    creating: music/    creating: music/Triple J Hottest 100, 2007/   inflating: music/Triple J Hottest 100, 2007/2 – Straight Lines – Silverchair.mp3   inflating: music/Triple J Hottest 100, 2007/10 – Don’t Fight It – The Panics.mp3 

The command id3 can be used to list the value of ID3 tags in an MP3 file. For example:

$ id3 -l ‘music/Triple J Hottest 100, 2013/1 – Riptide – Vance Joy.mp3’ music/Triple J Hottest 100, 2013/1 – Riptide – Vance Joy.mp3:

Title  : Andrew Rocks                    Artist: Andrew

Album  : Best of Andrew                  Year: 2038, Genre: Unknown (255) Comment:                                 Track: 42

But, as you can see, the ID3 tags of this music file have been accidentally over-written. The ID3 tags should be:

$ id3 -l ‘music/Triple J Hottest 100, 2013/1 – Riptide – Vance Joy.mp3’ music/Triple J Hottest 100, 2013/1 – Riptide – Vance Joy.mp3:

Title  : Riptide                         Artist: Vance Joy

Album  : Triple J Hottest 100, 2013      Year: 2013, Genre: Unknown (255) Comment:                                 Track: 1

Fortunately, all the information needed to fix the ID3 tags is available in the name of the file and the name of the directory it is in.

You will write a shell script tag_music.sh which takes the name of 1 or more directories as arguments and fixes the ID3 tags of the all MP3 files in that directory. For example:

$ ./tag_music.sh ‘music/Triple J Hottest 100, 2015’

$ id3 -l ‘music/Triple J Hottest 100, 2015/4 – The Less I Know the Better – Tame Impala.mp3’ music/Triple J Hottest 100, 2015/4 – The Less I Know the Better – Tame Impala.mp3:

Title  : The Less I Know the Better      Artist: Tame Impala

Album  : Triple J Hottest 100, 2015      Year: 2015, Genre: Unknown (255)

Comment:                                 Track: 4

$ ./tag_music.sh music/*

$ id3 -l ‘music/Triple J Hottest 100, 1995/10 – Greg! The Stop Sign!! – TISM.mp3’ music/Triple J Hottest 100, 1995/10 – Greg! The Stop Sign!! – TISM.mp3:

Title  : Greg! The Stop Sign!!           Artist: TISM

Album  : Triple J Hottest 100, 1995      Year: 1995, Genre: Unknown (255)

Comment:                                 Track: 10

$ id3 -l ‘music/Triple J Hottest 100, 1999/1 – These Days – Powderfinger.mp3’ music/Triple J Hottest 100, 1999/1 – These Days – Powderfinger.mp3:

Title  : These Days                      Artist: Powderfinger Album  : Triple J Hottest 100, 1999      Year: 1999, Genre: Unknown (255)

Comment:                                 Track: 1

$ id3 -l ‘music/Triple J Hottest 100, 2012/2 – Little Talks – Of Monsters and Men.mp3’ music/Triple J Hottest 100, 2012/2 – Little Talks – Of Monsters and Men.mp3: Title  : Little Talks                    Artist: Of Monsters and Men Album  : Triple J Hottest 100, 2012      Year: 2012, Genre: Unknown (255)

Comment:                                 Track: 2

Your script should determine Title, Artist, Track, Album, and Year from the directory and filename.

Your script should not change the Genre or Comment fields.

Hints

$ man id3

cut almost works for extracting Title and Album from the filename.

Handling the few MP3 files correctly where using cut doesn’t work will be considered a challenge exercise.

It can be difficult debugging your script on Andrew’s music collection. In cases like these it usually worth creating a smaller data set for initial debugging. Such a tiny data set is available in tiny_music.zip if you want to use it for debugging. This dataset is used in the first autotests.

 

2020/7/24first autotests.

Download tiny_music.zip, or copy it to your CSE account using the following command:

$ cp -n /web/cs2041/20T2/activities/tag_music/tiny_music.zip .

$ unzip tiny_music.zip Archive:  tiny_music.zip    creating: tiny_music/    creating: tiny_music/Album1, 2015/   inflating: tiny_music/Album1, 2015/2 – Little Talks – Of Monsters and Men.mp3   inflating: tiny_music/Album1, 2015/1 – Riptide – Vance Joy.mp3    creating: tiny_music/Album2, 2016/   inflating: tiny_music/Album2, 2016/2 – Royals – Lorde.mp3   inflating: tiny_music/Album2, 2016/1 – Hoops – The Rubens.mp3

$ id3 -l tiny_music/*/*.mp3 tiny_music/Album1, 2015/1 – Riptide – Vance Joy.mp3: Title  : Andrew Rocks                    Artist: Andrew

Album  : Best of Andrew                  Year: 2038, Genre: Unknown (255) Comment:                                 Track: 42 tiny_music/Album1, 2015/2 – Little Talks – Of Monsters and Men.mp3:

Title  : Andrew Rocks                    Artist: Andrew

Album  : Best of Andrew                  Year: 2038, Genre: Unknown (255) Comment:                                 Track: 42 tiny_music/Album2, 2016/1 – Hoops – The Rubens.mp3: Title  : Andrew Rocks                    Artist: Andrew

Album  : Best of Andrew                  Year: 2038, Genre: Unknown (255) Comment:                                 Track: 42 tiny_music/Album2, 2016/2 – Royals – Lorde.mp3:

Title  : Andrew Rocks                    Artist: Andrew

Album  : Best of Andrew                  Year: 2038, Genre: Unknown (255)

Comment:                                 Track: 42

$ ./tag_music.sh tiny_music/* $ id3 -l tiny_music/*/*.mp3 tiny_music/Album1, 2015/1 – Riptide – Vance Joy.mp3: Title  : Riptide                         Artist: Vance Joy

Album  : Album1, 2015                    Year: 2015, Genre: Unknown (255) Comment:                                 Track: 1 tiny_music/Album1, 2015/2 – Little Talks – Of Monsters and Men.mp3:

Title  : Little Talks                    Artist: Of Monsters and Men Album  : Album1, 2015                    Year: 2015, Genre: Unknown (255) Comment:                                 Track: 2 tiny_music/Album2, 2016/1 – Hoops – The Rubens.mp3:

Title  : Hoops                           Artist: The Rubens Album  : Album2, 2016                    Year: 2016, Genre: Unknown (255) Comment:                                 Track: 1 tiny_music/Album2, 2016/2 – Royals – Lorde.mp3: Title  : Royals                          Artist: Lorde Album  : Album2, 2016                    Year: 2016, Genre: Unknown (255)

Comment:                                 Track: 2

When you think your program is working, you can use autotest to run some simple automated tests: