首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频和音调上的playbackRate

音频和音调上的playbackRate
EN

Stack Overflow用户
提问于 2012-01-25 04:28:10
回答 3查看 12.6K关注 0票数 12

一点点背景:

人们喜欢游戏。

人们使用互联网。

互联网需要游戏。

游戏使用声音。

HTML5有<audio>

到目前为止一切都很好。

最近我发现--令我惊讶的是-- IE9实际上支持playbackRate。我急切地尝试了一下。更令人惊讶的是,它确实奏效了。我在Chrome上也尝试过同样的方法,当我把它设置为0.5时,它的效果非常糟糕。我已经放弃了火狐,因为它不支持MP3。

接下来,我的问题是: IE和Chrome在更改playbackRate时都会应用音高校正。IE做得很好,Chrome做得很糟糕。不管怎样,我不想这样,我想要的声音改变音高。有了这种能力,我可以删除650个文件,我必须在程序上产生一个备用音高,并将有更多的自由与我的项目。见鬼,如果我真的愿意的话,我甚至可以在HTML5 (减去效果频道)中制作一个MOD磁道播放器。

那么,在HTML5规范中有什么东西可以让我关闭音高校正,只需要播放声音,就像样本实际上是被挤压在一起的一样吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-25 08:45:31

不,目前HTML5规范中没有任何东西允许您使用音频进行如此精细的调优。

但。

既然你已经决定放弃Firefox,那么你为什么要关心“权力”和“项目自由”呢?顺便提一句,Opera也不支持MP3。

当然,除非这是一个个人项目,只有你自己才会使用它,因此这是一个没有意义的问题。在这种情况下,如果你想以Chrome为目标,你可以查看Web音频API,它可能有你想要的东西。

票数 0
EN

Stack Overflow用户

发布于 2012-07-21 14:32:57

来自playbackRate实现中的Mozilla bug跟踪器问题

WebKit通过导出一个附加的(前缀)属性"preservesPitch“(这里向WhatWG提出:http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-July/021100.html)来解决这个问题。

想必您可以将preservesPitch ( Webkit的webkitPreservesPitch)设置为false,以便至少在Webkit中关闭此功能。我不熟悉其他浏览器对此属性的支持。

票数 6
EN

Stack Overflow用户

发布于 2012-09-26 21:13:04

Chrome目前支持Web ( http://www.w3.org/TR/webaudio/ ),它有一个可以设置的playbackRate audioParam。它不像<audio>标签那么简单,但是允许各种很酷的东西。我目前正在使用它来玩音高变换/时间拉伸扭曲。

下面是你可以做的事情的一个例子:

代码语言:javascript
复制
    //build a request and fire it off
    speedChanger.loader = (function(){

      var _request       = new XMLHttpRequest(),

          _handleRequest = function(url){
            _request.open('GET',url,true);
            _request.responseType = 'arraybuffer';
            _request.onload = function(){
              SpeedChanger.audioGraph.context.decodeAudioData(_request.response, function(buffer){
                _loadedBuffer = buffer;
                SpeedChanger.audioGraph.setBuffer(buffer);
                SpeedChanger.audioGraph.setBufferCache(buffer);

              },function(){//error stuff});
            };
            _request.send();
          };

      _handleRequest("audio/file.mp3");

  }());//loader

  grainTable.audioGraph = (function(){
    var _context = new webkitAudioContext(),         //this is the container for your entire audio graph
        _source = _context.createBufferSource(),     //your buffer will sit here
        _bufferCache,                                //buffer needs to be re-initialized before every play, so we'll cache what we've loaded here

        //for chaching / retrieving the buffer
        _getBufferCache = function(){
          return _bufferCache;  
        },
        _setBufferCache = function(_sound){
          _bufferCache = _sound;
        },

        //for setting the current instance of the buffer 
        _setBuffer = function(_sound){
          _source.buffer = _sound;
        },

        _setPlaybackRate = function(rate){
          _source.playbackRate.value = rate;
        },

        _setRate = function(myRate){
            _rate = myRate;
        }

        //play it
        _playSound = function(){

          _source.noteOff(0);                       //call noteOff to stop any instance already playing before we play ours

          _source = _context.createBufferSource();  //init the source
          _setBuffer(_bufferCache);                 //re-set the buffer

          _setPlaybackRate(_rate);                  //here's your playBackRate check

          _source.connect(_context.destination);    //connect to the speakers 
          _source.noteOn(0);                        //pass in 0 to play immediately
        },

}

    return{

      context        :_context,
      setBuffer      :_setBuffer,
      setBufferCache :_setBufferCache,
      playSound      :_playSound,
      setRate        :_setRate

    }

  }());//audioGraph
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8997813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档