Download presentation
Presentation is loading. Please wait.
Published bySara Bennett Modified over 9 years ago
1
A language for auralizing data
2
MOTIVATION Visual input overload! Automatic musical scoring
3
UPBEAT A flexible language to auralize input data aur al iz a tion (n): 1. the act or process of interpreting in aural or musical terms 2. the process of converting data into music Previous attempts haven’t sounded great
4
Musician "StockMusician" { phrase tune = "tune.mid"; "ChangePitch" { Change Pitch by 3_semitones; } "Play" { ||: tune :||; } } EASY CODING, BETTER MUSIC Easy to use Imperative Data Analysis Declarative Musical Syntax Portable: based on Java Sounds great! Goal for today: react to stock ticker
5
COMING UP… Intro to Upbeat Peyton Sherwood(Project Manager) Upbeat Code Adrian Weller(Language Guru) Compiler Structure & Tools Fan Lin 林凡 (System Integrator) Runtime Framework Matt D’Zmura(System Architect) Testing & What We’ve Learned Miles Ulrich(Verification and Validation)
6
Conductor Musician “Keyboard” Musician “FunkyDrummer” TIME_SIGNATURE 4/4; TEMPO 140; Conductor { cue up = "GoingUp"; cue down = "GoingDown"; cue background = "GoingNowhere"; float param = 0.95; float threshold = 5.0; float Avg = 70.0; // weighted average Conduct(time currentMeasure) { Avg = param*Avg + (1-param)*input.currentvalue; Case { (currentMeasure==1) Add background currentMeasure; (input.currentvalue > Avg + threshold) Add up currentMeasure; (input.currentvalue < Avg - threshold) Add down currentMeasure; } Musician "Keyboard" { phrase intro = "intro.mid"; phrase bridge = "bridge.mid"; phrase UpbeatRules = "upbeatrules.mid"; phrase SongSnippet = "goingdown.mid"; "GoingNowhere" { ||: intro | bridge :||; } "GoingUp" { Change Volume to 100; // volume is always in [0,100] || UpbeatRules :||2; } "GoingDown" { Change Volume to 70; ||: SongSnippet :||2 ; } Musician "FunkyDrummer" { phrase introdrums = "introdrum.mid"; phrase bridgedrums = "bridgedrum.mid"; phrase funkydrums = "drumpatch.mid"; phrase cymbal = "cymbal.mid"; Change Instrument to 32; // drums happen to be on MIDI channel 32 "GoingNowhere" { ||: introdrums | bridgedrums :||; } "GoingUp" { || funkydrums | cymbal ||; } Cues SAMPLE CODE
7
TIME_SIGNATURE 4/4; TEMPO 140; Conductor { cue up = "GoingUp"; cue down = "GoingDown"; cue background = "GoingNowhere"; float param = 0.95; float threshold = 5.0; float Avg = 70.0; // weighted average Conduct(time currentMeasure) { Avg = param*Avg + (1-param)*input.currentvalue; Case { (currentMeasure==1) Add background currentMeasure; (input.currentvalue > Avg + threshold) Add up currentMeasure; (input.currentvalue < Avg - threshold) Add down currentMeasure; } Musician "Keyboard" { phrase intro = "intro.mid"; phrase bridge = "bridge.mid"; phrase UpbeatRules = "upbeatrules.mid"; phrase SongSnippet = "goingdown.mid"; "GoingNowhere" { ||: intro | bridge :||; } "GoingUp" { Change Volume to 100; // volume is always in [0,100] || UpbeatRules :||2; } "GoingDown" { Change Volume to 70; ||: SongSnippet :||2 ; } Musician "FunkyDrummer" { phrase introdrums = "introdrum.mid"; phrase bridgedrums = "bridgedrum.mid"; phrase funkydrums = "drumpatch.mid"; phrase cymbal = "cymbal.mid"; Change Instrument to 32; // drums happen to be on MIDI channel 32 "GoingNowhere" { ||: introdrums | bridgedrums :||; } "GoingUp" { || funkydrums | cymbal ||; } DATA ANALYSIS Conductor cue up = "GoingUp"; cue down = "GoingDown"; cue background = "GoingNowhere"; … Case { (currentMeasure==1) Add background currentMeasure; (input.currentvalue > Avg + threshold) Add up currentMeasure; (input.currentvalue < Avg - threshold) Add down currentMeasure; }
8
TIME_SIGNATURE 4/4; TEMPO 140; Conductor { cue up = "GoingUp"; cue down = "GoingDown"; cue background = "GoingNowhere"; float param = 0.95; float threshold = 5.0; float Avg = 70.0; // weighted average Conduct(time currentMeasure) { Avg = param*Avg + (1-param)*input.currentvalue; Case { (currentMeasure==1) Add background currentMeasure; (input.currentvalue > Avg + threshold) Add up currentMeasure; (input.currentvalue < Avg - threshold) Add down currentMeasure; } Musician "Keyboard" { phrase intro = "intro.mid"; phrase bridge = "bridge.mid"; phrase UpbeatRules = "upbeatrules.mid"; phrase SongSnippet = "goingdown.mid"; "GoingNowhere" { ||: intro | bridge :||; } "GoingUp" { Change Volume to 100; // volume is always in [0,100] || UpbeatRules :||2; } "GoingDown" { Change Volume to 70; ||: SongSnippet :||2 ; } Musician "FunkyDrummer" { phrase introdrums = "introdrum.mid"; phrase bridgedrums = "bridgedrum.mid"; phrase funkydrums = "drumpatch.mid"; phrase cymbal = "cymbal.mid"; Change Instrument to 32; // drums happen to be on MIDI channel 32 "GoingNowhere" { ||: introdrums | bridgedrums :||; } "GoingUp" { || funkydrums | cymbal ||; } MUSICAL SYNTAX Musician: “Keyboard” "GoingNowhere" { ||: intro | bridge :||; } "GoingUp" { Change Volume to 100; || UpbeatRules :||2; } "GoingDown" { Change Volume to 70; ||: SongSnippet :||2 ; }
9
COMING UP… Intro to Upbeat Peyton Sherwood(Project Manager) Upbeat Code Adrian Weller(Language Guru) Compiler Structure & Tools Fan Lin 林凡 (System Integrator) Runtime Framework Matt D’Zmura(System Architect) Testing & What We’ve Learned Miles Ulrich(Verification and Validation)
10
Front End Lexer Parser.up Runtime Framework Music API jMusic API Wrapper main JVM COMPILER STRUCTURE Java Compiler
11
Runtime Framework Music API jMusic API Wrapper main Front End Lexer Parser main.up main SYSTEM INTEGRATION
12
Runtime Framework Music API jMusic API Wrapper main Front End Lexer Parser.up TOOLS
13
COMING UP… Intro to Upbeat Peyton Sherwood(Project Manager) Upbeat Code Adrian Weller(Language Guru) Compiler Structure & Tools Fan Lin 林凡 (System Integrator) Runtime Framework Matt D’Zmura(System Architect) Testing & What We’ve Learned Miles Ulrich(Verification and Validation)
14
Music API jMusic API Wrapper Run-time Framework Keyboard Drummer Data File Conductor Input Drums.mid Strings.mid Horn.mid Piano.mid Input Midi Files Cues M1: GoingNowhere M9: GoingUp M13: GoingUp Measures M1: “Drums.mid” M3: “Strings.mid” Measure 1 M2: “Drums.mid” M4: “Strings.mid” Measure 2 RUN-TIME FRAMEWORK
15
COMING UP… Intro to Upbeat Peyton Sherwood(Project Manager) Upbeat Code Adrian Weller(Language Guru) Compiler Structure & Tools Fan Lin 林凡 (System Integrator) Runtime Framework Matt D’Zmura(System Architect) Testing & What We’ve Learned Miles Ulrich(Verification and Validation)
16
TESTING SETUP UNIT TESTS Upbeat Source Files Lexer + Parser Target Java Code Validate against sample codeOne source file per feature Upbeat Source Files Compiler Toolchain Target MIDI Files Music verified by earCollection of source, input END-TO-END TESTS
17
WHAT WE’VE LEARNED Agree on a metaphor early K.I.S.S. Project Planning Schedule Weekly check-ins
18
UPBT: STOCK TICKER
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.