phetsims / mean-share-and-balance

"Mean: Share and Balance" is an educational simulation in HTML5, by PhET Interactive Simulations.
GNU General Public License v3.0
2 stars 1 forks source link

Add sound for the predict mean pencil slider on screen one #173

Closed Ashton-Morris closed 5 months ago

Ashton-Morris commented 6 months ago

I have two files in case the .mp3 doesn't loop perfectly. They are in the same folder as the other issues.

I have a looping sound mocked op that plays when the pencil is moved. The mockup video is stored in the same folder as the other issues.

But I do remember that we did something similar in another sim: To where if you hold the pencil it doesn't start playing the sound unless you start to move it. Do you remember that? I think thats the preferred mapping if we can remember how it's done.

marlitas commented 6 months ago

To where if you hold the pencil it doesn't start playing the sound unless you start to move it.

It looks like we did this in CAV with a ContinuousPropertySoundClip. The documentation states the following:

It is implemented such that the sound fades in when changes
occur in the Property's value and fades out when the value doesn't change for some (configurable) amount of time.

I will move forward using the same strategy and see how it goes!

marlitas commented 6 months ago

I was very quickly stopped in my tracks because ContinuousPropertySoundClip does not support a range that include 0. Below is the patch for where I got to... I think I should talk this over with @jbphet.

