2012-01-28 69 views
1

我非常喜欢这个小菜鸟,但我有我的.wav文件播放声音效果,甚至重叠,当我需要它们在Safari,Chrome,IE和FireFox中,但是唯一的问题,我仍然是我无法在IE8中设置音量。它只是在原始文件的相同大声级别播放。这里是我有的代码(我已经尝试过注释掉)。需要帮助控制iE8中的音频对象音量

this.load = function(audiofile) 
    { 
    var i; 

    for (i=0; i<overlapMax; i++) 
     { 
     var object = null; 

     if (ie8) 
      { 
      object = document.createElement('div'); 
      var iesound = ''; 

    //  adding volume here didn't do anything 
    //  iesound = iesound + '<object id="'+soundID+'track'+i+'" type="audio/x-wav" volume=2 data="'+audiofile+'" width="200" height="16">'; 

      iesound = iesound + '<object id="'+soundID+'track'+i+'" type="audio/x-wav" data="'+audiofile+'" width="200" height="16">'; 
      iesound = iesound + '<param name="src" value="'+audiofile+'" />'; 
      iesound = iesound + '<param name="volume" value="2" />'; // adding volume here didn't do anything   iesound = iesound + '<param name="autoplay" value="false" />';   iesound = iesound + '<param name="autostart" value="0" />';   iesound = iesound + '<param name="pluginurl" value="http://www.apple.com/quicktime/download/" />'; 
      iesound = iesound + '</object>'; 

      object.id = soundID+'track'+i+'div'; 
      object.innerHTML = iesound; 
      object.style.visibility = 'hidden'; 
      object.style.position = 'absolute'; 
      object.style.left = '0px'; 
      object.style.top = '0px'; 
      } 
     else 
      { 
      object = document.createElement('audio'); 
      object.setAttribute('id',soundID+'track'+i); 
      object.setAttribute('src',audiofile); 
      } 

     document.body.appendChild(object); 

     var newsound = document.getElementById(soundID+'track'+i); 

     // needs to be handled with a method & params 
     // 
     newsound.volume = 0.02; // this sets volume just fine for everything but ie8 

     tracks.push(newsound); 
     } 
    } 

回答

3

有些人会告诉你没有,但你要懂得,所以这是如何最好地接近的播放音乐和声音在浏览器中最宽跨浏览器实现...

首先这是最终一个Flash问题,如果你希望这可以跨所有浏览器可靠地工作。其次永远不会使用微软专有的JScript innerHTML方法。它没有注册DOM(人们使用JavaScript进行交互的浏览器界面)。会发生什么情况是,当你到达JavaScript的应用程序级别时,你将无法与倾倒在DOM上的任何东西交互作为一堆文本,它不是文本,而是应用程序。使用符合W3C标准的方法,例如appendChild,insertBefore等。在你之间会有一个非常讨厌的无形墙,并且能够可靠地做事,直到你停止使用innerHTML为止,你永远不会得到解决方案。如果生活中的任何事情都很容易,那么每个人都会很开心,以正确的方式做事,而你变得比不能做事的人更有价值,如果你足够谨慎地做出努力,正确的做法就变得容易。

第三,您遇到了Internet Explorer错误。问题是,不幸的是Internet Explorer需要一个带有name =“movie”attribute =“value”的param元素,并重复使用.swf路径。为什么?除此之外,没有其他合乎逻辑的原因是Internet Explorer不幸运行。

你的对象元素应该是这样的......

<object class="left" data="mplayer.swf" style="min-height: 1px; min-width: 1px;" type="application/x-shockwave-flash"> 
<param name="movie" value="mplayer.swf" /> 
<param name="loop" value="false" /> 
<param name="play" value="false" /> 
<param name="wmode" value="transparent" /> 
<p>Alternative content, a link to download the Flash plugin in example.</p> 
</object> 

现在我注意到您使用的是wav文件,所以你需要记住,对于这个没有Flash的Internet Explorer的工作(或真任何其他浏览器)将完全依赖于具有设置为处理这种文件类型的插件的用户。这意味着像Quick Time这样的例子。这将使用户的体验对他们已经遇到的问题非常主观(通常是大量的垃圾,如果他们技术不太好,没有任何(善意的)技术人员来帮助他们)。

尽管我不喜欢主张Flash,但很遗憾,我们需要真正获得一致的跨浏览器体验。由于微软是MPEG-LA许可证巨魔集团的一部分,他们仍然不支持HTML5音频/视频元素(只有开放格式是可以接受的,并且他们必须开箱即用,而用户不得不做任何事情来限定这些元素)否则它是一个有利润的议程的公司。因此,如果不是2030年的话,音频/视频元素根本不可能很好地适应2020年(主要与微软对其产品的过度支持相结合)。由于Flash拥有接近100%的市场份额,我推荐使用它,并且我有一个后续帮助您与一个现场实例...

我建议您查看John Bezanis的Flash MP3 Player; http://www.bezzmedia.com/swfspot/samples/flash8/Mp3_Player_with_XML_Playlist

通过输入启用音乐,您可以在我的网站上看到一个修改后的版本(请参阅我的个人资料中的链接)。我基本上使用JavaScript来处理原始Flash对象中使用的最小Flash脚本的所有内容。

我很乐意澄清你需要的任何东西。

+1

+1一个伟大的答案和“巨魔组”:-) – SamiSalami 2012-09-01 14:48:24