Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finalize the sound implementation #233

Closed
jbphet opened this issue Dec 9, 2019 · 18 comments
Closed

Finalize the sound implementation #233

jbphet opened this issue Dec 9, 2019 · 18 comments
Assignees

Comments

@jbphet
Copy link
Contributor

jbphet commented Dec 9, 2019

In #216 we started working on prototyping the sound design. The sounds have been selected, so it is now time to finalize the implementation. The main activities for this will be to remove the code that supports different option selections and to set the desired volume levels for all sounds.

@jbphet
Copy link
Contributor Author

jbphet commented Dec 9, 2019

@Ashton-Morris - I have added markers to the file MoleculesAndLightScreenView.js for each place where the sound level may need adjustment. They look like this:

    // TODO - @Ashton-Morris - please adjust level if needed, see https://github.com/phetsims/molecules-and-light/issues/233

Please make any level adjustments that you feel are necessary, remove the comment, and assign this issue back to me when you're done. Please remember to reference this issue in any commits.

@jbphet jbphet assigned Ashton-Morris and unassigned jbphet Dec 9, 2019
jbphet added a commit that referenced this issue Dec 10, 2019
@Ashton-Morris
Copy link
Contributor

Ashton-Morris commented Dec 17, 2019

@jbphet Here is the code for the mix

