[SOLVED] Comp2300 Assignment 2 Part 2

30.00 $

Category:
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon comp2300-2021-assignment-2-part-2-jzxdml.zip (345.8 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
🔒 Securely Powered by:
Secure Checkout
5/5 - (1 vote)

In assignment 2 you need to program your discoboard to schedule/trigger a sequence of “notes”, each with a different pitch/duration/loudness. As in assignment 1, the focus is on controlling the behaviour of your discoboard with assembly code rather than doing a bunch of music theory.

This assignment will again have two parts: in Part 1, you need to play a specific sequence of notes with specific timing. In Part 2, you can generate a new sequence of your own creation to demonstrate the capabilities of your sequencer.

Background

Sequencers are tools for “scheduled execution”, playing the right note at the right time, and they have been instrumental in electronic music history. Drum sequencers, like the classic Roland TR-909 drum sequencer—a piece of electronic hardware designed for sequencing drum patterns—led to the development of electronic dance music, such as Daft Punk’s Revolution 909 from their classic album Homework (1997).

Sequencers aren’t limited to making drum sounds—the pattern they generate might be a sequence of musical notes, like in a bassline or melody line. In fact, this core concept is not even unique to music—the same ideas are found in scheduling, robotics, cyberphysical systems, and a bunch of other domains. The key idea is that sequencing is a way of controlling a device to perform certain actions at certain times.

Part 1

In Part 1, you must program your discoboard to play a specific sequence of notes—and you have 2 options this time, pick 1:

All options are considered of equal difficulty and will be marked to the same standard (see the marking section for part 1)—ie. you will not gain or lose marks for picking one option over another.

We have provided a list of note names, frequencies, and durations for each song (including the gaps/silence in between the notes). These “pitch tables” contain the timing and frequencies we will use to mark part-1.

We have also included a list of the notes (as letter names), just in case you would like to sing/play them yourself, but please use the frequency/duration tables for producing your solution.

No matter which song you pick, your sequencer must:

  • use an audible square wave sound (you can re-use your code from Assignment 1, but make sure to note it in the SoO) (the duty cycle is not important)
  • loop forever—i.e. such that when the sequence finishes playing, it starts again from the beginning (with no interruption to the timing)

Setting up and playing audio is the exact same as assignment 1.

In the Hall of the Mountain King – Peer Gynt

[youtube https://www.youtube.com/watch?v=4nMUr8Rt2AI]

We’ve also done these in an online sequencing software for your preview-ing pleasure.

Note Frequency Duration
B2 123.47 Hz 0.22 s
C#3 138.59 Hz 0.22 s
D3 146.83 Hz 0.22 s
E3 164.81 Hz 0.22 s
F#3 184.99 Hz 0.22 s
D3 146.83 Hz 0.22 s
F#3 184.99 Hz 0.44 s
F3 174.61 Hz 0.22 s
C#3 138.59 Hz 0.22 s
F3 174.61 Hz 0.44 s
E3 164.81 Hz 0.22 s
C3 130.81 Hz 0.22 s
E3 164.81 Hz 0.44 s
B2 123.47 Hz 0.22 s
C#3 138.59 Hz 0.22 s
D3 146.83 Hz 0.22 s
E3 164.81 Hz 0.22 s
F#3 184.99 Hz 0.22 s
D3 146.83 Hz 0.22 s
F#3 184.99 Hz 0.22 s
B3 246.94 Hz 0.22 s
A3 220 Hz 0.22 s
F#3 184.99 Hz 0.22 s
D3 146.83 Hz 0.22 s
F#3 184.99 Hz 0.22 s
A3 220 Hz 0.44 s
silence 0 Hz 0.44 s

If you feel like going the extra mile, for street cred.

Song of Storms – Legend of Zelda

[youtube https://www.youtube.com/watch?v=43IPAGw01IY]

We’ve also done these in an online sequencing software for your preview-ing pleasure.

Note Frequency Duration
D4 293.66 Hz 0.15 s
F4 349.23 Hz 0.15 s
D5 587.33 Hz 0.6 s
D4 293.66 Hz 0.15 s
F4 349.23 Hz 0.15 s
D5 587.33 Hz 0.6 s
E5 659.25 Hz 0.45 s
F5 698.46 Hz 0.15 s
E5 659.25 Hz 0.15 s
F5 698.46 Hz 0.15 s
E5 659.25 Hz 0.15 s
C5 523.35 Hz 0.15 s
A4 440 Hz 0.45 s
silence 0 Hz 0.15 s
A4 440 Hz 0.3 s
D4 293.66 Hz 0.3 s
F4 349.23 Hz 0.15 s
G4 392.00 Hz 0.15 s
A4 440 Hz 0.75 s
silence 0 Hz 0.15 s
A4 440 Hz 0.3 s
D4 293.66 Hz 0.3 s
F4 349.23 Hz 0.15 s
G4 392.00 Hz 0.15 s
E4 329.63 Hz 0.9 s

Part 1 Marks

Marks will be awarded for:

  • generating notes with a square wave (duty cycle does not matter)
  • playing the notes with the correct pitches (frequency)
  • playing the notes at the correct tempo (timing)
  • code structure, readability & modularity (including comments & use of functions)
  • how modular your sequencer is—that is how easy is it to change what sequence / song is played (to have the possibility of full marks for this part you will need to use a data structure, such as an array, to store the song’s data).

For questions around frequency accuracy, please read this section.

Part 2

In Part 2, your task is to make a more advanced sequencer. Your program must generate a musical signal which plays indefinitely (either by “looping” a finite sequence or by coming up with a continuous stream of new notes). You may extend the sequences from part 1, but the sequence must demonstrate the more advanced features of your sequencer.

Keep in mind that your job here is to make a cool sequencer, not a cool song, or a cool synth. As written above, a sequencer’s focus is scheduled execution of musical patterns, so you need to create a program than can schedule execution of more complex, or multiple, musical patterns, or do so with more utility than the very simple sequencer you create for part-1.

Here are a few ideas, in roughly increasing order of difficulty:

  • Create a sequencer that sequences more aspects of music than just pitch and duration. E.g., it could continuously change another aspect of music such as dynamics (loudness/softness) or timbre (type of waveform) on a note-by-note basis.
  • Create a sequencer that plays songs that are stored in a more interesting format (or a subset of the format), e.g., ASCII text – see ABC notation, or MIDI bytes.
  • Create a sequencer that can play multiple notes simultaneously to create harmony (also called polyphony in synth lingo). This could also be used to play multiple instrument tracks of the same song at the same time (e.g., keyboard and bass).
  • create a sequencer that uses an amplitude envelope to change the “shape” of your notes, with envelope parameters that change during playback.
  • create a polyphonic drum machine that sequences non-pitched (e.g., percussive) sounds with sequenceable envelopes and synthesis parameters.

Marks for Part 2 will be awarded for a design document describing what you’re doing and how you implemented it in ARM assembly language. You need to explain the “what”, “how” and “why” (design, implementation, and analysis) of what you have done. Although it’s ok if you don’t do something super-complex, we do take the sophistication of your sequencer into account. Using images/diagrams is encouraged. Your design document must be in pdf format (2 pages content + appendix + references) with the filename design-document.pdf in top-level folder on the part-2 branch.

  • comp2300-2021-assignment-2-part-2-jzxdml.zip