如何淡入和淡出音频?

Posted

技术标签:

【中文标题】如何淡入和淡出音频?【英文标题】:How to fade in and out of audio? 【发布时间】:2020-10-25 04:20:03 【问题描述】:

我的网站上有一个音频,我有一个播放/暂停按钮。目前一切正常,但我只是发现播放和暂停太突然了。每当按下播放/暂停按钮时,我想淡入和淡出音频。我怎么能做到这一点?

任何帮助表示赞赏,在此先感谢!

请在此处查看我的代码笔:https://codepen.io/cocotx/pen/rNLjbPK?editors=1010

<audio id="audio" loop>
        <source src="https://www.kozco.com/tech/LRMonoPhase4.wav" type="audio/mpeg">
      </audio>

<button id="play-pause">play/pause</button>
const song = document.querySelector("#audio");

  let pPause = document.querySelector('#play-pause');

  let playing = true;
  function playPause() 
      if (playing) 
          const song = document.querySelector('#audio');

          song.play();
          playing = false;
       else 

          song.pause();
          playing = true;
      
  

$('#play-pause').click(function() 
    playPause();
  );

【问题讨论】:

【参考方案1】:

如果您为audiolengthcurrenttime 设置了一个变量,并将fade 设置为您想要的淡入和淡出长度,您可以快速轻松地完成此操作。

而且,函数看起来像这样。您将需要在页面首次加载时调用此函数,但它会保持自身运行。

volc = 1 / fade
function Fade() 
    if (currenttime + fade >= audiolength) 
    song.volume = song.volume - volc;
    

    if (currenttime <= fade) 
        song.volume = song.volume + volc
    

    setTimeout(Fade, 50)

如果您还有任何问题,我很乐意为您提供帮助!

【讨论】:

您好,感谢您的详细回复!但是我正在寻找一种更快的方法来使用我当前的 playPause 代码执行此操作,并且我找到了一种对我来说非常有效的 jQuery 方法。再次感谢!【参考方案2】:

您可以使用 CSS 轻松实现淡入淡出效果。

const song = document.querySelector("#audio");

let pPause = document.querySelector('#play-pause');

let playing = true;

function playPause() 
  if (playing) 
    const song = document.querySelector('#audio');
    song.play();
    playing = false;
   else 

    song.pause();
    playing = true;
  


$('#play-pause').click(function() 
  playPause();
);
#play-pause 
  opacity: 0.4;
  transition: opacity 0.5s ease-out;


#play-pause:hover 
  opacity: 1;
  transition: opacity 0.5s ease-in;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<audio id="audio" loop>
        <source src="https://www.kozco.com/tech/LRMonoPhase4.wav" type="audio/mpeg">
      </audio>

<button id="play-pause">play/pause</button>

我只是使用带有过渡属性的悬停。如果要完全淡出,可以将不透明度更改为 0,当然,您可以根据需要更改过渡。希望这会有所帮助。祝你有美好的一天。

【讨论】:

【参考方案3】:

我最终使用 jQuery 为音量设置动画,这对我来说效果很好:

let playing = true;
  function playPause() 
      if (playing) 
          const song = document.querySelector('#audio');

          //relevant part to fading in audio
          song.volume = 0;
          $('#audio').animate(volume: 1.0, 1000);
          song.play();

          playing = false;
       else 
          //relevant part to fading out audio
          song.volume = 1;
          $('#audio').animate(volume: 0, 1000, function() 
            song.pause();
          );

          playing = true;
      
  

我发现这最适合我的需要,但仍然感谢任何试图提供帮助的人!

【讨论】:

【参考方案4】:

这对我来说不需要 jQuery 并且非常可配置。在淡入开始之前它也有延迟

function fadeIn(audioElement, maxVol, startDelay, fadeInTime, steps) 
  let i = 0;
  let interval = fadeInTime / steps;
  setTimeout(function () 
    let intervalId = setInterval(function() 
      let volume = (maxVol / steps) * i;
      audioElement.volume = volume;
      if(++i >= steps)
        clearInterval(intervalId);
    , interval);
  , startDelay);

【讨论】:

以上是关于如何淡入和淡出音频?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?

jQuery 音频淡入淡出

音频中的淡入淡出效果通过在ios中使用AVAssetExportSession

Android实现音频淡入淡出效果

为啥 iPod 的音频在我的应用程序导致它淡出后没有淡入?

Premier设置音频淡入淡出的效果