Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вырезать сэмпл из mp3 файла (http://www.flasher.ru/forum/showthread.php?t=171357)

boriskaaa 14.11.2011 17:41

Вырезать сэмпл из mp3 файла
 
Всем привет.

Можно ли вырезать часть звукового файла и сохранить его ?

Т.е я могу загрузить mp3-шку и мне надо вырезать из него определённую часть. Я думал, что может как-то можно через byteArray это сделать, но не знаю как. Это вообще возможно ?

TWETTI 14.11.2011 18:21

Это возможно. Существуют уже готовые библиотеки. Ищите.

boriskaaa 14.11.2011 18:25

Я вот это и делаю. Даже на это форуме есть подобные темы, но ответа жалко нет.

Genzo 14.11.2011 19:31

Sound.extract

Genm 14.11.2011 21:07

Есть примеры использования?

boriskaaa 14.11.2011 21:44

Цитата:

Сообщение от Genzo (Сообщение 1046004)
Sound.extract

Ну это понятно. Тут дело в том, чтобы применить это дело правильно. Примерчик бы не помешал.

boriskaaa 08.12.2011 18:27

Получилось..))

Если кому-то интересно, то вкратце опишу так:

1. Через urlloader загружаем Mp3, как бинарные данные
2. Определяем битрейт (тут возможно 2 варианта, я разобрался только с постоянным битрейтом). Есть либа audiofx, там можно додумать, как вытащить битрейт.
3. если битрейт 256кбит/сек, то например 10-я секунда это (256*1000)/8*10. Пишем цикл с 10 по 20 сек.
Код AS3:

for(var i:Number= (256*1000)/8*10;i< (256*1000)/8*20;i++)
{
 //Заранее создаётся новый byteArray.И в него пихаем данные newArr[k] = curArr[i];
k++;
//k изначально равно 0
 
}

3. Сохраняем всё это дело через
Код AS3:

filereference.save(newArr)

В итоге получаем файл в 10 сек. Ну с какой секунды по какую уже разобраться не составит труда если выбирать по временной шкале отрезок.

Остался один вопрос. Как получить битрейт в данной секунде ?

in4core 08.12.2011 19:12

Цитата:

Как получить битрейт в данной секунде
ММ а разве битрейт на каждую секунду свой?!

Alex Lexcuk 08.12.2011 20:41

битрейт в каждой секунде получать незачем, ведь если использовать SampleDataEvent.SAMPLE_DATA, то он сам посебе получается. Пример: загружается файл 350КБ звука и можно вырезать из него каждую десятую часть.
Код AS3:

package  
{
        import flash.display.*;
        import flash.events.*;
        import flash.system.*;
        import flash.text.*;
        import flash.ui.*;
        import flash.utils.*;
        import flash.sampler.*;
        import flash.media.*;
        import flash.net.*;
        import flash.external.*;
        /**
        * ...
        * @author Lexcuk
        * http://murmadillo.tut.su/m/bmw.swf
        */

        public class DocMp3 extends Sprite
        {
                private var sound:Sound;
                private var soundChanel:SoundChannel;
                private var navTxt:TextField;
                private var mp3Samples:Vector.<Number>;
                private var samples:Vector.<Number>;
                private var pos:uint;
                private var i:uint = 0;
                public function DocMp3()
                {
                        navTxt = new TextField();
                        sound = new Sound();
                        sound.addEventListener(Event.COMPLETE, soundCompleteHandler);
                        sound.load(new URLRequest('bmw.mp3'));
                        samples = new Vector.<Number>();
                }
 
                public function soundCompleteHandler(e:Event):void {
                        trace('load done');
                        var ba:ByteArray = new ByteArray();
                        sound.extract(ba, sound.bytesLoaded);
                        var n:Number;
                        mp3Samples = new Vector.<Number>();
                        ba.position = 0;
                        while (ba.bytesAvailable > 0) {
                                samples.push(n = ba.readFloat());
                                mp3Samples.push(n);
                        }
                        sound = new Sound();
                        sound.addEventListener(SampleDataEvent.SAMPLE_DATA, soundSampleDataHandler);
                        soundChanel = sound.play();
                        createProcentTxt();
                }
 
                private function createProcentTxt():void {
                        var str:String = '';
                        for (i=0; i<100; i+=10) str = str + "<a href=\'event:"+i+"\'><u>[procent "+i+"]</a>\n";
                        navTxt = new TextField();
                        navTxt.autoSize = TextFieldAutoSize.LEFT;
                        addChild(navTxt);//добавить на рабочее поле
                        navTxt.htmlText = str;
                        navTxt.addEventListener(TextEvent.LINK, txtLinkHandler);
                }
 
                private function txtLinkHandler(param1:TextEvent):void {
                        var procent:Number = Number(param1.text);
                        if (procent != 0) procent = procent / 100;
                        samples.length = 0;
                        for (i = procent*mp3Samples.length; i < procent*mp3Samples.length+mp3Samples.length/10; i++) {
                                if (i >= mp3Samples.length) break;
                                samples.push(mp3Samples[i]);
                        }
                }
 
                private function soundSampleDataHandler(event:SampleDataEvent):void {
                        var n:Number = 0;
                        pos += 8192/2;
                        for (i = pos; i < pos + 8192/2; i++) {
                                if (i >= samples.length) {
                                        pos = 0;
                                        if (soundChanel != null) soundChanel.stop();
                                        soundChanel = sound.play();
                                        break;
                                }
                                event.data.writeFloat(n = samples[i]);
                                //event.data.writeFloat(n);//замедлние
                        }
                }
 
 
        }
 
}

http://murmadillo.tut.su/m/bmw.swf
ПС: Уменьшите громкость колонок, РОК... Кнопки стоп НЕТУ.


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

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