```diff Subject: [PATCH] Update documentation, see: https://github.com/phetsims/center-and-variability/issues/617 --- Index: sounds/predictMeanPencilLoop_mp3.js IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/sounds/predictMeanPencilLoop_mp3.js b/sounds/predictMeanPencilLoop_mp3.js new file mode 100644 --- /dev/null (date 1712004375425) +++ b/sounds/predictMeanPencilLoop_mp3.js (date 1712004375425) @@ -0,0 +1,46 @@ +/* eslint-disable */ +import asyncLoader from '../../phet-core/js/asyncLoader.js'; +import base64SoundToByteArray from '../../tambo/js/base64SoundToByteArray.js'; +import WrappedAudioBuffer from '../../tambo/js/WrappedAudioBuffer.js'; +import phetAudioContext from '../../tambo/js/phetAudioContext.js'; + +const soundURI = 'data:audio/mpeg;base64,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'; +const soundByteArray = base64SoundToByteArray( phetAudioContext, soundURI ); +const unlock = asyncLoader.createLock( soundURI ); +const wrappedAudioBuffer = new WrappedAudioBuffer(); + +// safe way to unlock +let unlocked = false; +const safeUnlock = () => { + if ( !unlocked ) { + unlock(); + unlocked = true; + } +}; + +const onDecodeSuccess = decodedAudio => { + if ( wrappedAudioBuffer.audioBufferProperty.value === null ) { + wrappedAudioBuffer.audioBufferProperty.set( decodedAudio ); + safeUnlock(); + } +}; +const onDecodeError = decodeError => { + console.warn( 'decode of audio data failed, using stubbed sound, error: ' + decodeError ); + wrappedAudioBuffer.audioBufferProperty.set( phetAudioContext.createBuffer( 1, 1, phetAudioContext.sampleRate ) ); + safeUnlock(); +}; +const decodePromise = phetAudioContext.decodeAudioData( soundByteArray.buffer, onDecodeSuccess, onDecodeError ); +if ( decodePromise ) { + decodePromise + .then( decodedAudio => { + if ( wrappedAudioBuffer.audioBufferProperty.value === null ) { + wrappedAudioBuffer.audioBufferProperty.set( decodedAudio ); + safeUnlock(); + } + } ) + .catch( e => { + console.warn( 'promise rejection caught for audio decode, error = ' + e ); + safeUnlock(); + } ); +} +export default wrappedAudioBuffer; \ No newline at end of file Index: js/intro/view/PredictMeanSlider.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/js/intro/view/PredictMeanSlider.ts b/js/intro/view/PredictMeanSlider.ts --- a/js/intro/view/PredictMeanSlider.ts (revision 328e3a2600524dd09186f55b6d52499f9f0ed1c5) +++ b/js/intro/view/PredictMeanSlider.ts (date 1712005079398) @@ -23,6 +23,9 @@ import Property from '../../../../axon/js/Property.js'; import pencil_png from '../../../images/pencil_png.js'; import PickRequired from '../../../../phet-core/js/types/PickRequired.js'; +import ContinuousPropertySoundClip from '../../../../tambo/js/sound-generators/ContinuousPropertySoundClip.js'; +import predictMeanPencilLoop_mp3 from '../../../sounds/predictMeanPencilLoop_mp3.js'; +import soundManager from '../../../../tambo/js/soundManager.js'; type SelfOptions = EmptySelfOptions; type ParentOptions = AccessibleSliderOptions & NodeOptions; @@ -34,6 +37,7 @@ export default class PredictMeanSlider extends AccessibleSlider( Node, 0 ) { private readonly predictMeanLine: Line; private readonly predictMeanHandle: Node; + private readonly continuousPropertySoundClip: ContinuousPropertySoundClip; public constructor( meanPredictionProperty: Property, dragRange: Range, numberOfCupsProperty: Property, getActiveNotepadCups: () => Array, modelViewTransform: ModelViewTransform2, providedOptions: PredictMeanNodeOptions ) { @@ -69,6 +73,18 @@ this.centerY = modelViewTransform.modelToViewY( prediction ); } ); + this.continuousPropertySoundClip = new ContinuousPropertySoundClip( + meanPredictionProperty, + dragRange, + predictMeanPencilLoop_mp3, { + trimSilence: false, // a very precise sound file is used, so make sure it doesn't get changed + fadeTime: 0.3, + delayBeforeStop: 0.25, + stopOnDisabled: true + } + ); + soundManager.addSoundGenerator( this.continuousPropertySoundClip, { associatedViewNode: this } ); + this.addInputListener( dragListener ); this.predictMeanLine = predictMeanLine; @@ -97,6 +113,10 @@ this.predictMeanHandle.leftCenter = this.predictMeanLine.rightCenter; this.setPointerAreas(); } + + public step( dt: number ): void { + this.continuousPropertySoundClip.step( dt ); + } } meanShareAndBalance.register( 'PredictMeanSlider', PredictMeanSlider ); \ No newline at end of file Index: sounds/license.json IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/sounds/license.json b/sounds/license.json --- a/sounds/license.json (revision 328e3a2600524dd09186f55b6d52499f9f0ed1c5) +++ b/sounds/license.json (date 1712004368933) @@ -30,5 +30,13 @@ "projectURL": "https://phet.colorado.edu", "license": "contact phethelp@colorado.edu", "notes": "created by Ashton Morris (PhET Interactive Simulations)" + }, + "predictMeanPencilLoop.mp3": { + "text": [ + "Copyright 2024 University of Colorado Boulder" + ], + "projectURL": "https://phet.colorado.edu", + "license": "contact phethelp@colorado.edu", + "notes": "created by Ashton Morris (PhET Interactive Simulations)" } } \ No newline at end of file ```

I went ahead and committed adding the mp3 file and update to the license.json.

jbphet commented 5 months ago

I've added this using ContinuousPropertySoundGenerator, and I made a number of adjustments to it, but I'm not very fond of it. It's not bad for quick drags, but long drags sound odd. We can discuss at today's review meeting and decide on the next steps.

jbphet commented 5 months ago

We discussed this in the 4/9/2024 sound design meeting, and we felt like there was a mismatch between the action on the screen and the sound. For the next round, we'd like to try integrating the sound generator used for the foot drag in the John Travoltage sim, which is based on filtered wide-spectrum noise, and alter the filter center frequency based on the height of the mean prediction line.

jbphet commented 5 months ago

Reviewed the latest, which is based upon the FootDragSoundGenerator from John Travoltage, and are generally good with the results. Next things to try are:

jbphet commented 5 months ago

I've made the changes listed in the previous comment and I think this is ready for review in the next design meeting.

jbphet commented 5 months ago

We reviewed this in the 4/23/2024 sound design meeting, and we are all good with it. Assigning to @amanda-phet for one last check and, if she's good with it, this can be closed as completed.

amanda-phet commented 5 months ago

Sounds good to me!