CS 3733 Operating Systems, Spring 1997 Assignment 2


Due on February 25


In this assignment you will write and test an audio object similar to the one Program 3.4 of PUP.

Part 1:

Learn how to use the audiotool to record and play sound files. Make 10 audio files called audio.0 through audio.9.
Each file should contain a single word corresponding to a number from 0 to 9. For example, to create the file audio.7, record yourself speaking the number seven. Edit the files so there is no noise before or after the spoken word. Also make a file called audio.mine which contains the phrase This program was written by ... where the phrase ends with your full name. Make sure you speak your full name clearly so it can be easily understood. Now record a file called audio.pid which contains the phrase This is process.

Part 2:

Create a file called audioobj.c which will contain your audio object. It will have the following functions which have external linkage. No other functions or variables may have external linkage, but you may have additional functions and variables with internal linkage. Each one of these returns -1 on error and unless otherwise stated returns 0 on success. The functions in this file should not write to standard output or standard error.
int open_audio_for_output();
which opens the audio device for output.

void audio_close();
which closes the audio device.
int audio_write_buffer(char *buf, int size);
which sends size bytes from the buffer buf to the audio device.
int audio_read_a_file(char *name, char **bufp);
which reads in an audio file with name name into a buffer and sets *bufp to point to that buffer. The function must allocate space for the buffer. Do not assume any maximum for the size of the file. Use stat to determine how much space to allocate. On success, return the size of the file read.
int audio_init_num(char *name);
which reads in 10 audio files with names name.0 through name.9 for use by audio_speak_number.
int audio_speak_number(int n);
which speaks the number n which can be any non-negative integer. This assumes that the function audio_init_num has already been called. It should not do any disk I/O.

Part 3:

Write a main program which uses the above audio object. It should be in a file called assign2.c. When the program enters, it should print a line in the form: This program was written by ... and then another line in the form This is process .... The first line prints your name and the second gives the process ID. It should then speak this same information in your voice.

The main program should do complete error checking. When an error occurs, output an appropriate message, close the audio file and exit. Be sure the close the audio file before exiting your program.

You should have a makefile which will compile and lint your programs. Be prepared to turn in your lint output. There should not be any unexplained warning messages.