Actionscript 3 - 如何使用此mp3速度/音高变换器循环播放音频?

时间:2018-02-18 00:45:10

标签: loops actionscript-3 audio pitch

我使用的是Adobe脚本的修改版本,可以提高MP3音频文件的速度。修改后的版本(由user2003548提供)允许您以更多变量的方式增加或减少速度。感谢那位用户! (基本上他修改了upOctave函数)。

他们的原始帖子是here,但我会在此处重新发布修改后的代码...

var sourceSnd:Sound = new Sound();
var outputSnd:Sound = new Sound();
var urlReq:URLRequest = new URLRequest("test.mp3");

sourceSnd.load(urlReq);
sourceSnd.addEventListener(Event.COMPLETE, loaded);

function loaded(event:Event):void
{
    outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
    outputSnd.play();
}

function processSound(event:SampleDataEvent):void
{
    var bytes:ByteArray = new ByteArray();
    sourceSnd.extract(bytes, 4096);
    event.data.writeBytes(upOctave(bytes));
}

function upOctave(bytes:ByteArray):ByteArray
    {
        var returnBytes:ByteArray = new ByteArray();
        bytes.position = 0;
        var position:int = 0;
        var speed:Number = 0.75;
        while(bytes.bytesAvailable > 0)
        {
            if (bytes.bytesAvailable > 0)
            {
                bytes.position = int(speed*position)*8;
            }
            position++;
            if(bytes.bytesAvailable>0){
                returnBytes.writeFloat(bytes.readFloat());
                returnBytes.writeFloat(bytes.readFloat());
            }
        }
        return returnBytes;
    }

所以你基本上把一个mp3文件(名为test.mp3)放在与这个脚本相同的文件夹中,它会以不同的速度播放音频,具体取决于变量的值' speed&# 39 ;.

在我的版本中,我将速度值替换为滑块的值,这使我能够动态调整速度,因此它完全符合我的需要。

我要做的是创造一种发动机声音,我可以控制它的速度/音高。所以我只想让音频循环(尽可能无缝)而不是只播放一次。

我已经尝试过outputSnd.play(0,9999),但这并没有奏效。我必须承认,我不会完全理解剧本中发生的事情,除非它非常聪明。我认为正在播放的声音类似于从upOctave函数返回的字节流式传输,并且循环可能必须在某处发生。但我似乎无法制作这个音频循环。如果那里的任何人可以帮助那将是惊人的: - )

非常感谢 达伽兹

0 个答案:

没有答案