![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2005
Сообщений: 106
|
Здравствуйте,
я с помощью FileReference гружу mp3 файл и отправляю data на серверный скрипт. Здесь у меня все работает и сохраняет. Не подскажите, как мне правильно воспользоваться sound.extract чтоб я смог сохранить диаграмму или набор байтов, который позволит мне потом ее нарисовать? Добавлено через 7 часов 18 минут Я смогу создать sound из fileReference.data или мне этот mp3 после сохранения на сервер опять загружать во флеш чтоли? |
|
|||||
|
http://etcs.ru/blog/as3/wav_player/ может это?
|
|
|||||
|
https://gist.github.com/218226
Добавлено через 32 секунды обратите внимаение на метод createSWFFromMP3
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Aug 2005
Сообщений: 106
|
Спасибо,
первая ссылка что-то mp3 не захотела загружать, а вот createSWFFromMP3 - похоже оно, буду пробовать Добавлено через 1 час 19 минут А не растолкуете, как дальше мне быть? На сайте silin.su видел примеры, но все-таки, если мне нужно прорисовать полностью диаграмму для mp3 файла, как мне использовать sound.extract? Добавлено через 24 часа 8 минут Пользуясь несколькими примерами в сети получилось сделать показ диаграммы звука на EnterFrame событие вот кусок кода private function enterFrameHandler (event:Event):void { // get bytes of 1024 samples bytes.position = 0; sound.extract (bytes, 1024, channel.position * 44.1); // get samples of left channel bytes.position = 0; while (bytes.bytesAvailable > 0) { samples [int (bytes.position / 8)] = bytes.readFloat (); bytes.readFloat (); } // analyze samples fft.analyze (samples); // fft.magnitudes contain full spectrum, we want 1st 5KHz var limitHz:Number = 5000; var i:int, n:int = fft.magnitudes.length * limitHz / (44100 / 2), w:int = 800 / n; // draw spectrum drawArea.graphics.clear (); drawArea.graphics.lineStyle (); drawArea.graphics.beginFill (0); for (i = 0; i < n; i++) { drawArea.graphics.drawRect (w * i, 50, w, 400 * fft.magnitudes [i]); } drawArea.graphics.endFill (); // draw 1KHz ticks var ticksStep:Number = 1000; drawArea.graphics.lineStyle (0); for (i = 0; i < limitHz / ticksStep + 1; i++) { drawArea.graphics.moveTo (w * (ticksStep / limitHz * n * i), 50); drawArea.graphics.lineTo (w * (ticksStep / limitHz * n * i), 45); } } А если мне все сразу нужно показать? Я пробую аналогично один раз вызвать эту функцию, только пишу но не работает. Может кто сталкивался, подскажет, как правильно? Добавлено через 24 часа 24 минуты Хотя я его до этого с помощью FileReference загрузил, и у меня есть data, может тогда extract и не нужен? |
|
|||||
|
extact нужен, потому как распарсить mp3 вручную врядли получиться
а если скормить его саунду, то у него через extact можно взяьт все что нужно: public class Main extends Sprite { private var sound:Sound; public function Main():void { sound = new Sound(); sound.load(new URLRequest("test.mp3")); sound.play(); sound.addEventListener(Event.COMPLETE, sound_complete); } private function sound_complete(e:Event):void { //ByteArray сэмплов var ba:ByteArray = new ByteArray(); var soundLength:int = (sound.length / 1000) * 44100; sound.extract(ba, soundLength); // массивы всех сэмплов саунда в Namber'ах var samplesLength:int = ba.length / 8; var arrLeft:Array = []; var arrRight:Array = []; ba.position = 0; for (var i:int = 0; i < samplesLength; i++) { arrLeft.push(ba.readFloat()); arrRight.push(ba.readFloat()); } // что с ними такими здоровыми делать не ясно // например нарисуем левый канал через каждую 10000-ную точку // остальные 9999 - баласт, // т.е. лучше видимо сразу из ByteArray брать только то что надо, не загоняя в массив var tY:Number = 200; var kY:Number = 100; graphics.lineStyle(1, 0xFF0000); graphics.moveTo(0, tY); var step:int = 1e4; for (var j:int = 0; j < arrLeft.length; j+=step) { var dX:Number = j / step; var dY:Number = kY * arrLeft[j]; graphics.lineTo(dX, tY + dY); } } } |
|
|||||
|
Регистрация: Aug 2005
Сообщений: 106
|
конкретное спасибо большое
|
![]() |
![]() |
Часовой пояс GMT +4, время: 05:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|