Skip to content

Commit 67fe518

Browse files
Merge pull request scratchfoundation#5218 from ericrosenbaum/feature/limit-loud-rms-no-waveshaper
Limit louder effect with a max RMS (w/o waveshaper)
2 parents 181c7ea + 523667d commit 67fe518

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/components/sound-editor/sound-editor.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ const SoundEditor = props => (
265265
onClick={props.onSlower}
266266
/>
267267
<IconButton
268+
disabled={props.tooLoud}
268269
className={classNames(styles.effectButton, styles.flipInRtl)}
269270
img={louderIcon}
270271
title={<FormattedMessage {...messages.louder} />}
@@ -340,6 +341,7 @@ SoundEditor.propTypes = {
340341
onUndo: PropTypes.func.isRequired,
341342
playhead: PropTypes.number,
342343
setRef: PropTypes.func,
344+
tooLoud: PropTypes.bool.isRequired,
343345
trimEnd: PropTypes.number,
344346
trimStart: PropTypes.number
345347
};

src/containers/sound-editor.jsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import log from '../lib/log.js';
1414

1515
const UNDO_STACK_SIZE = 99;
1616

17+
const MAX_RMS = 1.2;
18+
1719
class SoundEditor extends React.Component {
1820
constructor (props) {
1921
super(props);
@@ -265,6 +267,15 @@ class SoundEditor extends React.Component {
265267
}
266268
});
267269
}
270+
tooLoud () {
271+
const numChunks = this.state.chunkLevels.length;
272+
const startIndex = this.state.trimStart === null ?
273+
0 : Math.floor(this.state.trimStart * numChunks);
274+
const endIndex = this.state.trimEnd === null ?
275+
numChunks - 1 : Math.ceil(this.state.trimEnd * numChunks);
276+
const trimChunks = this.state.chunkLevels.slice(startIndex, endIndex);
277+
return Math.max(...trimChunks) > MAX_RMS;
278+
}
268279
getUndoItem () {
269280
return {
270281
...this.copyCurrentBuffer(),
@@ -399,6 +410,7 @@ class SoundEditor extends React.Component {
399410
name={this.props.name}
400411
playhead={this.state.playhead}
401412
setRef={this.setRef}
413+
tooLoud={this.tooLoud()}
402414
trimEnd={this.state.trimEnd}
403415
trimStart={this.state.trimStart}
404416
onChangeName={this.handleChangeName}

0 commit comments

Comments
 (0)