1 \documentclass[12pt,letterpaper
]{article
}
3 \usepackage[left=
1.25in,top=
1in,right=
1.25in,bottom=
1.5in,nohead
]{geometry
}
17 \section*
{Pineapple Tracker project summary
}
22 % intro / some background
24 Our aim for this project was to extend a tracker's user interface to behave more like Vi, and to learn a little bit about sound synthesis.
25 A tracker is a type of computer music composition tool.
26 Many computer music tools give you some sort of graphical interface for entering notes and commands.
27 Trackers give you a column in which you have to enter all notes and commands, often in hexadecimal.
28 It is a minimal and efficient concept.
29 Trackers started to gain popularity in the late
80s, and were mainly developed for the Amiga and Commodore
64.
30 Since then, there have been many variations on this particular style of sequencing sound samples.
31 There are still many trackers being developed for modern operating systems.
32 Vi is a text editor that makes an effort to be efficient to use, and friendly to everyday users.
33 The commands are obscure, for example the h, j, k, and l keys move the cursor instead of the expected arrow keys.
34 Vi has a learning curve that is initially steep, but once you learn the basics you can combine commands in ways that other editors don't allow.
35 Our goal was to create a tracker with Vi-like commands.
38 We put lots of consideration into making our tracker easy to use.
39 Our inspiration came from a couple of existing trackers that had certain features we liked.
40 {\tt Little Sound DJ
} is a gameboy tracker that is very efficient to use, given that the gameboy only has
4 buttons and a D-pad.
41 We believe that the same amount of effectiveness can be possible for a tracker that uses a computer keyboard.
42 One tracker we researched, called
{\tt jch
}, had an amazingly featureful set of documented key commands.
43 However, there are a couple problems with
{\tt jch
}.
44 Aside from only running on the Commodore
64,
{\tt jch
}'s key commands are very obscure, just like Vi's.
45 The difference is that
{\tt jch
}'s command set doesn't combine commands in the same way Vi does, and
{\tt jch
}'s commands are only found in
{\tt jch
}.
46 In other words, those commands haven't been rehashed and refined for over
30 years like Vi's commands have.
49 We wanted to control our tracker just like we controlled Vi.
50 In Vi, there are many ways to get editing done quickly, such as repeating a command a certain number of times, and lots of ways to jump the cursor around to where you want it to go.
51 We were surprised that there isn't already a tracker that does this, because trackers can really benefit from being fast and efficient to use.
52 Our other goals included adding more functionality to the audio engine such as filtering, tempo control, and granular synthesis.
53 Our contract with Ian Burleigh supplemented our work on Pineapple Tracker's audio engine.
54 We also made a general effort to make our code understandable and orthogonal.
55 To do this we tried to use as few global variables as possible and separate functions into different files based on what their purpose is.
58 When we began working on this project we had lots of ideas for features, but since we lack experience it was hard to gauge how much time each one would take.
59 Tempo control turned out to be a feature that was easier to implement than we had expected, while others that seem trivial (like JACK support) still aren't done yet.
60 It was hard to plan what we would be working on ahead of time because we didn't know how each feature would take, or if we would even finish it.
63 When the quarter began, we didn't know much about digital sound processing so we didn't do anything to the audio engine for the first five weeks.
64 We decided we wanted to be able to change the sampling rate, so we ended up creating a different frequency table to keep the tracker in tune with the new sampling rate.
65 We found out this wasn't the best solution because certain effects like vibrato and note-bend were still affected by the frequency change.
66 We learned from our contract sponsor that we will need to resample our output wave using a method like interpolation if we want to arbitrarily change the sample rate.
69 Our code grew surprisingly fast.
70 Before we knew it we had
2000 lines of functions and
100 lines of global variables.
71 We split up our code into multiple .c and .h files to try to organize it.
72 To reduce the number of global variables our program relies on, we tried to encapsulate most of them into a single
{\tt struct
}, and then pass the
{\tt struct
} around to each function.
73 This probably would have worked if we hadn't tried to do it all at once.
74 With some more design and planning I'm sure we could successfully make our code more orthogonal.
77 %write something else about the audio engine here maybe.... ???
80 The work we put into the user interface was probably the most fruitful, which is due to a couple of things.
81 The most important is that we knew exactly what we wanted before we started coding.
82 Because we already know how to use Vi, we sort of got a specification for free since we knew exactly how we wanted the commands to behave.
83 Since we didn't do much planning, this allowed us to spend a lot of time coding.
84 We did make our own specification about halfway through the quarter.
87 The specification describes all of the tracker's commands and how they should behave.
88 Each entry in the specification states what happens when each key is pressed.
89 We tried to be very precise with our descriptions of the commands, and tried to foresee any potential conflicts with other commands to make sure they all work well together.
90 Of course, not all commands from a text editor can be directly translated into commands for a music editor!
91 An example is the delete command (
{\tt d
}).
92 In Vi you use
{\tt d
} to delete text.
93 In Pineapple Tracker we had to make the distinction between deleting lines as opposed to just clearing them, because they are both useful tracker commands.
94 Most commands, like cursor/window movement and copy and paste translated fairly well from Vi to our music editor.
97 We did learn some things about how to develop software as a team, including some experience using the Git version control system.
98 We communicated with IRC and email, though these two modes of communication didn't turn out to be as useful as we thought.
99 In fact, they turned out to be poor substitutes for communicating in person, which is how we did our most constructive collaboration.
102 There are some things we want to work on in the future to make Pineapple Tracker more useful.
103 One is support for MOD files, a popular tracker file format.
104 We also have a goal of rewriting the audio engine for educational purposes, which will be easier now that we've completed our contract in digital sound processing.
105 We would also like to write more documentation to attract users so we can get feedback.
106 % Tony I changed the wording here so it sounds more like we mean business 8-)
107 Another feature we are going to implement is a scripting language that can be used for generating algorithmic music.
110 Because we put more work into the user interface than the audio engine, Pineapple Tracker could possibly turn into more of an extensible tracker interface than a tracker itself.
111 Most trackers tend to focus on the audio aspects much more than the user interface aspects.
112 This is unfortunate, because a tracker is used to create music and thus should strive to be as comfortable as possible for the user.
116 We certainly feel like we accomplished cloning a good portion of Vi's interface.
117 Pineapple Tracker is now very usable if you know Vi, and editing songs is quick and easy.
118 Although we learned a lot about digital audio through our contract, we didn't accomplish the goals we had made for the audio engine.
119 If we were to do this project over we would try to plan more, and we probably would draw more diagrams on whiteboards while designing the structure of our modifications.
120 We did our best to make an understandable design while coding, but we could have benefited immensely from more premeditated thought.