|
|
|||||
Регистрация: Nov 2010
Сообщений: 23
|
Вырезать сэмпл из mp3 файла
Всем привет.
Можно ли вырезать часть звукового файла и сохранить его ? Т.е я могу загрузить mp3-шку и мне надо вырезать из него определённую часть. Я думал, что может как-то можно через byteArray это сделать, но не знаю как. Это вообще возможно ? |
|
|||||
Это возможно. Существуют уже готовые библиотеки. Ищите.
|
|
|||||
Регистрация: Nov 2010
Сообщений: 23
|
Я вот это и делаю. Даже на это форуме есть подобные темы, но ответа жалко нет.
|
|
|||||
Sound.extract
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Nov 2010
Сообщений: 23
|
Ну это понятно. Тут дело в том, чтобы применить это дело правильно. Примерчик бы не помешал.
|
|
|||||
Регистрация: Nov 2010
Сообщений: 23
|
Получилось..))
Если кому-то интересно, то вкратце опишу так: 1. Через urlloader загружаем Mp3, как бинарные данные 2. Определяем битрейт (тут возможно 2 варианта, я разобрался только с постоянным битрейтом). Есть либа audiofx, там можно додумать, как вытащить битрейт. 3. если битрейт 256кбит/сек, то например 10-я секунда это (256*1000)/8*10. Пишем цикл с 10 по 20 сек. for(var i:Number= (256*1000)/8*10;i< (256*1000)/8*20;i++) { //Заранее создаётся новый byteArray.И в него пихаем данные newArr[k] = curArr[i]; k++; //k изначально равно 0 } Остался один вопрос. Как получить битрейт в данной секунде ? |
|
|||||
битрейт в каждой секунде получать незачем, ведь если использовать SampleDataEvent.SAMPLE_DATA, то он сам посебе получается. Пример: загружается файл 350КБ звука и можно вырезать из него каждую десятую часть.
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);//замедлние } } } } ПС: Уменьшите громкость колонок, РОК... Кнопки стоп НЕТУ.
__________________
Гоночка |
Часовой пояс GMT +4, время: 04:45. |
|
« Предыдущая тема | Следующая тема » |
|
|