lullabyte
play

Lullabyte Stanley Chang Louis Croce Nathan Hayes-Roth Andrew - PowerPoint PPT Presentation

Lullabyte Stanley Chang Louis Croce Nathan Hayes-Roth Andrew Langdon Ben Nappier Peter Xu Overview Goals Generate MIDI music files C-like syntax Allow algorithmic or direct composition Building blocks Construct


  1. Lullabyte Stanley Chang Louis Croce Nathan Hayes-Roth Andrew Langdon Ben Nappier Peter Xu

  2. Overview ● Goals ○ Generate MIDI music files ○ C-like syntax ○ Allow algorithmic or direct composition ● Building blocks ○ Construct sounds from ints, doubles, pitches ○ Construct tracks from series of sounds ○ Layer tracks into a song

  3. Program Structure ● main function void main() {...} ● global variable declarations int global_i; sound[] sounds; ● function definitions type function ( types args ) {...}

  4. Functions type function(){ // local variable declarations // global variable assignments // control flow // other function calls // optional return value }

  5. Arrays ● Dynamic. Length is not fixed ● Assigning element beyond length pads intermediate elements with default type values (0, 0.0, false, C0, |C0|:0.0:0, etc.) ● Accessing element beyond length throws IOB error ● Reason: Make it easier for developer to not worry about checking array lengths since musical tracks change a lot throughout development

  6. Types ● int, double, boolean ● Pitch: C0, A1, Bb4, G9, … ● Sound: “<pitch(es)> : <double> : <int>” |C0|:0.25:100 |C5, E4, G3|:0.25:70

  7. Statements & Control Flow ● if, while, for, return ● loop ( <var> : <array> ) { //body } ● Reference to <var> in body is treated as “array[i]” ● Easy way to loop through sound arrays and make modifications with cleaner code

  8. Built-in Functions ● length(<array>) ● setPitches(<sound>, ● randomInt(<int>) <pitch>) ● randomDouble(<double>) ● setDuration(<sound>, ● bpm(<int>) <double>) ● write() ● setAmplitude(<sound>, ● play() <int>) ● print(<expr>) ● getPitches(<sound>) ● mixDown(<sound[]>, <int>) ● getDuration(<sound>) ● getAmplitude(<sound>)

  9. mixDown(sounds, track) ● most important built-in function ● writes array of sounds to midi ● programmer specifies track number ● can be called multiple times ● sounds appended to specified track

  10. Architectural Design

  11. Front End ● scanner.mll ● parser.mly ● ast.ml

  12. Back End ● interpreter.ml ○ rules of our compiler ● typechecking ○ variable type is stored on value declaration ○ function type is stored in module

  13. Conversion to Midi ● Bytecode Conversion 120 p ○ catches .llb Failures 0[[Bb5]:0.5:100,[C6]:0.5:100, [C6]:0.5:100, [Bb5]:0.5:100] ○ bpm, write, play, or both 1[[Bb4, D4, G3]:1.:100,[E4, G3, C3]:1.:100] ○ tracks 0[[Bb5]:0.5:100] ● BytecodeTranslator.java ● JFugue “V1 [72]/0.5a100+[76]/0.25a100+[76]/0. 5a100”...

  14. Testing ● testing suite ○ *.llb and *.out ● type check test ○ breaking the compiler

  15. Lessons Learned ● MicroC Slides ● Version Control ● Testing ● Strength in Numbers ● Communication ● Accountability

  16. Hey Jude Demo

  17. Thank You Any Questions?

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend