I’m wondering if someone has already found a way to decrease the volume of a song or sound using js for a wick editor game/app… (while it’s playing)
I think that I got from @pumpkinhead how to stop only one sound using js for the Space Rush game.
 
      
    I’m wondering if someone has already found a way to decrease the volume of a song or sound using js for a wick editor game/app… (while it’s playing)
I think that I got from @pumpkinhead how to stop only one sound using js for the Space Rush game.
I don’t know how sounds work for Wick, but in JS you can change the volume with:
document.querySelector("frame").volume = 0.5;
Do you know how Wick sound works?
Nope, thats why I’m asking…
Wick Editor uses howler.js (I got this from an old post @blurredPixels made)
Try using this to set the volume of all sounds:
Howler.volume(0.5); // Change 0.5 with a variable or any number
(Haven’t tried it yet)
I think that it would set all sound tracks to that volume… I guess…
@Jovanny
I just went code diving and I found how to get and set the volume of sound attached to a frame:
  /**
   * The volume of the sound attached to the selected frame.
   * @type {number}
   */
  get soundVolume() {
    return this._getSingleAttribute('soundVolume');
  }
  set soundVolume(soundVolume) {
    this._setSingleAttribute('soundVolume', soundVolume);
  }
And this:
  /**
   * The volume of the sound attached to the frame.
   * @type {number}
   */
  get soundVolume() {
    return this._soundVolume;
  }
  set soundVolume(soundVolume) {
    this._soundVolume = soundVolume;
  }
/**
 * Get/set the volume of this sound or of the Howl group. This method can optionally take 0, 1 or 2 arguments.
 *   volume() -> Returns the group's volume value.
 *   volume(id) -> Returns the sound id's current volume.
 *   volume(vol) -> Sets the volume of all sounds in this Howl group.
 *   volume(vol, id) -> Sets the volume of passed sound id.
 * @return {Howl/Number} Returns self or current volume.
 */
volume: function() {
  var self = this;
  var args = arguments;
  var vol, id;
  // Determine the values based on arguments.
  if (args.length === 0) {
    // Return the value of the groups' volume.
    return self._volume;
  } else if (args.length === 1 || args.length === 2 && typeof args[1] === 'undefined') {
    // First check if this is an ID, and if not, assume it is a new volume.
    var ids = self._getSoundIds();
    var index = ids.indexOf(args[0]);
    if (index >= 0) {
      id = parseInt(args[0], 10);
    } else {
      vol = parseFloat(args[0]);
    }
  } else if (args.length >= 2) {
    vol = parseFloat(args[0]);
    id = parseInt(args[1], 10);
  }
  // Update the volume or return the current volume.
  var sound;
  if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {
    // If the sound hasn't loaded, add it to the load queue to change volume when capable.
    if (self._state !== 'loaded'|| self._playLock) {
      self._queue.push({
        event: 'volume',
        action: function() {
          self.volume.apply(self, args);
        }
      });
      return self;
    }
    // Set the group volume.
    if (typeof id === 'undefined') {
      self._volume = vol;
    }
    // Update one or all volumes.
    id = self._getSoundIds(id);
    for (var i=0; i<id.length; i++) {
      // Get the sound.
      sound = self._soundById(id[i]);
      if (sound) {
        sound._volume = vol;
        // Stop currently running fades.
        if (!args[2]) {
          self._stopFade(id[i]);
        }
        if (self._webAudio && sound._node && !sound._muted) {
          sound._node.gain.setValueAtTime(vol, Howler.ctx.currentTime);
        } else if (sound._node && !sound._muted) {
          sound._node.volume = vol * Howler.volume();
        }
        self._emit('volume', sound._id);
      }
    }
  } else {
    sound = id ? self._soundById(id) : self._sounds[0];
    return sound ? sound._volume : 0;
  }
  return self;
},
/**
 * Fade a currently playing sound between two volumes (if no id is passsed, all sounds will fade).
 * @param  {Number} from The value to fade from (0.0 to 1.0).
 * @param  {Number} to   The volume to fade to (0.0 to 1.0).
 * @param  {Number} len  Time in milliseconds to fade.
 * @param  {Number} id   The sound id (omit to fade all sounds).
 * @return {Howl}
 */
fade: function(from, to, len, id) {
  var self = this;
  // If the sound hasn't loaded, add it to the load queue to fade when capable.
  if (self._state !== 'loaded' || self._playLock) {
    self._queue.push({
      event: 'fade',
      action: function() {
        self.fade(from, to, len, id);
      }
    });
    return self;
  }
  // Make sure the to/from/len values are numbers.
  from = parseFloat(from);
  to = parseFloat(to);
  len = parseFloat(len);
  // Set the volume to the start position.
  self.volume(from, id);
  // Fade the volume of one or all sounds.
  var ids = self._getSoundIds(id);
  for (var i=0; i<ids.length; i++) {
    // Get the sound.
    var sound = self._soundById(ids[i]);
    // Create a linear fade or fall back to timeouts with HTML5 Audio.
    if (sound) {
      // Stop the previous fade if no sprite is being used (otherwise, volume handles this).
      if (!id) {
        self._stopFade(ids[i]);
      }
      // If we are using Web Audio, let the native methods do the actual fade.
      if (self._webAudio && !sound._muted) {
        var currentTime = Howler.ctx.currentTime;
        var end = currentTime + (len / 1000);
        sound._volume = from;
        sound._node.gain.setValueAtTime(from, currentTime);
        sound._node.gain.linearRampToValueAtTime(to, end);
      }
      self._startFadeInterval(sound, from, to, len, ids[i], typeof id === 'undefined');
    }
  }
  return self;
},
/**
 * Starts the internal interval to fade a sound.
 * @param  {Object} sound Reference to sound to fade.
 * @param  {Number} from The value to fade from (0.0 to 1.0).
 * @param  {Number} to   The volume to fade to (0.0 to 1.0).
 * @param  {Number} len  Time in milliseconds to fade.
 * @param  {Number} id   The sound id to fade.
 * @param  {Boolean} isGroup   If true, set the volume on the group.
 */
_startFadeInterval: function(sound, from, to, len, id, isGroup) {
  var self = this;
  var vol = from;
  var diff = to - from;
  var steps = Math.abs(diff / 0.01);
  var stepLen = Math.max(4, (steps > 0) ? len / steps : len);
  var lastTick = Date.now();
  // Store the value being faded to.
  sound._fadeTo = to;
  // Update the volume value on each interval tick.
  sound._interval = setInterval(function() {
    // Update the volume based on the time since the last tick.
    var tick = (Date.now() - lastTick) / len;
    lastTick = Date.now();
    vol += diff * tick;
    // Make sure the volume is in the right bounds.
    vol = Math.max(0, vol);
    vol = Math.min(1, vol);
    // Round to within 2 decimal points.
    vol = Math.round(vol * 100) / 100;
    // Change the volume.
    if (self._webAudio) {
      sound._volume = vol;
    } else {
      self.volume(vol, sound._id, true);
    }
    // Set the group's volume.
    if (isGroup) {
      self._volume = vol;
    }
    // When the fade is complete, stop it and fire event.
    if ((to < from && vol <= to) || (to > from && vol >= to)) {
      clearInterval(sound._interval);
      sound._interval = null;
      sound._fadeTo = null;
      self.volume(to, sound._id);
      self._emit('fade', sound._id);
    }
  }, stepLen);
},
/**
 * Internal method that stops the currently playing fade when
 * a new fade starts, volume is changed or the sound is stopped.
 * @param  {Number} id The sound id.
 * @return {Howl}
 */
_stopFade: function(id) {
  var self = this;
  var sound = self._soundById(id);
  if (sound && sound._interval) {
    if (self._webAudio) {
      sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime);
    }
    clearInterval(sound._interval);
    sound._interval = null;
    self.volume(sound._fadeTo, id);
    sound._fadeTo = null;
    self._emit('fade', id);
  }
  return self;
muting works but it’s delayed by abt half a sec. when i set the value to 0.5 it doesn’t half the volume tho
Idk if this will help, but here’s how to refer to the volume of a frame with sound:
project.timeline.getChildren('Layer')[1].frames[0].soundVolume
project.timeline.getChildren(‘Layer’)[1].frames[0] refers to the frame, and soundVolume refers to the volume of that frame
You can then use something like
project.timeline.getChildren('Layer')[1].frames[0].soundVolume+=0.1;
to slowly increase the volume, or the other way around for the opposite effect.
Here’s an example file:
My Project4-5-2021_17-30-15.wick (115.4 KB)
When you play the example, watch the frame with sound. It’ll start off like this: 
Then it’ll slowly increase the volume of the frame until it looks like this: 
I’ll take a look to that project later today. Im wondering if we could do it with playSound(‘sound.mp3’) rather than having the volume attached to a frame…
Probably the wick playSound attached the sound to the current frame anyways. Im not sure…
Have a look here
and read about howler methods
audio settings in this game
are made using howler methods
This really does what I was needing… so Thank you @Hamzah_Alani.