Presentation is loading. Please wait.

Presentation is loading. Please wait.

A language for auralizing data. MOTIVATION  Visual input overload!  Automatic musical scoring.

Similar presentations


Presentation on theme: "A language for auralizing data. MOTIVATION  Visual input overload!  Automatic musical scoring."— Presentation transcript:

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

19


Download ppt "A language for auralizing data. MOTIVATION  Visual input overload!  Automatic musical scoring."

Similar presentations


Ads by Google