add drum-machine-react

This commit is contained in:
2020-05-26 07:01:12 -07:00
parent 06590ce07f
commit b659e8549a
55 changed files with 18652 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
import { padsArray } from "../Globals";
import { TOGGLEMETRONOME } from "../actions/toggleMetronomeIsPlayingAction.js";
const initMetronomeIsPlaying = () => {
const metronomePlayingStates = {};
padsArray.forEach(key => {
metronomePlayingStates[key + 'metronomeIsPlaying'] = false;
});
return metronomePlayingStates;
};
export default (state, action) => {
if (!state) {
state = initMetronomeIsPlaying();
}
switch (action.type) {
case TOGGLEMETRONOME:
state[action.key + 'metronomeIsPlaying'] = action.metronomeIsPlaying;
return state;
default:
return state;
}
}

View File

@@ -0,0 +1,18 @@
import { padsArray,initialIsMetronome } from "../Globals";
const getIsMetronomeStatuses = () => {
const metronomeStatuses = {};
padsArray.forEach(key => {
metronomeStatuses[key + 'isMetronome'] = sessionStorage.getItem(key + 'isMetronome');
});
return metronomeStatuses;
}
export default (state, action) => {
initialIsMetronome();
switch (action.type) {
default:
return getIsMetronomeStatuses();
}
};

View File

@@ -0,0 +1,25 @@
import { SETMETRONOMETEMPO } from "../actions/setMetronomeTempoAction.js";
import { padsArray,initialMetronomeTempos } from "../Globals";
const getMetronomeTempos = () => {
const metronomeTempos = {};
padsArray.forEach(key => {
metronomeTempos[key + 'metronomeTempo'] = parseInt(sessionStorage.getItem(key + 'metronomeTempo'));
});
return metronomeTempos;
}
export default (state, action) => {
if (!state) {
initialMetronomeTempos();
state = getMetronomeTempos();
}
switch (action.type) {
case SETMETRONOMETEMPO:
state[action.key + 'metronomeTempo'] = action.tempo;
return state;
default:
return state;
}
};

View File

@@ -0,0 +1,22 @@
import { combineReducers } from "redux";
import samplesReducer from "./samplesReducer";
import volumeOffSetsReducer from "./volumeOffSetsReducer";
import setVolumeReducer from "./setVolumeReducer";
import setDrumPadGridReducer from "./setDrumPadGridReducer";
import setSelectionMenuReducer from "./setSelectionMenuReducer";
import isMetronomeReducer from "./isMetronomeReducer";
import metronomeTemposReducer from "./metronomeTemposReducer";
import isMetronomePlayingReducer from "./isMetronomePlayingReducer";
import shouldMetronomeRestartReducer from "./shouldMetronomeRestartReducer";
export default combineReducers({
samplesUrls: samplesReducer,
volumeOffSets: volumeOffSetsReducer,
volume: setVolumeReducer,
drumPadGrid: setDrumPadGridReducer,
selectionMenu: setSelectionMenuReducer,
metronomeStatuses: isMetronomeReducer,
metronomeTempos: metronomeTemposReducer,
metronomePlayingStates: isMetronomePlayingReducer,
shouldMetronomeRestart: shouldMetronomeRestartReducer,
});

View File

@@ -0,0 +1,26 @@
import { padsArray,initialSamples } from "../Globals";
import { SETSAMPLE } from "../actions/setSampleAction.js";
const getUrls = () => {
const urls = {};
padsArray.forEach(key => {
urls[key] = sessionStorage.getItem(key);
});
return urls;
}
export default (state, action) => {
if (!state) {
initialSamples();
state = getUrls();
}
switch (action.type) {
case SETSAMPLE:
state[action.key] = action.sample;
return state;
default:
state = getUrls();
return state;
}
};

View File

@@ -0,0 +1,10 @@
import { DRUMPADGRID } from "../actions/setDrumPadGridAction.js";
export default (state = 'drumPadGrid', action) => {
switch(action.type) {
case DRUMPADGRID:
return action.drumPadGrid;
default:
return state;
}
}

View File

@@ -0,0 +1,10 @@
import { SELECTIONMENU } from "../actions/setSelectionMenuAction";
export default (state = 'pads', action) => {
switch(action.type) {
case SELECTIONMENU:
return action.selectionMenu;
default:
return state;
}
}

View File

@@ -0,0 +1,18 @@
import { CHANGEVOLUME } from "../actions/setVolumeAction.js";
let DEFAULTVOLUME = 30;
if (!sessionStorage.hasOwnProperty('volume')) {
sessionStorage.setItem('volume','30');
} else {
DEFAULTVOLUME = sessionStorage.getItem('volume');
}
export default (state = DEFAULTVOLUME, action) => {
switch (action.type) {
case CHANGEVOLUME:
return action.volume;
default:
return state;
}
}

View File

@@ -0,0 +1,24 @@
import { padsArray } from "../Globals";
import { RESTARTMETRONOME } from "../actions/shouldMetronomeRestartAction.js";
const initRestartMetronome = () => {
const restartMetronomes = {};
padsArray.forEach(key => {
restartMetronomes[key + 'restartMetronome'] = false;
});
return restartMetronomes;
};
export default (state, action) => {
if (!state) {
state = initRestartMetronome();
}
switch (action.type) {
case RESTARTMETRONOME:
state[action.key + 'restartMetronome'] = action.restartMetronome;
return state;
default:
return state;
}
}

View File

@@ -0,0 +1,21 @@
import { padsArray,initialPadVolumes } from "../Globals";
const getVolumeOffSets = () => {
const volumeOffSets = {};
padsArray.forEach(key => {
volumeOffSets[key + 'volume'] = sessionStorage.getItem(key + 'volume');
});
return volumeOffSets;
}
export default (state, action) => {
if (!state) {
initialPadVolumes();
state = getVolumeOffSets();
}
switch (action.type) {
default:
return state;
}
};