调整游戏音乐的音量

Posted

技术标签:

【中文标题】调整游戏音乐的音量【英文标题】:Adjusting the volume of music ingame 【发布时间】:2018-09-04 14:49:55 【问题描述】:

我正在构建一个在背景中播放音乐的游戏,当您在游戏中前进时,音乐会变为不同的曲目。问题是某些音轨声音太大。有没有办法把它调到我想要的音量?

Link to Source

Link to Game

我正在寻找一种解决方案,我不必更改我的整个代码来匹配声音的某些部分并手动调整它。

提前谢谢你。

【问题讨论】:

如果您使用 html5 的<audio> 标记,请使用volume 属性,如下所述:***.com/questions/33747398/html-audio-tag-volume @vahdet 这就是我遇到的问题,我没有使用 @IGotManyQuestions 是的,你是。引用:this.sound = document.createElement("audio"); 【参考方案1】:

在我看来,您有两个选择;将游戏的所有音频文件normalized 的响度设置为相同级别(均衡、压缩、受限等),或者,如果可用,您可以使用webaudio api 构建限制器并将其连接到您的音频源。

选项 1:响度归一化

响度归一化是将音频的平均响度设置为一定水平,这意味着您的音频文件将对其响度水平进行调换,以使平均响度符合您的要求。简而言之,它会降低或增加音量以使声音达到您需要的水平。如果您将所有曲目的响度提高到一定水平,它们肯定会保持在一定的音量范围内。

可以通过音频标准化软件完成,***建议ReplayGain、Sound Check和EBU R128;但是,你可以通过谷歌搜索找到其他人。

选项 2:使用 DynamicsCompressorNode 的网络音频限制器

如果您能够在您的代码中使用webaudio api,那么您也可以选择使用简单的limiter。当然,有一组不同类型的限制器,但我无意讨论它们的区别和好处。

这可以通过连接您在 DynamicsCompressorNode 上连接的音频源来完成。

我找到了这个blog which dig a little deeper into the limiter on webaudio,下面是我从博客中获取的关于如何使用动态压缩器节点构建限制器的 sn-p。

var context = new AudioContext();
var audio = document.getElementById('audio');
var label = document.getElementById('maximize-db');
var reduction = document.getElementById('reduction');
var source = context.createMediaElementSource(audio);
var preGain = context.createGain();
var limiter = context.createDynamicsCompressor();
limiter.threshold.value = 0.0; // this is the pitfall, leave some headroom
limiter.knee.value = 0.0; // brute force
limiter.ratio.value = 20.0; // max compression
limiter.attack.value = 0.005; // 5ms attack
limiter.release.value = 0.050; // 50ms release
source.connect(preGain);
preGain.connect(limiter);
limiter.connect(context.destination);
var dbToGain = function(db) 
  return Math.exp(db * Math.log(10.0) / 20.0);

var maximize = (function(db) 
  preGain.gain.value = dbToGain(db);
  label.textContent = db;
  return arguments.callee;
)(0);
var showReduction = (function() 
  reduction.style.width = (dbToGain(limiter.reduction.value) * 288) + "px";
  window.requestAnimationFrame(arguments.callee);
)();
html, body 
  font-size: 12px;
  font-family: "Open Sans";
  background: white;


.controls 
  padding: 6px 16px;
  border-radius: 5px;
  background: #424242;
  color: #f0f0f0;
  display: inline-block;
  width: 288px;
  white-space: nowrap;


.controls input 
  width: 200px;


.controls span, .controls input 
    vertical-align: middle;
    padding: 0;
    margin: 0;


#reduction 
  margin-top: 4px;
  margin-bottom: 2px;
  width: 288px;
  height: 2px;
  background: green;


a 
  text-decoration: none;
  color: #666;


p 
  color: #CCC;


audio 
  width: 320px;
<h1>Web Audio HardLimiter</h1>
<div class="controls">
  <span>Maximize</span>
  <input type="range" value="0" step="1" min="0" max="12" oninput="maximize(this.value);">
  <span class="value" id="maximize-db">6</span> <span class="unit">dB</span>
  <div id="reduction"></div>
</div>
<div>
  <h3><a href="http://www.audiotool.com/track/never-ending_passion/" target="audiotool">Never-ending Passion</a> by The Three Pauls</h3>
  <audio id="audio" crossorigin controls>
    <source src="http://api.audiotool.com/track/never-ending_passion/play.ogg" type="audio/ogg">
    <source src="http://api.audiotool.com/track/never-ending_passion/play.mp3" type="audio/mpeg">
    Your browser does not support the audio tag.
  </audio>
</div>
<p>Does not work in Safari.</p>

【讨论】:

以上是关于调整游戏音乐的音量的主要内容,如果未能解决你的问题,请参考以下文章

使用 MPVolume 为音乐播放器调整音量,iOS

无法在我的 iphone 应用程序中调整音量

iOS 应用中调整手机系统音量

如何在Windows 7/8/10中使用热键来调整音量?

Android - 调整个别应用程序音量

Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)