diff --git a/src/components/library/library.jsx b/src/components/library/library.jsx
index 18c4180c111..a43d9650b51 100644
--- a/src/components/library/library.jsx
+++ b/src/components/library/library.jsx
@@ -17,6 +17,10 @@ class LibraryComponent extends React.Component {
// Double select: select as the library's value.
this.props.onRequestClose();
this.props.onItemSelected(this.props.data[id]);
+ } else {
+ if (this.props.onItemChosen) {
+ this.props.onItemChosen(this.props.data[id]);
+ }
}
this.setState({selectedItem: id});
}
@@ -61,6 +65,7 @@ LibraryComponent.propTypes = {
})
/* eslint-enable react/no-unused-prop-types, lines-around-comment */
),
+ onItemChosen: React.PropTypes.func,
onItemSelected: React.PropTypes.func,
onRequestClose: React.PropTypes.func,
title: React.PropTypes.string.isRequired,
diff --git a/src/components/target-pane/icon--sound-dark.svg b/src/components/target-pane/icon--sound-dark.svg
new file mode 100644
index 00000000000..c7e6081b50e
--- /dev/null
+++ b/src/components/target-pane/icon--sound-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/target-pane/target-pane.jsx b/src/components/target-pane/target-pane.jsx
index 29bb8c7d46d..e4e86e4de30 100644
--- a/src/components/target-pane/target-pane.jsx
+++ b/src/components/target-pane/target-pane.jsx
@@ -8,6 +8,7 @@ const VM = require('scratch-vm');
const Box = require('../box/box.jsx');
const BackdropLibrary = require('../../containers/backdrop-library.jsx');
const CostumeLibrary = require('../../containers/costume-library.jsx');
+const SoundLibrary = require('../../containers/sound-library.jsx');
const SpriteLibrary = require('../../containers/sprite-library.jsx');
const SpriteSelectorComponent = require('../sprite-selector/sprite-selector.jsx');
const StageSelector = require('../../containers/stage-selector.jsx');
@@ -36,6 +37,7 @@ class TargetPane extends React.Component {
editingTarget,
backdropLibraryVisible,
costumeLibraryVisible,
+ soundLibraryVisible,
spriteLibraryVisible,
onChangeSpriteDraggability,
onChangeSpriteName,
@@ -48,6 +50,7 @@ class TargetPane extends React.Component {
onNewBackdropClick,
onRequestCloseBackdropLibrary,
onRequestCloseCostumeLibrary,
+ onRequestCloseSoundLibrary,
onRequestCloseSpriteLibrary,
onSelectSprite,
stage,
@@ -113,6 +116,11 @@ class TargetPane extends React.Component {
vm={vm}
onRequestClose={onRequestCloseCostumeLibrary}
/>
+
(`https://cdn.assets.scratch.mit.edu/internalapi/asset/${md5}/get/`);
+
+class SoundLibrary extends React.Component {
+ constructor (props) {
+ super(props);
+ bindAll(this, [
+ 'handleItemSelected',
+ 'handleItemChosen'
+ ]);
+ }
+ componentDidMount () {
+ // @todo lots of architectural questions here
+ // - Should the sound library component own an audio player, or use the VM?
+ // - Should the sound library load up all the sounds or only on demand?
+ // - How can we get a callback for knowing when the sound has been loaded?
+ this.audioEngine = new AudioEngine();
+ this.player = this.audioEngine.createPlayer();
+ this.audioEngine.loadSounds(soundLibraryContent.map(sound => (
+ {
+ fileUrl: md5ToUrl(sound.md5),
+ ...sound
+ }
+ )));
+ }
+ handleItemChosen (item) {
+ this.player.playSound(item._md5);
+ }
+ handleItemSelected (item) {
+ // @todo these two props should be handled by a VM.addSound function
+ const nextSoundId = this.props.vm.editingTarget.sprite.sounds.length;
+ const fileUrl = md5ToUrl(item._md5);
+ const vmSound = {
+ fileUrl,
+ format: item.format,
+ md5: item._md5,
+ rate: item.rate,
+ sampleCount: item.sampleCount,
+ soundID: nextSoundId,
+ name: item.name
+ };
+ // @todo awaiting an official VM.addSound function
+ // it will need to both add to sprite and load the sound
+ this.props.vm.editingTarget.sprite.sounds.push(vmSound);
+ this.props.vm.runtime.audioEngine.loadSounds([vmSound]);
+ }
+ render () {
+ // @todo need to use this hack to avoid library using md5 for image
+ const soundLibraryThumbnailData = soundLibraryContent.map(sound => {
+ const {
+ md5,
+ ...otherData
+ } = sound;
+ return {
+ _md5: md5,
+ rawURL: soundIcon,
+ ...otherData
+ };
+ });
+
+ return (
+
+ );
+ }
+}
+
+SoundLibrary.propTypes = {
+ onRequestClose: React.PropTypes.func,
+ visible: React.PropTypes.bool,
+ vm: React.PropTypes.instanceOf(VM).isRequired
+};
+
+module.exports = SoundLibrary;
diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx
index 4afcfed2ceb..9a66cbb7792 100644
--- a/src/containers/target-pane.jsx
+++ b/src/containers/target-pane.jsx
@@ -5,9 +5,11 @@ const {connect} = require('react-redux');
const {
openBackdropLibrary,
+ openSoundLibrary,
openSpriteLibrary,
closeBackdropLibrary,
closeCostumeLibrary,
+ closeSoundLibrary,
closeSpriteLibrary
} = require('../reducers/modals');
@@ -87,6 +89,7 @@ const mapStateToProps = state => ({
return sprites;
}, {}),
stage: state.targets.stage,
+ soundLibraryVisible: state.modals.soundLibrary,
spriteLibraryVisible: state.modals.spriteLibrary,
costumeLibraryVisible: state.modals.costumeLibrary,
backdropLibraryVisible: state.modals.backdropLibrary
@@ -96,6 +99,10 @@ const mapDispatchToProps = dispatch => ({
e.preventDefault();
dispatch(openBackdropLibrary());
},
+ onNewSoundClick: e => {
+ e.preventDefault();
+ dispatch(openSoundLibrary());
+ },
onNewSpriteClick: e => {
e.preventDefault();
dispatch(openSpriteLibrary());
@@ -106,6 +113,9 @@ const mapDispatchToProps = dispatch => ({
onRequestCloseCostumeLibrary: () => {
dispatch(closeCostumeLibrary());
},
+ onRequestCloseSoundLibrary: () => {
+ dispatch(closeSoundLibrary());
+ },
onRequestCloseSpriteLibrary: () => {
dispatch(closeSpriteLibrary());
}
diff --git a/src/lib/libraries/sounds.json b/src/lib/libraries/sounds.json
new file mode 100644
index 00000000000..38745812128
--- /dev/null
+++ b/src/lib/libraries/sounds.json
@@ -0,0 +1,1045 @@
+[
+ {
+ "name": "boing",
+ "md5": "53a3c2e27d1fb5fdb14aaf0cb41e7889.wav",
+ "sampleCount": 6804,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "chomp",
+ "md5": "0b1e3033140d094563248e61de4039e5.wav",
+ "sampleCount": 2912,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "gong",
+ "md5": "6af567714db37721a11c55d2a2648aec.wav",
+ "sampleCount": 46848,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "pop",
+ "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav",
+ "sampleCount": 258,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "space ripple",
+ "md5": "ff8b8c3bf841a11fd5fe3afaa92be1b5.wav",
+ "sampleCount": 41149,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "beeps",
+ "md5": "3be0a558370fedba3a6b315e0ca15b33.wav",
+ "sampleCount": 9536,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "woof",
+ "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav",
+ "sampleCount": 3168,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "squawk",
+ "md5": "e140d7ff07de8fa35c3d1595bba835ac.wav",
+ "sampleCount": 8208,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "cheer",
+ "md5": "4b36eebf22be4667fc2f15b78c805b4c.wav",
+ "sampleCount": 62528,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "wub",
+ "md5": "e1f32c057411da4237181ce72ae15d23.wav",
+ "sampleCount": 7392,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hey",
+ "md5": "ec7c272faa862c9f8f731792e686e3c9.wav",
+ "sampleCount": 5414,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "C major ukulele",
+ "md5": "aa2ca112507b59b5337f341aaa75fb08.wav",
+ "sampleCount": 18203,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "dance loop",
+ "md5": "e936679bac519b1df3ddea3f5db7594f.wav",
+ "sampleCount": 92800,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "funky loop",
+ "md5": "fb56022366d21b299cbc3fd5e16000c2.wav",
+ "sampleCount": 44748,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "dance celebrate",
+ "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav",
+ "sampleCount": 176401,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "odesong-b",
+ "md5": "2c41921491b1da2bfa1ebcaba34265ca.wav",
+ "sampleCount": 212553,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "C bass",
+ "md5": "c3566ec797b483acde28f790994cc409.wav",
+ "sampleCount": 44608,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D bass",
+ "md5": "5a3ae8a2665f50fdc38cc301fbac79ba.wav",
+ "sampleCount": 40192,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E bass",
+ "md5": "0657e39bae81a232b01a18f727d3b891.wav",
+ "sampleCount": 36160,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F bass",
+ "md5": "ea21bdae86f70d60b28f1dddcf50d104.wav",
+ "sampleCount": 34368,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G bass",
+ "md5": "05c192194e8f1944514dce3833e33439.wav",
+ "sampleCount": 30976,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A bass",
+ "md5": "c04ebf21e5e19342fa1535e4efcdb43b.wav",
+ "sampleCount": 28160,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B bass",
+ "md5": "e31dcaf7bcdf58ac2a26533c48936c45.wav",
+ "sampleCount": 25792,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 bass",
+ "md5": "667d6c527b79321d398e85b526f15b99.wav",
+ "sampleCount": 24128,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "plunge",
+ "md5": "c09455ee9da0e7eeead42d4e73c2555d.wav",
+ "sampleCount": 22400,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "meow",
+ "md5": "83c36d806dc92327b9e7049a565c6bff.wav",
+ "sampleCount": 18688,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "xylo1",
+ "md5": "6ac484e97c1c1fe1384642e26a125e70.wav",
+ "sampleCount": 238232,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "bell toll",
+ "md5": "25d61e79cbeba4041eebeaebd7bf9598.wav",
+ "sampleCount": 45168,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "water drop",
+ "md5": "aa488de9e2c871e9d4faecd246ed737a.wav",
+ "sampleCount": 8136,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "strum",
+ "md5": "b92de59d992a655c1b542223a784cda6.wav",
+ "sampleCount": 11247,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "meow2",
+ "md5": "cf51a0c4088942d95bcc20af13202710.wav",
+ "sampleCount": 6512,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "ripples",
+ "md5": "4da8a805673c288965e1e5535c3f7f2b.wav",
+ "sampleCount": 10144,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "dance snare beat",
+ "md5": "562587bdb75e3a8124cdaa46ba0f648b.wav",
+ "sampleCount": 176401,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "small cowbell",
+ "md5": "e29154f53f56f96f8a3292bdcddcec54.wav",
+ "sampleCount": 9718,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "large cowbell",
+ "md5": "006316650ffc673dc02d36aa55881327.wav",
+ "sampleCount": 20856,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "crash cymbal",
+ "md5": "f2c47a46f614f467a7ac802ed9ec3d8e.wav",
+ "sampleCount": 25220,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hihat cymbal",
+ "md5": "2d01f60d0f20ab39facbf707899c6b2a.wav",
+ "sampleCount": 2752,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "splash cymbal",
+ "md5": "9d63ed5be96c43b06492e8b4a9cea8d8.wav",
+ "sampleCount": 9600,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "roll cymbal",
+ "md5": "da8355d753cd2a5ddd19cb2bb41c1547.wav",
+ "sampleCount": 26432,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "bell cymbal",
+ "md5": "efddec047de95492f775a1b5b2e8d19e.wav",
+ "sampleCount": 19328,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "dog1",
+ "md5": "b15adefc3c12f758b6dc6a045362532f.wav",
+ "sampleCount": 3672,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "dog2",
+ "md5": "cd8fa8390b0efdd281882533fbfcfcfb.wav",
+ "sampleCount": 3168,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "bird",
+ "md5": "18bd4b634a3f992a16b30344c7d810e0.wav",
+ "sampleCount": 3840,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "drum bass1",
+ "md5": "48328c874353617451e4c7902cc82817.wav",
+ "sampleCount": 6528,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "drum bass2",
+ "md5": "711a1270d1cf2e5de9b145ee539213e4.wav",
+ "sampleCount": 3791,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "drum bass3",
+ "md5": "c21704337b16359ea631b5f8eb48f765.wav",
+ "sampleCount": 8576,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "high conga",
+ "md5": "16144544de90e98a92a265d4fc3241ea.wav",
+ "sampleCount": 8192,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "low conga",
+ "md5": "0b6f94487cd8a1cf0bb77e15966656c3.wav",
+ "sampleCount": 8384,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "muted conga",
+ "md5": "1d4abbe3c9bfe198a88badb10762de75.wav",
+ "sampleCount": 4544,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "tap conga",
+ "md5": "fd9a67157f57f9cc6fe3cdce38a6d4a8.wav",
+ "sampleCount": 6880,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "tap snare",
+ "md5": "d55b3954d72c6275917f375e49b502f3.wav",
+ "sampleCount": 3296,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "sidestick snare",
+ "md5": "f6868ee5cf626fc4ef3ca1119dc95592.wav",
+ "sampleCount": 2336,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "flam snare",
+ "md5": "3b6cce9f8c56c0537ca61eee3945cd1d.wav",
+ "sampleCount": 4416,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hi na tabla",
+ "md5": "35b42d98c43404a5b1b52fb232a62bd7.wav",
+ "sampleCount": 4096,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hi tun tabla",
+ "md5": "da734693dfa6a9a7eccdc7f9a0ca9840.wav",
+ "sampleCount": 18656,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "lo gliss tabla",
+ "md5": "d7cd24689737569c93e7ea7344ba6b0e.wav",
+ "sampleCount": 7008,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "lo geh tabla",
+ "md5": "9205359ab69d042ed3da8a160a651690.wav",
+ "sampleCount": 30784,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "high tom",
+ "md5": "d623f99b3c8d33932eb2c6c9cfd817c5.wav",
+ "sampleCount": 12320,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "low tom",
+ "md5": "1569bbbd8952b0575e5a5cb5aefb50ba.wav",
+ "sampleCount": 20000,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "duck",
+ "md5": "af5b039e1b05e0ccb12944f648a8884e.wav",
+ "sampleCount": 5792,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C guitar",
+ "md5": "22baa07795a9a524614075cdea543793.wav",
+ "sampleCount": 44864,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D guitar",
+ "md5": "2dbcfae6a55738f94bbb40aa5fcbf7ce.wav",
+ "sampleCount": 41120,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E guitar",
+ "md5": "4b5d1da83e59bf35578324573c991666.wav",
+ "sampleCount": 38400,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F guitar",
+ "md5": "b51d086aeb1921ec405561df52ecbc50.wav",
+ "sampleCount": 36416,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G guitar",
+ "md5": "98a835713ecea2f3ef9f4f442d52ad20.wav",
+ "sampleCount": 33600,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A guitar",
+ "md5": "ee753e87d212d4b2fb650ca660f1e839.wav",
+ "sampleCount": 31872,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B guitar",
+ "md5": "2ae2d67de62df8ca54d638b4ad2466c3.wav",
+ "sampleCount": 29504,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 guitar",
+ "md5": "c8d2851bd99d8e0ce6c1f05e4acc7f34.wav",
+ "sampleCount": 27712,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C elec bass",
+ "md5": "69eee3d038ea0f1c34ec9156a789236d.wav",
+ "sampleCount": 5216,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D elec bass",
+ "md5": "67a6d1aa68233a2fa641aee88c7f051f.wav",
+ "sampleCount": 5568,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E elec bass",
+ "md5": "0704b8ceabe54f1dcedda8c98f1119fd.wav",
+ "sampleCount": 5691,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F elec bass",
+ "md5": "45eedb4ce62a9cbbd2207824b94a4641.wav",
+ "sampleCount": 5312,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G elec bass",
+ "md5": "97b187d72219b994a6ef6a5a6b09605c.wav",
+ "sampleCount": 5568,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A elec bass",
+ "md5": "5cb46ddd903fc2c9976ff881df9273c9.wav",
+ "sampleCount": 5920,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B elec bass",
+ "md5": "5a0701d0a914223b5288300ac94e90e4.wav",
+ "sampleCount": 6208,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 elec bass",
+ "md5": "56fc995b8860e713c5948ecd1c2ae572.wav",
+ "sampleCount": 5792,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C elec guitar",
+ "md5": "0d340de02e14bebaf8dfa0e43eb3f1f9.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D elec guitar",
+ "md5": "1b5de9866801eb2f9d4f57c7c3b473f5.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E elec guitar",
+ "md5": "2e6a6ae3e0f72bf78c74def8130f459a.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F elec guitar",
+ "md5": "5eb00f15f21f734986aa45156d44478d.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G elec guitar",
+ "md5": "cd0d0e7dad415b2ffa2ba7a61860eaf8.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A elec guitar",
+ "md5": "fa5f7fea601e9368dd68449d9a54c995.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B elec guitar",
+ "md5": "81f142d0b00189703d7fe9b1f13f6f87.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 elec guitar",
+ "md5": "3a8ed3129f22cba5b0810bc030d16b5f.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "xylo3",
+ "md5": "3395cade6d7c0cc9ce73a8c12f40319b.wav",
+ "sampleCount": 209502,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "tom drum",
+ "md5": "ca350a536d60bb8ed50f24677d65eed8.wav",
+ "sampleCount": 33920,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "dance celebrate2",
+ "md5": "0edb8fb88af19e6e17d0f8cf64c1d136.wav",
+ "sampleCount": 176401,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "bass beatbox",
+ "md5": "28153621d293c86da0b246d314458faf.wav",
+ "sampleCount": 6720,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hi beatbox",
+ "md5": "5a07847bf246c227204728b05a3fc8f3.wav",
+ "sampleCount": 5856,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "snare beatbox",
+ "md5": "c642c4c00135d890998f351faec55498.wav",
+ "sampleCount": 5630,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "scratching beatbox",
+ "md5": "859249563a7b1fc0f6e92e36d1db81c7.wav",
+ "sampleCount": 11552,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "crash beatbox",
+ "md5": "725e29369e9138a43f11e0e5eb3eb562.wav",
+ "sampleCount": 26883,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "wub beatbox",
+ "md5": "e1f32c057411da4237181ce72ae15d23.wav",
+ "sampleCount": 7392,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "hihat beatbox",
+ "md5": "0c77025e2e874f05cd3c7d850874d56d.wav",
+ "sampleCount": 4274,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "rim beatbox",
+ "md5": "7ede1382b578d8fc32850b48d082d914.wav",
+ "sampleCount": 4960,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "clap beatbox",
+ "md5": "abc70bb390f8e55f22f32265500d814a.wav",
+ "sampleCount": 4224,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "wah beatbox",
+ "md5": "9021b7bb06f2399f18e2db4fb87095dc.wav",
+ "sampleCount": 6624,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "chee chee",
+ "md5": "25f4826cdd61e0a1c623ec2324c16ca0.wav",
+ "sampleCount": 34560,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "horse",
+ "md5": "45ffcf97ee2edca0199ff5aa71a5b72e.wav",
+ "sampleCount": 14464,
+ "rate": 11025,
+ "format": ""
+ },
+ {
+ "name": "C piano",
+ "md5": "d27ed8d953fe8f03c00f4d733d31d2cc.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D piano",
+ "md5": "51381ac422605ee8c7d64cfcbfd75efc.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E piano",
+ "md5": "c818fdfaf8a0efcb562e24e794700a57.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F piano",
+ "md5": "cdab3cce84f74ecf53e3941c6a003b5e.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G piano",
+ "md5": "42bb2ed28e7023e111b33220e1594a6f.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A piano",
+ "md5": "0727959edb2ea0525feed9b0c816991c.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B piano",
+ "md5": "86826c6022a46370ed1afae69f1ab1b9.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 piano",
+ "md5": "75d7d2c9b5d40dd4e1cb268111abf1a2.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C elec piano",
+ "md5": "8366ee963cc57ad24a8a35a26f722c2b.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D elec piano",
+ "md5": "835f136ca8d346a17b4d4baf8405be37.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E elec piano",
+ "md5": "ab3c198f8e36efff14f0a5bad35fa3cd.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F elec piano",
+ "md5": "dc5e368fc0d0dad1da609bfc3e29aa15.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G elec piano",
+ "md5": "39525f6545d62a95d05153f92d63301a.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A elec piano",
+ "md5": "0cfa8e84d6a5cd63afa31d541625a9ef.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B elec piano",
+ "md5": "9cc77167419f228503dd57fddaa5b2a6.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 elec piano",
+ "md5": "366c7edbd4dd5cca68bf62902999bd66.wav",
+ "sampleCount": 44100,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C sax",
+ "md5": "4d2c939d6953b5f241a27a62cf72de64.wav",
+ "sampleCount": 9491,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D sax",
+ "md5": "39f41954a73c0e15d842061e1a4c5e1d.wav",
+ "sampleCount": 9555,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E sax",
+ "md5": "3568b7dfe173fab6877a9ff1dcbcf1aa.wav",
+ "sampleCount": 7489,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F sax",
+ "md5": "2ae3083817bcd595e26ea2884b6684d5.wav",
+ "sampleCount": 7361,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "G sax",
+ "md5": "cefba5de46adfe5702485e0934bb1e13.wav",
+ "sampleCount": 7349,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "A sax",
+ "md5": "420991e0d6d99292c6d736963842536a.wav",
+ "sampleCount": 6472,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B sax",
+ "md5": "653ebe92d491b49ad5d8101d629f567b.wav",
+ "sampleCount": 9555,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 sax",
+ "md5": "ea8d34b18c3d8fe328cea201666458bf.wav",
+ "sampleCount": 7349,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "drive around",
+ "md5": "a3a85fb8564b0266f50a9c091087b7aa.wav",
+ "sampleCount": 44096,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "scratchy beat",
+ "md5": "289dc558e076971e74dd1a0bd55719b1.wav",
+ "sampleCount": 44096,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "drum jam",
+ "md5": "8b5486ccc806e97e83049d25b071f7e4.wav",
+ "sampleCount": 44288,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "cymbal echo",
+ "md5": "bb243badd1201b2607bf2513df10cd97.wav",
+ "sampleCount": 44326,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "drum satellite",
+ "md5": "079067d7909f791b29f8be1c00fc2131.wav",
+ "sampleCount": 44096,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "kick back",
+ "md5": "9cd340d9d568b1479f731e69e103b3ce.wav",
+ "sampleCount": 44748,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "drum funky",
+ "md5": "fb56022366d21b299cbc3fd5e16000c2.wav",
+ "sampleCount": 44748,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "C trombone",
+ "md5": "821b23a489201a0f21f47ba8528ba47f.wav",
+ "sampleCount": 19053,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D trombone",
+ "md5": "f3afca380ba74372d611d3f518c2f35b.wav",
+ "sampleCount": 17339,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E trombone",
+ "md5": "c859fb0954acaa25c4b329df5fb76434.wav",
+ "sampleCount": 16699,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F trombone",
+ "md5": "d6758470457aac2aa712717a676a5163.wav",
+ "sampleCount": 19373,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G trombone",
+ "md5": "9436fd7a0eacb4a6067e7db14236dde1.wav",
+ "sampleCount": 17179,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A trombone",
+ "md5": "863ccc8ba66e6dabbce2a1261c22be0f.wav",
+ "sampleCount": 17227,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "B trombone",
+ "md5": "85b663229525b73d9f6647f78eb23e0a.wav",
+ "sampleCount": 15522,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 trombone",
+ "md5": "68aec107bd3633b2ee40c532eedc3897.wav",
+ "sampleCount": 13904,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C trumpet",
+ "md5": "8970afcdc4e47bb54959a81fe27522bd.wav",
+ "sampleCount": 13118,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "D trumpet",
+ "md5": "0b1345b8fe2ba3076fedb4f3ae48748a.wav",
+ "sampleCount": 12702,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "E trumpet",
+ "md5": "494295a92314cadb220945a6711c568c.wav",
+ "sampleCount": 8680,
+ "rate": 22050,
+ "format": "adpcm"
+ },
+ {
+ "name": "F trumpet",
+ "md5": "5fa3108b119ca266029b4caa340a7cd0.wav",
+ "sampleCount": 12766,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G trumpet",
+ "md5": "e84afda25975f14b364118591538ccf4.wav",
+ "sampleCount": 14640,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A trumpet",
+ "md5": "d2dd6b4372ca17411965dc92d52b2172.wav",
+ "sampleCount": 13911,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "B trumpet",
+ "md5": "cad2bc57729942ed9b605145fc9ea65d.wav",
+ "sampleCount": 14704,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "C2 trumpet",
+ "md5": "df08249ed5446cc5e10b7ac62faac89b.wav",
+ "sampleCount": 15849,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "F major ukulele",
+ "md5": "cd0ab5d1b0120c6ed92a1654ccf81376.wav",
+ "sampleCount": 18235,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "A minor ukulele",
+ "md5": "69d25af0fd065da39c71439174efc589.wav",
+ "sampleCount": 18267,
+ "rate": 22050,
+ "format": ""
+ },
+ {
+ "name": "G ukulele",
+ "md5": "d20218f92ee606277658959005538e2d.wav",
+ "sampleCount": 18235,
+ "rate": 22050,
+ "format": ""
+ }
+]
diff --git a/src/reducers/modals.js b/src/reducers/modals.js
index 2acce9e7621..a55cb71d648 100644
--- a/src/reducers/modals.js
+++ b/src/reducers/modals.js
@@ -3,11 +3,13 @@ const CLOSE_MODAL = 'scratch-gui/modals/CLOSE_MODAL';
const MODAL_BACKDROP_LIBRARY = 'backdropLibrary';
const MODAL_COSTUME_LIBRARY = 'costumeLibrary';
+const MODAL_SOUND_LIBRARY = 'soundLibrary';
const MODAL_SPRITE_LIBRARY = 'spriteLibrary';
const initialState = {
[MODAL_BACKDROP_LIBRARY]: false,
[MODAL_COSTUME_LIBRARY]: false,
+ [MODAL_SOUND_LIBRARY]: false,
[MODAL_SPRITE_LIBRARY]: false
};
@@ -44,6 +46,9 @@ reducer.openBackdropLibrary = function () {
reducer.openCostumeLibrary = function () {
return reducer.openModal(MODAL_COSTUME_LIBRARY);
};
+reducer.openSoundLibrary = function () {
+ return reducer.openModal(MODAL_SOUND_LIBRARY);
+};
reducer.openSpriteLibrary = function () {
return reducer.openModal(MODAL_SPRITE_LIBRARY);
};
@@ -56,4 +61,7 @@ reducer.closeCostumeLibrary = function () {
reducer.closeSpriteLibrary = function () {
return reducer.closeModal(MODAL_SPRITE_LIBRARY);
};
+reducer.closeSoundLibrary = function () {
+ return reducer.closeModal(MODAL_SOUND_LIBRARY);
+};
module.exports = reducer;