Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nothing Sounds Quite Like An NG-808

Nothing Sounds Quite Like An NG-808

A talk given at Seattle.js in February 2016, that introduces NG-808, a drum machine written using Angular 2 and TypeScript.

Leigh Caplan

February 11, 2016
Tweet

More Decks by Leigh Caplan

Other Decks in Programming

Transcript

  1. Signal Graph Code var context = new AudioContext(); var source

    = new AudioBufferSourceNode(); var osc = new OscillatorNode(); var gain = new GainNode(); var analyzer = new AnalyserNode(); var filter = new BiquadFilterNode(); source.connect(gain); osc.connect(gain); gain.connect(analyzer); gain.connect(filter); filter.connect(context.destination);
  2. Sequencing ‣ setTimeout is imprecise ‣ Setting start time using

    Web Audio API allows for sample-accurate placement of events
  3. TypeScript ‣ Developed by MS ‣ Superset of ES6 ‣

    Compiles to ES5 or ES6 ‣ Adds type system and other features to vanilla ES6
  4. TypeScript // (i: number) => number let addOne = (i:

    number) => i + 1; var three = addOne(2); // var three: number
  5. TypeScript // (i: number) => number let addOne = (i:

    number) => i + 1; var three = addOne(2); // var three: number var three = "tacos"; // Nope!
  6. TypeScript // (i: number) => number let addOne = (i:

    number) => i + 1; var three = addOne(2); // var three: number var three = "tacos"; // Nope! let wtf = addOne("tacos"); // Also nope!
  7. Angular 2 Components import {Component, Input} from 'angular2/core'; @Component({ selector:

    "awesome-button", template: ` <button (click)="onClick()"> {{buttonText}} </button> ` }) class AwesomeButton { @Input() buttonText; onClick() { console.log("You clicked the awesome button!"); } }
  8. Angular 2 Components import {Component, Input} from 'angular2/core'; @Component({ selector:

    "awesome-button", template: ` <button (click)="onClick()"> {{buttonText}} </button> ` }) class AwesomeButton { @Input() buttonText; onClick() { console.log("You clicked the awesome button!");
  9. <button (click)="onClick()"> {{buttonText}} </button> ` }) class AwesomeButton { @Input()

    buttonText; onClick() { console.log("You clicked the awesome button!"); } }
  10. Angular 2 Components import {Component, Input} from 'angular2/core'; @Component({ selector:

    "awesome-button", template: ` <button (click)="onClick()"> {{buttonText}} </button> ` }) class AwesomeButton { @Input() buttonText; onClick() { console.log("You clicked the awesome button!"); } }
  11. template: ` <button (click)="onClick()"> {{buttonText}} </button> ` }) class AwesomeButton

    { @Input() buttonText; onClick() { console.log("You clicked the awesome button!"); } }
  12. Use in a template <awesome-button [buttonText]="Click me!"> </awesome-button> AwesomeButton @Input()

    buttonText; [buttonText] <button (click)="onClick()"> Click me! </button>
  13. NG-808 View <div class="container-fluid"> <div class="row"> <div class="col-lg-2"> <h1>NG-808 MK2</h1>

    </div> <controls></controls> <sequence-selector></sequence-selector> </div> <sequencer></sequencer> </div>
  14. NG-808 View <div class="container-fluid"> <div class="row"> <div class="col-lg-2"> <h1>NG-808 MK2</h1>

    </div> <controls></controls> <sequence-selector></sequence-selector> </div> <sequencer></sequencer> </div>