- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为一个简单的游戏创建一个声音管理器,我知道这对于这个应用程序来说不是必需的,而是为了我这样做的学习体验。我尝试了几种不同的方法,但尚未取得真正的成功。以下是我目前的尝试。我相信我的主要问题是我的 XML 请求,因为每次尝试我的文件似乎都没有加载。
任何关于我哪里出错或者我应该采取哪些不同做法的建议将非常感激。
我的音频管理器(远未完成,但应该加载并播放声音?)
var audioctx = new (window.AudioContext || window.webkitAudioContext)();
function AudioManager(totalsounds) {
this.ctx = audioctx;
this.sounds = {};
this.totalSounds = totalsounds;
this.loaded = 0;
this.masterGain = this.ctx.createGain(); // master gain control
this.masterGain.connect(this.ctx.destination);
this.loadSound = function(name) {
this.sounds[name] = new Sound(name, this);
console.log("sound Loaded?");
};
this.play = function(name) {
if(this.sounds[name] !== undefined)
{
this.sounds[name].source.start(0);
console.log("playing?");
} else
{
console.log(name + " - sound not found!");
}
};
};
由管理器创建并存储在其中的声音对象。(代码似乎从未加载文件)
function Sound(name, audiomanager){
this.manager = audiomanager;
this.source;
this.request = new XMLHttpRequest();
this.request.open('GET', name, true);
this.request.responseType = 'arraybuffer';
console.log(" i think code stops here");
this.request.onload = function() {
this.manager.loaded += 1;
console.log("loaded?");
this.manager.ctx.decodeAudioData(this.request.response).then(function(buffer){
this.source = manager.ctx.createBufferSource();
this.source.buffer = buffer;
this.source.connect(manager.masterGain);
});
};
this.request.send();
}
很久以后,我尝试按如下方式对其进行测试。
var audio = new AudioManager(1);
audio.loadSound("test.mp3");
if(audio.loaded == audio.totalSounds){setTimeout(game, 50);}
function game() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
setInterval(function() {
if(buttonDown[5])
{
audio.play("test.mp3");
}
},100);
提前感谢您的帮助。
最佳答案
好的,我已经成功了。如果有人在寻找类似问题的答案时发现了这个,这里有一个工作版本(尽管仍然非常粗糙和难看)。
var audioctx = new (window.AudioContext || window.webkitAudioContext)();
function AudioManager(totalsounds) {
this.ctx = audioctx;
this.sounds = {};
this.totalSounds = totalsounds;
this.loaded = 0;
this.masterGain = this.ctx.createGain(); // master gain control
this.masterGain.connect(this.ctx.destination);
this.loadSound = function(name, delaytime) {
this.sounds[name] = new Sound(name, this, delaytime);
console.log("sound Loaded?");
};
this.play = function(name) {
var buffer = this.ctx.createBufferSource();
if(this.sounds[name] !== undefined && !this.sounds[name].delayed)
{
buffer.buffer = this.sounds[name].source;
buffer.connect(this.masterGain);
buffer.start(0);
console.log("playing?");
this.sounds[name].delaySet();
} else if(this.sounds[name].delayed)
{
console.log("audio delayed = " + this.sounds[name].delayed);
} else
{
console.log(name + " - sound not found!");
}
};
};
function Sound(name, audiomanager, delaytime){
this.manager = audiomanager;
this.source;
this.delay = delaytime;
this.delayed = false;
var self = this;
this.delaySet = function(){
console.log("RESET");
self.delayed = true;
setTimeout(function(){self.delayed = false;}, self.delay);
};
this.request = new XMLHttpRequest();
this.request.open('GET', name, true);
this.request.responseType = 'arraybuffer';
console.log("stops here");
this.request.onload = function() {
self.manager.loaded += 1;
console.log("loaded?");
self.manager.ctx.decodeAudioData(self.request.response).then(function(buffer){
self.source = buffer;
});
};
this.request.send();
}
添加延迟功能后,调用略有修改。(不是实际解决方案的一部分)
var audio = new AudioManager(1);
audio.loadSound("test.mp3", 1500);
var a = setInterval(function() {
if(audio.loaded >= audio.totalSounds){setTimeout(game, 50); clearInterval(a);}
}, 100);
function game() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
setInterval(function() {
if(buttonDown[5])
{
console.log("SOUND");
audio.play("test.mp3");
}
},100);
关于javascript - HTML5/Javascript 网络音频 api - SoundManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179608/
我正在使用Amazing Audio Player在我的网站上播放音乐。该工具只是自定义本地html5音频。但是我在html的上遇到一些问题。特别是当我的脚本调用load()函数时。 在Google
我使用简单的SoundManager播放来自sounpool的声音。我的问题是,即使我使用mySound.release();,退出应用程序时声音也不会停止播放。 否则,一切都会正常进行,这是我的代码
function doclick(){ soundManager.createSound({ id: 'mySound', url: 'http://loca
我想在 Canvas 上为音频创建音频可视化,并决定使用 SoundManager2。问题是应该返回波形数据的函数会抛出空数组。知道该怎么办吗? (我听到声音在播放,所以它加载正确:))
好吧,这东西太棒了!我在 .js 文件中设置了 SoundManager 2,并在我的页面上播放音频。我目前唯一的问题是弄清楚如何在 soundManager.setup({...}) 之外播放音频。
我正在尝试安装 SoundManager 的 360Ui播放器。 但我似乎无法钉牢它。 这是我的标题中的 jQuery 代码: ... //some soundmanager set
我使用这个标准的 SoundManager。它在我所有的设备上都能正常工作,但只是偶尔在市场上出现这些错误 SoundManager.playSound(SoundManager.java:87) 中
如果我播放一个声音,它运行良好。 添加第二个声音会导致它崩溃。 有人知道是什么导致了这个问题吗? private SoundManager mSoundManager; /** Called when
以下代码适用于我的桌面浏览器,但不适用于我 iPhone 上的 Safari,它会显示 alert() 但不会播放音频。我究竟做错了什么? soundManager.url = '/assets/ba
所以我有这个应用程序,每次循环播放声音时我都需要淡入淡出效果,以便过渡流畅。 我正在使用 SoundManager 2。 更新代码: $(document).ready(function () {
我想在声音管理器waveformData提供的 Canvas 数据上实时绘制,并使其看起来像一条平滑移动的均衡器线,如 http://paperjs.org/tutorials/animation/c
我需要使用此脚本将声音预加载到我的网站: soundManager.setup({ url: '/swf/', flashVersion:9, useFlashBlock:f
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我构建了一个应用程序,它既可以播放上传的原始 mp3 文件,也可以播放使用 FFMPEG 转换的副本。我发现在某些情况下,FFMPEG 文件在启动时会在瞬间发出可怕的爆裂声/咔嗒声/尖叫声(请听下文)
我只是尝试使用 GWT-SoundManager2 来发出一些噪音。我刚刚尝试了一个简单的代码,如下所示: SoundManager sm; String SS = "soundId" sm = So
我正在为手机开发一款 HTML5 游戏。声音有时起作用,有时消失。您是否对手机没有闪光灯的 SoundManager 2 这样的库有任何想法? 最佳答案 要将 HTML5 与 SoundManager
我正在使用 wpaudio 插件将 mp3 链接转换为 javascript/flash 音频播放器。我的问题是我在我网站的两个区域使用这个插件:一个在黑色背景上,一个在白色背景上。我需要为每个页面使
我正在尝试为一个简单的游戏创建一个声音管理器,我知道这对于这个应用程序来说不是必需的,而是为了我这样做的学习体验。我尝试了几种不同的方法,但尚未取得真正的成功。以下是我目前的尝试。我相信我的主要问题是
我正在尝试使用 SoundManager2 播放多个音频文件到目前为止,这是我能找到的关于该站点的唯一可用示例。 soundManager.setup({ url: '/path/to/swf
所以我在使用 soundcloud api 和 html 5 音频播放器时遇到了一些问题。 主要目标是仅使用 html5 访问所有公开可用的 soundcloud 曲调。 我正在使用以下内容。
我是一名优秀的程序员,十分优秀!