需要帮助控制iE8中的音频对象音量

Need help controlling audio object volume in iE8

本文关键字:音频 对象 帮助 控制 iE8      更新时间:2023-09-26

我对此很在行,但我的.wav文件在Safari、Chrome、IE和FireFox中播放音效,甚至在需要时重叠,但我唯一的问题是无法在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 );
        }
    }

有些人会告诉你不,但你想知道如何做到这一点,这就是如何最好地实现在浏览器中播放音乐和声音的最广泛的跨浏览器实现。。。

首先,如果你想让它在所有浏览器中可靠地工作,这最终是一个Flash问题。

其次,永远不要使用微软专有的JScript innerHTML方法。它不注册DOM(这是人们使用JavaScript进行交互的浏览器接口)。将会发生的情况是,当你进入JavaScript的应用程序级别时,你将无法与作为一堆文本转储到DOM上的任何东西进行交互,这不是文本,而是一个应用程序。使用W3C兼容的方法,如appendChild、insertBefore等。在你停止使用innerHTML之前,你将无法可靠地完成任务,这将是一堵巨大的无形的墙。如果生活中的任何事情都很容易,每个人都会很快乐,以正确的方式做事,你会比其他做不到的人更有价值。坦率地说,如果你足够关心并从一开始就努力,以正确方式做事就会变得容易。

第三,您遇到了Internet Explorer错误。问题是,不幸的是,Internet Explorer需要一个name="movie"attribute="value"的param元素,并重复.swf路径。为什么?不幸的是,没有其他合乎逻辑的原因是InternetExplorer的工作方式。

您的对象元素应该是这样的。。。

<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(或任何其他浏览器)的情况下工作,完全取决于用户是否有一个插件来处理这种文件类型。这意味着类似于示例中的"快速时间"。这将使用户的体验对他们已经遇到的事情非常主观(如果他们不是很专业,身边没有任何(善意的)技术人员来帮助他们,通常会有很多垃圾)。

尽管我不喜欢提倡Flash,但不幸的是,真正获得一致的跨浏览器体验是必要的。由于微软是MPEG-LA许可证流氓集团的一部分,他们仍然不支持HTML5音频/视频元素(只有开放格式是可以接受的,它们必须开箱即用,而用户不必做任何事情来获得支持这些元素的资格),否则这是一家基于利润的公司。因此,音频/视频元素在2020年代甚至2030年代都不可靠(主要是由于微软对其产品的支持时间过长)。由于Flash的市场份额接近100%,我建议使用它,我有一个后续的例子来帮助你解决问题。。。

我建议你看看约翰·贝扎尼斯的Flash MP3播放器;http://www.bezzmedia.com/swfspot/samples/flash8/Mp3_Player_with_XML_Playlist

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

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