我有以下非常基本的代码,这是更复杂的问题的一部分。
我的问题是该功能:context.decodeAudioData(arrayBuffer)
不能在iPhone
(尝试过Safari
和Chrome
)或Mac
(Safari)上运行,但不能在其他地方(Android
和Windows 10
(所有浏览器)上使用),甚至不能在Mac
(Chrome)上运行。
在Mac
(Safari)上,出现以下错误:
Unhandled Promise Rejection: TypeError: Not enough arguments
Run Code Online (Sandbox Code Playgroud)
这是代码:
Unhandled Promise Rejection: TypeError: Not enough arguments
Run Code Online (Sandbox Code Playgroud)
window.AudioContext = window.AudioContext || window.webkitAudioContext;
const context = new AudioContext();
window.addEventListener('load', function() {
const button_option_1 = document.querySelector('.button_option_1');
const button_option_1_play = document.querySelector('.button_option_1_play');
button_option_1_play.disabled = true;
button_option_1.addEventListener('click', async function() {
log('', false);
let buffer;
button_option_1_play.disabled = true;
button_option_1_play.onclick = () => playBuffer(buffer);
let time_start = …
Run Code Online (Sandbox Code Playgroud)使用 Web Audio API,我正在尝试构建具有“向前跳过 15 秒”功能的 mp3 播放器。
我能够使用源缓冲区加载 mp3,并可以让它开始播放。我想做这样的事情,虽然我知道 currentTime 不是一个可设置的属性:
context.currentTime += 15
Run Code Online (Sandbox Code Playgroud)
一旦歌曲已经播放,你如何向前跳过 n 秒?
我有两个一秒音频源,如下所示:
var context = system.AudioContext();
var source = context.createBufferSource();
var audioBuffer1 = context.createBuffer(1, float32Array_1.length, context.sampleRate);
audioBuffer1.getChannelData(0).set(float32Array_1);
var audioBuffer2 = context.createBuffer(1, float32Array_2.length, context.sampleRate);
audioBuffer2.getChannelData(0).set(float32Array_2);
Run Code Online (Sandbox Code Playgroud)
现在我想在它们之间没有延迟地播放这两个音频源。对于单个源,我可以使用以下代码播放音频:
source.buffer = audioBuffer1;
source.connect(context.destination);
source.start(0);
Run Code Online (Sandbox Code Playgroud)
我如何附加第二个源,以便它们之间没有延迟。
我正在使用 AudioContext() 进行听力测试,我想知道如何将音量提高/降低 x dB。甚至有可能吗?
目前,我有一个 GainNode 连接到我的 AudioContext,它看起来(简而言之)如下:
var context = new AudioContext(), gainNode;
context.decodeAudioData(req.target.response, function(buffer) {
gainNode = context.createGain();
...
}
Run Code Online (Sandbox Code Playgroud)
要更改音量,我这样做:
gainNode.gain.value = {-1 to 1}
Run Code Online (Sandbox Code Playgroud)
在这里,我没有机会准确定义 dB 值。还有其他方法吗?
我认为问题是,浏览器永远不知道扬声器发出的声音的确切音量,因此没有计算新的 dB 音量的基础。
确定当前 dB 值的一种方法是通过 2 个声音的差异,例如测试声音(白噪声)和语音数字。为了计算差异,我找到了公式:
20 * Math.log10(gainNoise / gainSpeech);
Run Code Online (Sandbox Code Playgroud)
然后我有一个基数,例如 -6 dB,当语音是 -0.6 并且噪音是 -0.3 时。但是如何将这个值提高一个特定的 dB 值?
示例:我将 -6 dB 提高 5 dB 至 -1 dB。如何重新计算语音/噪音?
我试图在全局中公开 AudioContext apiHowler
并将其分配给一个变量,但是我无法弄清楚如何Howler.ctx
不为空。
const CTX = Howler.ctx ; // Howler.ctx is returning null
Run Code Online (Sandbox Code Playgroud) 我想在 Javascript 中对音频进行音调,我认为最简单的方法是 Tone.js ( https://tonejs.github.io/docs/r13/PitchShift ),但我的实现没有播放任何声音,但没有错误. 我究竟做错了什么?
HTML(加载音频文件)
<html>
<div id="wrapper">
<button onclick="loadTheTrack()"></button>
</div>
<script src="Tone.js"></script>
<script src="seebelow.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)
Javascript
var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
Tone.setContext(audioCtx);
var audioDatas=[];
function loadTheTrack() {
var input = document.createElement('input');
input.type = 'file';
input.style = "display:none";
input.onchange = function (e) {
var file = e.target.files[0];
console.log(file);
var reader = new FileReader();
reader.onload = function () {
console.log("decoding audio data with" + this.result);
audioCtx.decodeAudioData(this.result, (decodedData) => {
// note: …
Run Code Online (Sandbox Code Playgroud) audiocontext ×6
javascript ×4
audio ×1
audiobuffer ×1
firefox ×1
howler.js ×1
html ×1
html5 ×1
html5-audio ×1
math ×1
reactjs ×1
tone.js ×1