synthing

a waveform sequencing synth on the web
Log | Files | Refs | Submodules

index.js (1499B)


      1 import { h, render } from 'preact';
      2 import App from './App';
      3 import './index.css';
      4 import 'preact/devtools';
      5 
      6 import { Provider, connect } from 'preact-redux';
      7 import { store } from './store.js';
      8 
      9 const ConnectedApp = connect(state => state,  {
     10     setVolume: (value) => ({type: 'SET_GLOBAL_VOLUME', value}),
     11     setBpm: (value) => ({type: 'SET_GLOBAL_BPM', value}),
     12     setBeat: (value) => ({type: 'SET_GLOBAL_BEAT', value}),
     13     setNumBeats: (value) => ({type: 'SET_GLOBAL_NUM_BEATS', value}),
     14     setEditingToneIdx: (value) => ({type: 'SET_EDITING_TONE_IDX', value}),
     15     startMetro: () => (dispatch, getState) => {
     16         const tickMetro = {type: 'TICK_METRO'};
     17         const startMetro = {type: 'START_METRO'};
     18 
     19         dispatch(startMetro);
     20 
     21         const loop = () => {
     22             if (getState().playing) {
     23                 dispatch(tickMetro);
     24                 window.setTimeout(loop, (1 / getState().bpm) * 60000);
     25             }
     26         }
     27 
     28         loop();
     29     },
     30     stopMetro: () => ({type: 'STOP_METRO'}),
     31     setAdsrProperty: (property, value) => ({type: 'SET_ADSR_PROPERTY', property, value}),
     32     addTone: (waveform, idx, activate) => ({type: 'ADD_TONE', waveform, idx, activate}),
     33     setToneProperty: (idx, property, value) => ({type: 'SET_TONE_PROPERTY', idx, property, value}),
     34     deleteTone: (idx) => ({type: 'DELETE_TONE', idx})
     35 
     36 })(App);
     37 
     38 const InformedApp = <Provider store={store}><ConnectedApp /></Provider>;
     39 
     40 render(
     41     InformedApp,
     42     document.getElementById('root')
     43 );