``` // Copyright 2014-2019, University of Colorado Boulder

/**

  • View for Molecules and Light
  • @author Jesse Greenberg (PhET Interactive Simulations)
  • @author Sam Reid (PhET Interactive Simulations)
  • @author John Blanco

*/
define( require => {
'use strict';

// modules
const Bounds2 = require( 'DOT/Bounds2' );
const DialogIO = require( 'SUN/DialogIO' );
const Dimension2 = require( 'DOT/Dimension2' );
const inherit = require( 'PHET_CORE/inherit' );
const LightSpectrumDialog = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/LightSpectrumDialog' );
const ModelViewTransform2 = require( 'PHETCOMMON/view/ModelViewTransform2' );
const moleculesAndLight = require( 'MOLECULES_AND_LIGHT/moleculesAndLight' );
const MoleculesAndLightA11yStrings = require( 'MOLECULES_AND_LIGHT/common/MoleculesAndLightA11yStrings' );
const MoleculesAndLightScreenSummaryNode = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/MoleculesAndLightScreenSummaryNode' );
const MoleculeSelectionPanel = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/MoleculeSelectionPanel' );
const ObservationWindow = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/ObservationWindow' );
const PhetFont = require( 'SCENERY_PHET/PhetFont' );
const PhetioCapsule = require( 'TANDEM/PhetioCapsule' );
const PhetioCapsuleIO = require( 'TANDEM/PhetioCapsuleIO' );
const PlayPauseButton = require( 'SCENERY_PHET/buttons/PlayPauseButton' );
const QuadEmissionFrequencyControlPanel = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/QuadEmissionFrequencyControlPanel' );
const Rectangle = require( 'SCENERY/nodes/Rectangle' );
const RectangularPushButton = require( 'SUN/buttons/RectangularPushButton' );
const ResetAllButton = require( 'SCENERY_PHET/buttons/ResetAllButton' );
const ScreenView = require( 'JOIST/ScreenView' );
const SoundClip = require( 'TAMBO/sound-generators/SoundClip' );
const soundManager = require( 'TAMBO/soundManager' );
const SpectrumDiagram = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/SpectrumDiagram' );
const StepForwardButton = require( 'SCENERY_PHET/buttons/StepForwardButton' );
const Text = require( 'SCENERY/nodes/Text' );
const Util = require( 'DOT/Util' );
const Vector2 = require( 'DOT/Vector2' );
const WavelengthConstants = require( 'MOLECULES_AND_LIGHT/photon-absorption/model/WavelengthConstants' );
const WindowFrameNode = require( 'MOLECULES_AND_LIGHT/moleculesandlight/view/WindowFrameNode' );

// strings
const spectrumWindowButtonCaptionString = require( 'string!MOLECULES_AND_LIGHT/SpectrumWindow.buttonCaption' );

// a11y strings
const spectrumButtonLabelString = MoleculesAndLightA11yStrings.spectrumButtonLabelString.value;
const spectrumButtonDescriptionString = MoleculesAndLightA11yStrings.spectrumButtonDescriptionString.value;
const stepButtonLabelString = MoleculesAndLightA11yStrings.stepButtonLabelString.value;
const stepButtonDescriptionString = MoleculesAndLightA11yStrings.stepButtonDescriptionString.value;

// sounds
const breakApartSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/break-apart.mp3' );
const moleculeEnergizedSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/glow-loop-higher.mp3' );
const rotationClockwiseSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/rotate-clockwise.mp3' );
const rotationCounterclockwiseSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/rotate-counterclockwise.mp3' );
const vibrationSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/vibration.mp3' );
const microwavePhotonFromMoleculeSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-release-microwave.mp3' );
const infraredPhotonFromMoleculeSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-release-ir.mp3' );
const visiblePhotonFromMoleculeSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-release-visible.mp3' );
const ultravioletPhotonFromMoleculeSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-release-uv.mp3' );
const microwavePhotonInitialEmissionSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-emit-microwave.mp3' );
const infraredPhotonInitialEmissionSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-emit-ir.mp3' );
const visiblePhotonInitialEmissionSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-emit-visible.mp3' );
const ultravioletPhotonInitialEmissionSoundInfo = require( 'sound!MOLECULES_AND_LIGHT/photon-emit-uv.mp3' );

// constants
// Model-view transform for intermediate coordinates.
const INTERMEDIATE_RENDERING_SIZE = new Dimension2( 500, 300 );

// Location of the top left corner of the observation window.
const OBSERVATION_WINDOW_LOCATION = new Vector2( 15, 15 );

// Corner radius of the observation window.
const CORNER_RADIUS = 7;

// Line width of the observation window frame
const FRAME_LINE_WIDTH = 5;

// TODO - @Ashton-Morris - please adjust level if needed, see #233
// volume of photon emission sounds
const PHOTON_SOUND_OUTPUT_LEVEL = 0.09;

// X position at which the lamp emission sound is played, empirically determined
const PLAY_LAMP_EMISSION_X_POSITION = -1400;

/**

  • Constructor for the screen view of Molecules and Light.
  • @param {PhotonAbsorptionModel} photonAbsorptionModel
  • @param {Tandem} tandem
  • @constructor
    */
    function MoleculesAndLightScreenView( photonAbsorptionModel, tandem ) {
ScreenView.call( this, {
  layoutBounds: new Bounds2( 0, 0, 768, 504 ),
  tandem: tandem,
  screenSummaryContent: new MoleculesAndLightScreenSummaryNode( photonAbsorptionModel )
} );

const modelViewTransform = ModelViewTransform2.createSinglePointScaleInvertedYMapping(
  Vector2.ZERO,
  new Vector2( Util.roundSymmetric( INTERMEDIATE_RENDERING_SIZE.width * 0.55 ),
    Util.roundSymmetric( INTERMEDIATE_RENDERING_SIZE.height * 0.50 ) ),
  0.10 ); // Scale factor - Smaller number zooms out, bigger number zooms in.

// @private - Create the observation window.  This will hold all photons, molecules, and photonEmitters for this photon
// absorption model.
this.observationWindow = new ObservationWindow(
  photonAbsorptionModel,
  modelViewTransform,
  tandem.createTandem( 'observationWindow' )
);
this.pdomPlayAreaNode.addChild( this.observationWindow );

// This rectangle hides photons that are outside the observation window.
// TODO: This rectangle is a temporary workaround that replaces the clipping area in ObservationWindow because of a
// Safari specific SVG bug caused by clipping.  See https://github.com/phetsims/molecules-and-light/issues/105 and
// https://github.com/phetsims/scenery/issues/412.
const clipRectangle = new Rectangle( this.observationWindow.bounds.copy().dilate( 4 * FRAME_LINE_WIDTH ),
  CORNER_RADIUS, CORNER_RADIUS, {
    stroke: '#C5D6E8',
    lineWidth: 8 * FRAME_LINE_WIDTH,
    pickable: false
  } );
this.pdomPlayAreaNode.addChild( clipRectangle );

// Create the window frame node that borders the observation window.
const windowFrameNode = new WindowFrameNode( this.observationWindow, '#BED0E7', '#4070CE' );
this.pdomPlayAreaNode.addChild( windowFrameNode );

// Set positions of the observation window and window frame.
this.observationWindow.translate( OBSERVATION_WINDOW_LOCATION );
clipRectangle.translate( OBSERVATION_WINDOW_LOCATION );
windowFrameNode.translate( OBSERVATION_WINDOW_LOCATION );

// Create the control panel for photon emission frequency.
const photonEmissionControlPanel = new QuadEmissionFrequencyControlPanel(
  photonAbsorptionModel,
  tandem.createTandem( 'photonEmissionControlPanel' )
);
photonEmissionControlPanel.leftTop = ( new Vector2( OBSERVATION_WINDOW_LOCATION.x, 350 ) );

// Create the molecule control panel
const moleculeControlPanel = new MoleculeSelectionPanel(
  photonAbsorptionModel,
  tandem.createTandem( 'moleculeControlPanel' )
);
moleculeControlPanel.leftTop = ( new Vector2( 530, windowFrameNode.top ) );

// Add reset all button.
const resetAllButton = new ResetAllButton( {
  listener: function() { photonAbsorptionModel.reset(); },
  bottom: this.layoutBounds.bottom - 15,
  right: this.layoutBounds.right - 15,
  radius: 18,
  tandem: tandem.createTandem( 'resetAllButton' )
} );
this.pdomControlAreaNode.addChild( resetAllButton );

// Add play/pause button.
const playPauseButton = new PlayPauseButton( photonAbsorptionModel.runningProperty, {
  bottom: moleculeControlPanel.bottom + 60,
  centerX: moleculeControlPanel.centerX - 25,
  radius: 23,
  touchAreaDilation: 5,
  tandem: tandem.createTandem( 'playPauseButton' )
} );
this.pdomControlAreaNode.addChild( playPauseButton );

// Add step button to manually step the animation.
const stepButton = new StepForwardButton( {
  isPlayingProperty: photonAbsorptionModel.runningProperty,
  listener: function() { photonAbsorptionModel.manualStep(); },
  centerY: playPauseButton.centerY,
  centerX: moleculeControlPanel.centerX + 25,
  radius: 15,
  touchAreaDilation: 5,
  tandem: tandem.createTandem( 'stepButton' ),

  // a11y
  innerContent: stepButtonLabelString,
  descriptionContent: stepButtonDescriptionString,
  appendDescription: true
} );
this.pdomControlAreaNode.addChild( stepButton );

// Content for the window that displays the EM spectrum upon request.  Constructed once here so that time is not
// waisted drawing a new spectrum window every time the user presses the 'Show Light Spectrum' button.
// @private
const spectrumButtonLabel = new SpectrumDiagram( tandem.createTandem( 'spectrumButtonLabel' ) );

const lightSpectrumDialogCapsule = new PhetioCapsule(  tandem => {
  return new LightSpectrumDialog( spectrumButtonLabel, tandem );
}, [], {
  tandem: tandem.createTandem( 'lightSpectrumDialogCapsule' ),
  phetioType: PhetioCapsuleIO( DialogIO )
} );

// Add the button for displaying the electromagnetic spectrum. Scale down the button content when it gets too
// large.  This is done to support translations.  Max width of this button is the width of the molecule control
// panel minus twice the default x margin of a rectangular push button.
const buttonContent = new Text( spectrumWindowButtonCaptionString, { font: new PhetFont( 18 ) } );
if ( buttonContent.width > moleculeControlPanel.width - 16 ) {
  buttonContent.scale( ( moleculeControlPanel.width - 16 ) / buttonContent.width );
}
var showLightSpectrumButton = new RectangularPushButton( {
  content: buttonContent,
  baseColor: 'rgb(98, 173, 205)',
  touchAreaXDilation: 7,
  touchAreaYDilation: 7,
  listener: function() {
    const dialog = lightSpectrumDialogCapsule.getInstance();
    dialog.show();

    // if listener was fired because of accessibility
    if ( showLightSpectrumButton.buttonModel.isA11yClicking() ) {
      dialog.focusCloseButton();
    }
  },
  tandem: tandem.createTandem( 'showLightSpectrumButton' ),

  // a11y
  innerContent: spectrumButtonLabelString,
  descriptionContent: spectrumButtonDescriptionString,
  appendDescription: true,
  containerTagName: 'div'
} );

// a11y - add an attribute that lets the user know the button opens a menu
showLightSpectrumButton.setAccessibleAttribute( 'aria-haspopup', true );

showLightSpectrumButton.center = ( new Vector2( moleculeControlPanel.centerX, photonEmissionControlPanel.centerY - 13 ) );
this.pdomPlayAreaNode.addChild( showLightSpectrumButton );

// Add the nodes in the order necessary for correct layering.
this.pdomPlayAreaNode.addChild( photonEmissionControlPanel );
this.pdomPlayAreaNode.addChild( moleculeControlPanel );

// PDOM - the accessible order for the control area contents
this.pdomPlayAreaNode.accessibleOrder = [ this.observationWindow, clipRectangle, windowFrameNode, photonEmissionControlPanel, moleculeControlPanel ];
this.pdomControlAreaNode.accessibleOrder = [ playPauseButton, stepButton, showLightSpectrumButton, resetAllButton ];

//-----------------------------------------------------------------------------------------------------------------
// sound generation
//-----------------------------------------------------------------------------------------------------------------

// TODO - @Ashton-Morris - please adjust level if needed, see https://github.com/phetsims/molecules-and-light/issues/233
// sound to play when molecule becomes "energized", which is depicted as glowing in the view
const moleculeEnergizedLoop = new SoundClip( moleculeEnergizedSoundInfo, {
  loop: true,
  initialOutputLevel: 0.3,
  enableControlProperties: [ photonAbsorptionModel.runningProperty ]
} );
soundManager.addSoundGenerator( moleculeEnergizedLoop );
const updateMoleculeEnergizedSound = moleculeEnergized => {
  if ( moleculeEnergized ) {
    moleculeEnergizedLoop.play();
  }
  else {
    moleculeEnergizedLoop.stop();
  }
};

// TODO - @Ashton-Morris - please adjust level if needed, see https://github.com/phetsims/molecules-and-light/issues/233
// break apart sound
const breakApartSound2 = new SoundClip( breakApartSoundInfo, { initialOutputLevel: 1 } );
soundManager.addSoundGenerator( breakApartSound2 );
const breakApartSoundPlayer = () => {
  breakApartSound2.play();
};

// TODO - @Ashton-Morris - please adjust level if needed, see https://github.com/phetsims/molecules-and-light/issues/233
// molecule rotating sounds
const rotateClockwiseSoundPlayer = new SoundClip( rotationClockwiseSoundInfo, {
  initialOutputLevel: 0.3,
  loop: true
} );
soundManager.addSoundGenerator( rotateClockwiseSoundPlayer );
const rotateCounterclockwiseSoundPlayer = new SoundClip( rotationCounterclockwiseSoundInfo, {
  initialOutputLevel: 0.3,
  loop: true
} );
soundManager.addSoundGenerator( rotateCounterclockwiseSoundPlayer );

const updateRotationSound = rotating => {
  if ( rotating ) {

    // this is only set up for a single molecule
    assert && assert( photonAbsorptionModel.activeMolecules.length === 1 );

    // play a sound based on the direction of rotation and the currently selected sound from the options dialog
    const molecule = photonAbsorptionModel.activeMolecules.get( 0 );
    if ( molecule.rotationDirectionClockwiseProperty.value ) {
      rotateClockwiseSoundPlayer.play();
    }
    else {
      rotateCounterclockwiseSoundPlayer.play();
    }
  }
  else {
    rotateClockwiseSoundPlayer.stop();
    rotateCounterclockwiseSoundPlayer.stop();
  }
};

// TODO - @Ashton-Morris - please adjust level if needed, see https://github.com/phetsims/molecules-and-light/issues/233
// molecule vibration sound
const moleculeVibrationLoop = new SoundClip( vibrationSoundInfo, {
  initialOutputLevel: 0.4,
  loop: true,
  enableControlProperties: [ photonAbsorptionModel.runningProperty ]
} );
soundManager.addSoundGenerator( moleculeVibrationLoop );
const updateVibrationSound = vibrating => {
  if ( vibrating ) {

    // start the vibration sound playing (this will have no effect if the sound is already playing)
    moleculeVibrationLoop.play();
  }
  else {
    moleculeVibrationLoop.stop();
  }
};

// function that adds all of the listeners involved in creating sound
const addSoundPlayersToMolecule = molecule => {
  molecule.highElectronicEnergyStateProperty.link( updateMoleculeEnergizedSound );
  molecule.brokeApartEmitter.addListener( breakApartSoundPlayer );
  molecule.rotatingProperty.link( updateRotationSound );
  molecule.vibratingProperty.link( updateVibrationSound );
};

// add listeners to molecules for playing the sounds
photonAbsorptionModel.activeMolecules.forEach( addSoundPlayersToMolecule );
photonAbsorptionModel.activeMolecules.addItemAddedListener( addSoundPlayersToMolecule );

// remove listeners when the molecules go away
photonAbsorptionModel.activeMolecules.addItemRemovedListener( function( removedMolecule ) {
  if ( removedMolecule.highElectronicEnergyStateProperty.hasListener( updateMoleculeEnergizedSound ) ) {
    removedMolecule.highElectronicEnergyStateProperty.unlink( updateMoleculeEnergizedSound );
  }
  if ( removedMolecule.brokeApartEmitter.hasListener( breakApartSoundPlayer ) ) {
    removedMolecule.brokeApartEmitter.removeListener( breakApartSoundPlayer );
  }
  if ( removedMolecule.rotatingProperty.hasListener( updateRotationSound ) ) {
    removedMolecule.rotatingProperty.unlink( updateRotationSound );
  }
  if ( removedMolecule.vibratingProperty.hasListener( updateVibrationSound ) ) {
    removedMolecule.vibratingProperty.unlink( updateVibrationSound );
  }
} );

// photon generation sounds (i.e. the photons coming from the lamps)
const photonSoundClipOptions = { initialOutputLevel: PHOTON_SOUND_OUTPUT_LEVEL };

// Note - can't use initialization constructor for Map due to lack of support in IE.
const photonInitialEmissionSoundPlayers = new Map();
photonInitialEmissionSoundPlayers.set(
  WavelengthConstants.MICRO_WAVELENGTH,
  new SoundClip( microwavePhotonInitialEmissionSoundInfo, photonSoundClipOptions )
);
photonInitialEmissionSoundPlayers.set(
  WavelengthConstants.IR_WAVELENGTH,
  new SoundClip( infraredPhotonInitialEmissionSoundInfo, photonSoundClipOptions )
);
photonInitialEmissionSoundPlayers.set(
  WavelengthConstants.VISIBLE_WAVELENGTH,
  new SoundClip( visiblePhotonInitialEmissionSoundInfo, photonSoundClipOptions )
);
photonInitialEmissionSoundPlayers.set(
  WavelengthConstants.UV_WAVELENGTH,
  new SoundClip( ultravioletPhotonInitialEmissionSoundInfo, photonSoundClipOptions )
);
photonInitialEmissionSoundPlayers.forEach( value => {
  soundManager.addSoundGenerator( value );
} );

// Note - can't use initialization constructor for Map due to lack of support in IE.
const photonEmissionFromMoleculeSoundPlayers = new Map();
photonEmissionFromMoleculeSoundPlayers.set(
  WavelengthConstants.MICRO_WAVELENGTH,
  new SoundClip( microwavePhotonFromMoleculeSoundInfo, photonSoundClipOptions )
);
photonEmissionFromMoleculeSoundPlayers.set(
  WavelengthConstants.IR_WAVELENGTH,
  new SoundClip( infraredPhotonFromMoleculeSoundInfo, photonSoundClipOptions )
);
photonEmissionFromMoleculeSoundPlayers.set(
  WavelengthConstants.VISIBLE_WAVELENGTH,
  new SoundClip( visiblePhotonFromMoleculeSoundInfo, photonSoundClipOptions )
);
photonEmissionFromMoleculeSoundPlayers.set(
  WavelengthConstants.UV_WAVELENGTH,
  new SoundClip( ultravioletPhotonFromMoleculeSoundInfo, photonSoundClipOptions )
);
photonEmissionFromMoleculeSoundPlayers.forEach( value => {
  soundManager.addSoundGenerator( value );
} );

photonAbsorptionModel.photons.addItemAddedListener( photon => {
  if ( photon.locationProperty.value.x < 0 ) {

    // photon was emitted from lamp, use the initial emission sound
    const playEmitFromLampSound = position => {
      if ( position.x >= PLAY_LAMP_EMISSION_X_POSITION ) {
        photonInitialEmissionSoundPlayers.get( photon.wavelength ).play();
        photon.locationProperty.unlink( playEmitFromLampSound );
      }
    };
    photon.locationProperty.link( playEmitFromLampSound );
  }
  else {

    // photon was emitted from lamp, use the secondary emission sound (finalized as of 12/2/2019)
    photonEmissionFromMoleculeSoundPlayers.get( photon.wavelength ).play();
  }
} );

}

moleculesAndLight.register( 'MoleculesAndLightScreenView', MoleculesAndLightScreenView );

return inherit( ScreenView, MoleculesAndLightScreenView, {

/**
 * View step, called by joist.
 * @public
 *
 * @param {number} dt
 * @returns {}
 */
step( dt ) {
  this.observationWindow.step( dt );
}

} );
} );

</details>

@Ashton-Morris
Copy link
Contributor

@jbphet I did notice that the rotate sounds continue after you pause the scene. The absorb and vibrate stop properly when you pause during their playback but the rotate ones do not.

@jbphet
Copy link
Contributor Author

jbphet commented Dec 17, 2019

I've fixed the issue with rotation and adjusted the output levels based on @Ashton-Morris's input. I also added in an absorption sound. Team: Please review the version at https://phet-dev.colorado.edu/html/molecules-and-light/1.5.0-dev.22/phet/molecules-and-light_en_phet.html?supportsSound and let me know what, if anything, you think needs to be changed.

I for one would like a different sound for absorption of a photon by a molecule.

@brettfiedler
Copy link
Member

Trying to listen on mobile and I'm not sure I hear an absorption sound. Is it a small atonal sound? It seems to blend in with the following phenomenon noise.

@arouinfar
Copy link

arouinfar commented Jan 6, 2020

Overall, it's sounding nice @jbphet!

For dissociation (e.g. UV/ozone), I'm hearing a buzz that is triggered at the same time as the ripping sound when the bond breaks. I don't remember hearing this sound before, and I'm not sure what it's meant to represent.

It also seems a little strange that the molecule RadioButtonGroup and the photon RadioButtonGroup have reversed pitches. For molecules the first option (carbon monoxide) corresponds to the highest pitch, while the first photon source (microwave) corresponds to the lowest pitch. While I can understand the ordering for the photon source -- a higher pitch corresponds to a higher frequency/energy, it seems inconsistent. I'm a bit wary of making changes to common component sounds, since the whole point is for them to be common.

(Edit: After playing with ComboBox in Molarity (first option has the lowest pitch), I think the problem is with the molecule RadioButtonGroup. Should carbon monoxide have the lowest pitch?)

Trying to listen on mobile and I'm not sure I hear an absorption sound. Is it a small atonal sound? It seems to blend in with the following phenomenon noise.

I did not hear an absorption sound at all. I was testing on my laptop using headphones.

@arouinfar arouinfar removed their assignment Jan 6, 2020
@Ashton-Morris
Copy link
Contributor

I think we need to raise the levels of the absorption sound so that it is more apparent to listeners. It if still doesn't stand out enough, then I need to rethink it.

@jbphet
Copy link
Contributor Author

jbphet commented Apr 7, 2020

I've integrated the latest spatialized sounds for rotation and vibration (as discussed in #284) and they are now timed to match the slow-motion value discussed and decided upon in #295. To my knowledge, these are the last outstanding items for the sound design implementation.

I'm going to assign this issue to all of the individuals who were in the most recent sound design review meeting for this sim for a final review of the sound design.

Reviewers: Please try out the latest dev version at https://phet-dev.colorado.edu/html/molecules-and-light/1.5.0-dev.44/phet/molecules-and-light_en_phet.html, record any concerns or comments below, check yourself off, and unassign yourself. I'll follow up with @emily-phet if there are concerns that need to be addressed. Thanks in advance!

@terracoda
Copy link

The sim sounds awesome! And I see the photon fires immediately with both th e regular on/off button and with the Step Forward button!

@terracoda terracoda removed their assignment Apr 8, 2020
@brettfiedler brettfiedler removed their assignment Apr 8, 2020
@Matthew-Moore240 Matthew-Moore240 removed their assignment Apr 8, 2020
@arouinfar arouinfar removed their assignment Apr 14, 2020
@emily-phet
Copy link

Sounds great to me!

@Ashton-Morris
Copy link
Contributor

Ashton-Morris commented Apr 21, 2020

Sounds great to me as well.

Also, I don't think there is any mixing needed as all the levels sound fairly even to me. If anyone has any volume issues let me know.

@jbphet
Copy link
Contributor Author

jbphet commented Apr 21, 2020

Discussed in the 4/21/2020 sound design meeting, and have determined that the sound design is ready for publication. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants