commit 5fb01ce83db4ab3f7cd033f49bda2fd40da40251
parent 9a2e829d961f470eb404e8a7dab18224e294812e
Author: Massimo Siboldi <mdsiboldi@gmail.com>
Date: Wed, 28 Feb 2018 14:15:48 -0800
Volume component sans events
Diffstat:
5 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/src/App/index.js b/src/App/index.js
@@ -3,6 +3,7 @@ import WaveEditor from '../WaveEditor/';
import WaveManager from '../WaveManager/';
import Synth from '../Synth/';
import CircleButton from '../CircleButton/';
+import WaveTable from '../WaveTable/';
import Param from '../Param/';
import Wheel from '../Wheel/';
import './App.css';
@@ -103,6 +104,7 @@ class App extends Component {
waveforms: [{
active: true,
waveform: initialWave.slice(),
+ volume: 0.7,
mute: false,
solo: false,
beats: boolArray.update(boolArray.create(initBeats), 0, true)
@@ -136,7 +138,7 @@ class App extends Component {
}
if (!this.state.playing || val.beats[this.state.beat]) {
if (!val.mute) {
- accum[group].push(val.waveform);
+ accum[group].push(val);
}
}
return accum;
@@ -151,7 +153,7 @@ class App extends Component {
}
const firstWave = allWaves.shift();
return allWaves.reduce(
- (totalArray, currWaveform, i) => totalArray.map((val, j) => ((val * (i + 1)) + currWaveform[j]) / (i + 2)),
+ (totalArray, currWaveform, i) => totalArray.map((val, j) => ((val * (i + 1)) + (currWaveform[j].waveform * currWaveform[j].volume)) / (i + 2)),
firstWave
)
}
@@ -272,6 +274,12 @@ class App extends Component {
)
});
}}
+ volume={this.state.waveforms[idx].volume}
+ updateVolume={(volume) => {
+ this.updateWaveform(idx, {
+ volume
+ });
+ }}
></WaveManager>
);
})
@@ -280,7 +288,11 @@ class App extends Component {
className="App"
onKeyDown={this.keyHandler}
>
- <h1>synthing</h1>
+ <div>
+ <h1>synthing
+ <WaveTable myStyle="float:right; margin-right: 10px; margin-top: -5px;" height={50} width={100} waveform={this.totalWaveform()} />
+ </h1>
+ </div>
<WaveEditor
mouseData={this.state.mouseData}
waveform={this.editingWaveform()}
diff --git a/src/Volume/index.js b/src/Volume/index.js
@@ -0,0 +1,18 @@
+import { h, Component } from 'preact';
+import './style.css';
+
+export default (props) => {
+ console.log(props);
+ return (
+ <div class="Volume">
+ <span class="icon-volume"></span>
+ <span class="volume-triangle-container">
+ <span
+ class="volume-triangle -foreground"
+ style={`transform: scale(${props.volume});`}
+ ></span>
+ <span class="volume-triangle -background"></span>
+ </span>
+ </div>
+ );
+};
diff --git a/src/Volume/style.css b/src/Volume/style.css
@@ -0,0 +1,26 @@
+.volume-triangle {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: inline-block;
+ border: 8px solid transparent;
+ border-right-color: black;
+ border-right-width: 30px;
+ border-left-width: 0px;
+ height: 0px;
+ margin-bottom: -2px;
+ margin-left: 2px;
+}
+
+.volume-triangle.-background {
+ opacity: 0.3;
+}
+
+.volume-triangle.-foreground {
+ transform-origin: left;
+}
+
+.volume-triangle-container {
+ position: relative;
+ width: 20px;
+}
diff --git a/src/WaveManager/index.js b/src/WaveManager/index.js
@@ -1,6 +1,7 @@
import { h, Component } from 'preact';
import CheckBox from '../CheckBox/';
import WaveTable from '../WaveTable/';
+import Volume from '../Volume/';
import helpers from '../helpers';
import './style.css';
@@ -39,11 +40,16 @@ export default class WaveManager extends Component {
>
mute
</button>
+ <Volume
+ volume={this.props.volume}
+ update={this.props.updateVolume}
+ />
</div>
</div>
<div class="beats">
<div onClick={this.props.activate}>
<WaveTable
+ resize={true}
height={40}
width={75}
waveform={this.props.waveformData.waveform.slice()}
diff --git a/src/WaveTable/index.js b/src/WaveTable/index.js
@@ -24,13 +24,19 @@ export default class WaveTable extends Component {
this.drawArea = helpers.throttle(drawArea, 30);
}
componentWillUpdate() {
- return false;
+ return this.props.resize;
}
componentDidMount() {
this.drawArea(this.props.waveform, this.canvasRef);
if (this.props.setCanvasRef) {
this.props.setCanvasRef(this.canvasRef);
}
+ if (this.props.resize) {
+ window.addEventListener('resize', (ev) => {
+ console.log('yo', this.forceUpdate)
+ this.forceUpdate();
+ })
+ }
}
componentWillReceiveProps(newProps) {
this.drawArea(newProps.waveform, this.canvasRef);
@@ -41,7 +47,7 @@ export default class WaveTable extends Component {
return (
<canvas
class="wave-table"
- style={`color: red; height: ${height}px; width: ${width}px`}
+ style={`${this.props.myStyle}; color: red; height: ${height}px; width: ${width}px`}
height={height}
width={width}
ref={(canvas) => {this.canvasRef = canvas}}>