Assignment 2:   Looping Sequencer
1 Hints
2 Team Work
3 Final Submission
4 Grading Rubric
5 Help!
6 Sharing Code

Assignment 2: Looping Sequencer

This week, your assignment is to produce a small sequencer that allows the use of sliders to control the placement of samples within a loop.

More specifically, the control surface should contain a minimum of 8 sliders, each one controlling a single sample. If the slider is to the left, the sample is played at the beginning of the loop. If the slider is in the middle, the sample is played at the middle of the loop. Using the sliders, it should be possible to position all of the samples as the user desires.

The actual samples you use are up to you. You could use some of the built-in drum samples, but I would encourage you to supplement these, or come up with an entirely different set. For instance, the samples could definitely be pitched tones, rather than percussive samples. You’re also welcome to use the piano tones that are built-in.

There are a *lot* of possible enhancements to this project. First, each sample could come with a button that turns it on or off. Second, you could have two different panels, and make it possible to switch between them. You could have a button that randomizes the placement of the samples, or reverses the current placement.

You could also provide control over the length of the loop; this would essentially amount to a tempo control.

You could also provide text that shows exactly where the sample is placed, or a "snap-to" mode that chooses the nearest 64th (for instance) of the loop length when the mouse is moved.

You could also provide volume controls, or pitch controls.

You could also spend time making the sliders look better, or providing a nice background.

Really, the sky’s the limit.

1 Hints

Don’t go overboard. Use Incremental Development. Start with something *simple*. Add bells and whistles after getting something working.

2 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.

3 Final Submission

Like the previous project, this project will consist of two separate handins; the .zip bundle containing the code and samples for the project, and a portfolio writeup of the project.

The bundle you submit should contain all of the code and samples required to run the project, and the main racket program should be in a file called "project-2.rkt". This bundle does not need to contain any of the "portfolio" parts of the assignment. Only one member of the team needs to submit the project bundle. Submit it using the Project 3 handin using PolyLearn. If more than one member submits, I will ignore all but the last submission.

Also for this project, the portfolio writeup must appear in (at least) one team member’s portfolio. This portfolio should include a one-paragraph writeup that describes how you chose your samples, what extras (if any) you added to the project, and how the project works. In addition, it should contain a 30-second video demo of your project, showing off its features, and a link to download the project code. Please edit the personal portfolios page to add a note in column C indicating whose portfolio contains the writeup.

4 Grading Rubric

The grading for this assignment will be as follows:

5 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.

6 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.