Your test cases should be developed in a principled way, partitioning the spaces of inputs and outputs, and your testing strategy should be documented as we’ve been doing all along. You should write JUnit tests for the individual components of your system. Remember to write clear specifications for classes and methods write data type definitions for your music data types define abstraction functions and rep invariants, and write toString and checkRep and document safety from rep exposure. Your software design is perhaps the most important part of the project: a good design will make it simpler to implement and debug your system. You will need to write a grammar for parsing abc files design an immutable abstract datatype (an AST) for music design a module to convert parse trees into ASTs design a module that sends music to the MIDI player and other components. Read the project specification carefully. Your team’s repositoryīefore you begin, write and agree to a team contract. On this project, Didit will run only your own tests.Īs always, correctness is your responsibility, and you must rely on your own careful specification, testing, and implementation to achieve it. You can always ask your TA mentor or on Piazza for advice, but there is unlikely to be a single hard-and-fast answer. What if two voices contain a different number of total bars?.Can tuplets or chords contain notes of different lengths?.Do we need to check the input for errors? What should we do if there are errors?.You are free to come up with your own answers to these questions – just be reasonable, consistent, safe from bugs, easy to understand, and ready for change.Įxamples of questions that you won’t find answers to here: The specification in this handout constrains what your solution must do, but you will have many design questions that are not answered in this handout. You will be expected to use specs, tests, abstraction functions, rep invariants, safety arguments, checkRep and other assertions. On this project, you have complete design freedom to choose the packages, interfaces, classes, and method signatures you use in your code. You will also get more practice with grammars, parsers, and abstract syntax trees. In this project, you will practice working in a small group, using the software engineering techniques we have learned this semester: version control, specifications, unit tests, immutable data, abstract data types, and so on. This subset is sufficient to play a large number of interesting tunes that are available on the web, but you are welcome to implement the rest of the standard, as long as your ![]() You are required to handle only a subset of the abc language, which we will discuss in more detail in the specification below. You will use ParserLib to parse abc files, and the Java MIDI API to playback the music. In this project, you will build an abc player. Since its invention in 1980’s, abc has become one of the most popular notations for music, with around 50,000 abc files circulating around the web. It was originally intended for notating folk and traditional tunes of Western Europe, but it provides a sufficient set of constructs for transcribing a reasonably complex piece of music, such as a Beethoven symphony. This way, you can transcribe your favorite pieces of music or compose your own pieces, and easily exchange them among yourĪbc is one of the languages designed for this purpose. One way to do this on a computer is to type the notes into a text file using a special notation and feed them to a program that understands this notation. ![]() Team contract due Wed, Nov 30, 2016, 11:59pm Warmup due Mon, Dec 5, 2016, 1pm (in class) Specs due Wed, Dec 7, 2016, 11:59pm Project deadline Wed, Dec 14, 2016, 1pm Reflection deadline Wed, Dec 14, 2016, 1pmĬomposition of a musical piece is often a trial-and-error process, in which the musician writes down a series of notes on paper and tests them out on a musical instrument.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |