Assignment 3
1 Creativity
2 Design Recipe
3 Team Work
4 Final Submission
5 Grading Rubric
6 Help!
7 Sharing Code
6.11.0.2

Assignment 3

In the third assignment, you’ll we working with your team to build an engine that can play nine tracks of music simultaneously, switching any track on or off.

This should be a big-bang program. The keys 1-9 should toggle the individual tracks on and off. You will need to formulate a world state that allows you to represent the information about which tracks are playing, and where you are in the song. The songs should all stay "locked" together in time; turning a track off is like a "mute" button rather than a "stop" button. At the end of the song, it should start over.

There should be some visual representation of which tracks are currently playing (that is, "un-muted").

What tracks should you use? How about the tracks that you generated for assignment 2? Here they are:

Oh, and maybe a click track.

1 Creativity

There are a number of ways that your team might choose to extend this project; you could come up with your own eight tracks, you could add "solo" buttons to allow you to drop out all tracks other than the given one, or you could add a "nudge" button that allows you to move one track relative to the others, or a "speed up" function that accelerates a track simply by jumping forward a bit on each segment.

Or, I suppose you could add an air horn sound effect.

Whatever you like!

2 Design Recipe

When you design functions, follow the design recipe: think about what kind of data each function consumes and produces, write down a signature, purpose statement, and header, write test cases, and only then should you implement the function.

I will deduct points from assignments that are not clear and easy to read, and that do not include purpose statements, signatures, and test cases.

3 Team Work

The best teams will work effectively together. This means communicating! You should make a plan, and make sure that everyone knows what it is. If you’re having trouble with a part of the project, let your team know! Keeping everyone in the loop is the best way to avoid problems. This project is a warm-up for the final project, so now’s the time to get things ironed out. Arrange a meeting time as soon as possible!

Also, I will be asking you later on in the quarter to assess the contribution of each of your teammates to the project, so make sure that you’re responsible for your parts of the project.

4 Final Submission

For this project, you should submit a single racket file called "a3.rkt" to a polylearn handin bin that I’ll be creating.

Your program file should contain a one-paragraph write-up, in the form of a comment. Describe your ideas and your process, and the state of the program.

As before, only one team member needs to submit to PolyLearn.

5 Grading Rubric

The grading for this assignment will be as follows:

6 Help!

If you need help, I strongly advise you to post to the Piazza group rather than contacting me directly: I’ll respond to both, and that way others can see your questions. Often, you’ll get a good answer more quickly from someone other than me.

7 Sharing Code

Naturally, you’ll be sharing all of your code with the rest of your team. There are a number of nifty ways to do that, including GitHub and other public repo tools.

Beyond that, though, you’re welcome to use other teams’ code, with proper attribution. So if the PowerSheep come up with a really cool sound, it’s fine with me if you use it in your program, indicating the chunk of code that came from the PowerSheep.