Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как у распакованного звука узнать громкость 4 раза в секунду? (http://www.flasher.ru/forum/showthread.php?t=198000)

TWETTI 17.04.2013 12:22

Как у распакованного звука узнать громкость 4 раза в секунду?
 
Подскажите, пожалуйста, как у распакованнного методом extract звука Sound, узнать громкость(от 0 до 1) 4 раза в секунду и записать значения в ByteArray?

Вот код, который я написал.
Код AS3:

private function generate():void
{
        // samples - распакованный звук
        samples.position = 0;
        step = samples.length / 4096;
        do
        {
                step--;
        }
        while (step % 4);
        var left:Number;
        var right:Number;
        var mono:Number;
        for (var c:int = 0; c < 4096; c++)
        {
                left = Math.abs(samples.readFloat());
                right = Math.abs(samples.readFloat());
                mono = Math.abs(Math.max(left, right)) + Math.abs(Math.min(left, right));
                samples.position = c * step;
                _results_bytes.writeFloat(mono); // _results_bytes - ByteArray с массивом громкостей.
        }
}

Но он записывает значения не 4 раза в секунду, а чаще.

Вот полный код, если надо: https://gist.github.com/subdan/5402384 Там громкость рисуется в Bitmap.

chamele0n 17.04.2013 13:16

так в чем проблема
Код AS3:

stage.frameRate = 4;

и
Код AS3:

addEventListener(Event.ENTER_FRAME, extractPart);

будет вызываться 4 раза в секунду

TWETTI 17.04.2013 13:21

chamele0n, я не про это. У меня звук к примеру 60 секунд. Мне надо 60*4=240 значений громкости в виде массива.

chamele0n 17.04.2013 13:27

а посмотрел тот код, так измени значение step
например вместо 4096 попробуй прописать 1024

TWETTI 17.04.2013 13:40

Сам разобрался.
Код AS3:

while (samples.bytesAvailable > 88200)
{
        for (var i:uint = 0; i < 11025; i++)
        {
                var leftChannel:Number = Math.abs(samples.readFloat());
                var rightChannel:Number = Math.abs(samples.readFloat());
                var monoChannel:Number = Math.abs(Math.max(leftChannel, rightChannel)) + Math.abs(Math.min(leftChannel, rightChannel));
        }
                                _results_bytes.push(monoChannel);
}



Часовой пояс GMT +4, время: 21:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.