CS 5500 Assignment #6. Assigned: Wednesday, 9 October 2013 Due: Wednesday, 23 October 2013 Working in an instructor-approved team of four students (except for a few smaller teams approved by the instructor), develop a rapid prototype of the greatly simplified version of the semester project specified below. Your prototype's source code must be written entirely by your team. Your team may not use source code written by other students, source code obtained from the World-Wide Web or other sources, and it may not use software packages that are not already installed on the CCIS Linux machines. In exceptional circumstances, you may ask the instructor for permission to use third party source code. You should not assume that permission will be granted. Your prototype must include a README file (which *must* be in UTF-8 plain text, use a consistent end-of-line convention, consist entirely of lines shorter than 80 characters, and be named README) that 1. lists all members of your team, 2. gives the preferred email address(es) for contacting your team, 3. tells the grader(s) how your team's rapid prototype can be compiled and run on any CCIS Linux machine in the main lab, 4. acknowledges any third party software used (by permission!) in your submitted software. All of the files necessary to construct and to run your prototype must be combined into a gzip'ed tar file whose name ends in tar.gz. Submit that gzip'ed tar file before 10pm on the date it is due using the submit script that's described at the course assignments page: http://www.ccs.neu.edu/course/cs5500sp13/assignments.html Your prototype will be graded on these criteria: 1. the quality of the instructions and documentation in your README file, 2. the ease of constructing and running your prototype on CCIS Linux machines, 3. your prototype's correctness with respect to parsing correct command lines recognizing and allowing the supported file formats reporting errors for unsupported file formats producing correct error messages not producing extraneous output not attempting to create files outside of /tmp 4. your prototype's reliability with respect to matching identical audio recordings matching extracts of a WAVE against its original WAVE file matching altered excerpts against their original recordings 5. and the readability of your source code. Your prototype's build process must result in software that can be invoked by cd'ing to the directory containing your software's executable and executing a command of the following form: ./arc5500 where is a sequence of tokens generated by ::= -f | --file | -d | --dir and is a Linux path name for a file (in the -f and --file cases) or directory (in the -d and --dir cases) that already exists on the CCIS shared file system. If the uses the -f or --file options and names a file, that file should be in WAVE format. (For the semester project, additional formats will be supported. You may, if you wish, support additional formats in this prototype, but the graders will not use any non-WAVE formats for testing.) If the uses the -d or --dir options and names a directory, then every file within that directory should be in WAVE format, and that directory should not contain any subdirectories. (As noted in the paragraph above, your prototype is allowed to support additional formats.) Recognition of the WAVE format should not rely on file name suffixes. If the command line is correct and each is correct, then the arc5500 program should compare the WAVE files to see whether either is likely to have been derived from the other. If a match is found, then the arc5500 program should print "MATCH: " to standard output, followed by the approximate offset in seconds at which the match was found (as measured from the beginning of the longer recording), followed by one space, followed by the short name of the file containing the longer of the two recordings, followed by one space, followed by the short name of the file containing the shorter of the two recordings, followed by a newline. If no match is found, then the arc5500 program shouldn't print anything. If the command line is correct, and all input directories and files are free of errors, then the arc5500 program should terminate with an exit status of 0, regardless of whether any matches were found. If the command line is incorrect, or a is incorrect, then the arc5500 program should write one or more error messages to standard error, each beginning with "ERROR" and terminating with a newline. After writing these error messages to standard error, arc5500 should terminate with an exit status other than 0. ---------------------------------------------------------------- Examples: ./arc5500 -f /course/cs5500f13/Assignments/A6/hewlett.wav \ -d /course/cs5500f13/Assignments/A6 should produce output that resembles MATCH: 0.0 hewlett.wav hewlett.wav MATCH: 54.0 hewlett.wav x10.wav MATCH: 51.0 hewlett.wav x11.wav MATCH: 78.0 hewlett.wav x12.wav ./arc5500 -d /course/cs5500f13/Assignments/A6 \ -d /course/cs5500f13/Assignments/A6 should produce output that resembles MATCH: 0.0 hewlett.wav hewlett.wav MATCH: 54.0 hewlett.wav x10.wav MATCH: 51.0 hewlett.wav x11.wav MATCH: 78.0 hewlett.wav x12.wav MATCH: 0.0 trouble.wav trouble.wav MATCH: 6.0 trouble.wav x1.wav MATCH: 6.0 trouble.wav x2.wav MATCH: 6.0 trouble.wav x3.wav MATCH: 150.2 trouble.wav x4.wav MATCH: 150.2 trouble.wav x5.wav MATCH: 150.2 trouble.wav x6.wav MATCH: 0.0 wayfaring.wav wayfaring.wav MATCH: 44.0 wayfaring.wav x7.wav MATCH: 44.0 wayfaring.wav x8.wav MATCH: 44.0 wayfaring.wav x9.wav MATCH: 54.0 hewlett.wav x10.wav MATCH: 0.0 x10.wav x10.wav MATCH: 3.0 x11.wav x10.wav MATCH: 51.0 hewlett.wav x11.wav MATCH: 3.0 x11.wav x10.wav MATCH: 0.0 x11.wav x11.wav MATCH: 78.0 hewlett.wav x12.wav MATCH: 0.0 x12.wav x12.wav MATCH: 6.0 trouble.wav x1.wav MATCH: 0.0 x1.wav x1.wav MATCH: 0.0 x1.wav x2.wav MATCH: 0.0 x1.wav x3.wav MATCH: 6.0 trouble.wav x2.wav MATCH: 0.0 x2.wav x1.wav MATCH: 0.0 x2.wav x2.wav MATCH: 0.0 x2.wav x3.wav MATCH: 6.0 trouble.wav x3.wav MATCH: 0.0 x3.wav x1.wav MATCH: 0.0 x3.wav x2.wav MATCH: 0.0 x3.wav x3.wav MATCH: 150.2 trouble.wav x4.wav MATCH: 0.0 x4.wav x4.wav MATCH: 0.0 x4.wav x5.wav MATCH: 0.0 x4.wav x6.wav MATCH: 150.2 trouble.wav x5.wav MATCH: 0.0 x5.wav x4.wav MATCH: 0.0 x5.wav x5.wav MATCH: 0.0 x5.wav x6.wav MATCH: 150.2 trouble.wav x6.wav MATCH: 0.0 x6.wav x4.wav MATCH: 0.0 x6.wav x5.wav MATCH: 0.0 x6.wav x6.wav MATCH: 44.0 wayfaring.wav x7.wav MATCH: 0.0 x7.wav x7.wav MATCH: 0.0 x7.wav x8.wav MATCH: 0.0 x7.wav x9.wav MATCH: 44.0 wayfaring.wav x8.wav MATCH: 0.0 x8.wav x7.wav MATCH: 0.0 x8.wav x8.wav MATCH: 0.0 x8.wav x9.wav MATCH: 44.0 wayfaring.wav x9.wav MATCH: 0.0 x9.wav x7.wav MATCH: 0.0 x9.wav x8.wav MATCH: 0.0 x9.wav x9.wav ----------------------------------------------------------------