Flash, Adobe, HTML and standards
I saw @mesh tweet and read John’s post
Funny I had the same discussion with other friends two days ago….
And now i want to make it short
I don’t think the flashplayer causes crashes. But bad written(programmed) swf do.
With every technology you can do good things and bad ones. Sure I’ve seen really scary code but I’ve also seen great shitt.
When flash gets an own process because a religion goes 64 bit it’s ok !
I don’t know if flash is something good for the web but flash has given me the chance to run great stuff inside the Browser and publish it all over the world. Before any other technology.I don’t care if open standard or not. Today I read “75% of Linux Code Written by Paid Developers”….. grrr I needed this article two days earlier !
Well I think we need both, open stuff on the one hand and proprietary on the other. It’s great that Adobe does a lot of open stuff too. In the last Month I wrote code with text wrangler and compiled by command line. (no costs)
An other point was Adobe’s power in the video market. And I’ve to admit that’s a little scary for me too. But that’s an other discussion because in my point of few it deals more with the Omniture acquisition that with the player….
I also heard a lot of jokes about bad usability and that flash made websites poor.
– ???? -
I know so many Desktop shitt, come on !
But I’ve to admit sometimes programming flash does really suck, that’s when you spend some time searching on adobe’s jira for a problem’s answer….
And I’ve to laugh when sometimes an answer open’s a door to do some bad things. But I’m not 14 any more ^^. But when meeting old friends on irc we are all 14 again.
And If I would be 14 again I would hate flash hate designers and hate the web. Because when people started to do business it started to suck more and more. All those good things gone.
But at the end this is more a philosophic topic.
I don’t want to say that flash haters are 14. I want to say, somewhere this 14 year old kid is still alive and special when meeting old friends and make stupid jokes
Updateted : How to write Jpeg || Png Files in Swf Files
Today I wrote a new Class using swf assist for writing Jpeg or PNG files to a SWF File.
Now you could use :
1 _imagePro = new ImageToSwfProcessor();2 _imagePro.addEventListener(ImageProcessorEvent.NEXT_FILE, handleNextFile, false, 0, true);3 _imagePro.writeSwfFromImage(image:*,quality : int ,"png" || "jpeg" : String, framecount : int);
Method wirteSwfFromImage has some Parameters.
1) The decent File as swf, jpeg or what else.
2) quality is used if image is jpeg or swf.
3) type is used to determ the current file. Only png or jpeg are used
4) framecount used to increment frames.
The Listener is called if you have many Files to store in a swf file. After each swf writing Process that listener would dispatch.
Here is that one.
001 /**002 * Copyright 04.09.2009 Christian Sobolewski003 *004 * usage : com.cs.imageProcessor005 *006 * Parameters:007 *008 * Version:009 *010 * History:011 *012 * com.cs.imageProcessor.ImageProcessor013 * @author Christian Sobolewski014 */015 package com.cs.imageProcessor {016 import com.adobe.images.JPGEncoder;017 import com.adobe.images.PNGEncoder;018 import com.cs.logging.SOS;019 020 import org.libspark.swfassist.io.ByteArrayOutputStream;021 import org.libspark.swfassist.swf.io.SWFWriter;022 import org.libspark.swfassist.swf.io.WritingContext;023 import org.libspark.swfassist.swf.structures.FillStyle;024 import org.libspark.swfassist.swf.structures.FillStyleTypeConstants;025 import org.libspark.swfassist.swf.structures.SWF;026 import org.libspark.swfassist.swf.structures.ShapeWithStyle;027 import org.libspark.swfassist.swf.structures.StraightEdgeRecord;028 import org.libspark.swfassist.swf.structures.StyleChangeRecord;029 import org.libspark.swfassist.swf.tags.DefineBitsJPEG3;030 import org.libspark.swfassist.swf.tags.DefineShape;031 import org.libspark.swfassist.swf.tags.PlaceObject2;032 import org.libspark.swfassist.swf.tags.SetBackgroundColor;033 import org.libspark.swfassist.swf.tags.ShowFrame;034 035 import flash.display.BitmapData;036 import flash.display.Sprite;037 import flash.events.Event;038 import flash.events.EventDispatcher;039 import flash.events.IOErrorEvent;040 import flash.events.MouseEvent;041 import flash.events.ProgressEvent;042 import flash.events.SecurityErrorEvent;043 import flash.net.FileReference;044 import flash.utils.ByteArray;045 046 /**047 * @author Christian Sobolewski048 */049 public class ImageToSwfProcessor extends EventDispatcher {050 051 private var _swf : SWF;052 private var _bytes : ByteArray;053 private var _fileRef : FileReference;054 private var _name : String;055 private var _eof : Sprite;056 057 public function ImageToSwfProcessor() {058 }059 060 public function writeSwfFromImage(image : *, quality : int, type : String , frames : int = 1, bgColor : int = 0x000066) : BitmapData {061 _name = image.name.split(","+type).join("").toString();062 063 var w : Number = image.width;064 var h : Number = image.height;065 066 _swf = new SWF();067 _swf.header.version = 9;068 _swf.header.isCompressed = false;069 _swf.header.frameSize.xMax = image.width;070 _swf.header.frameSize.yMax = image.height;071 _swf.header.frameRate = 1;072 _swf.header.numFrames = 1;073 074 var bg : SetBackgroundColor = new SetBackgroundColor();075 bg.backgroundColor.fromUint(bgColor);076 _swf.tags.addTag(bg);077 078 var bmd : BitmapData;079 080 if (type == "png") {081 bmd = new BitmapData(w, h, true, 0x000000ff);082 bmd.draw(image);083 _bytes = PNGEncoder.encode(bmd);084 } else {085 bmd = new BitmapData(w, h, false);086 bmd.draw(image);087 _bytes = new JPGEncoder(quality).encode(bmd);088 }089 090 // SOS.alert("image.width = " + image.width);091 // SOS.alert("image.height= " + image.height);092 093 for (var i : uint = 0;i < frames;++i) {094 095 var defineJPEG : DefineBitsJPEG3 = new DefineBitsJPEG3();096 defineJPEG.characterId = (i * 2) + 1;097 defineJPEG.jpegData = _bytes;098 099 _swf.tags.addTag(defineJPEG);100 101 var defineShape : DefineShape = new DefineShape();102 defineShape.shapeId = (i * 2 + 1) + 1;103 defineShape.shapeBounds.xMax = w;104 defineShape.shapeBounds.yMax = h;105 var fillStyle : FillStyle = new FillStyle();106 fillStyle.fillStyleType = FillStyleTypeConstants.CLIPPED_BITMAP_FILL;107 fillStyle.bitmapId = (i * 2) + 1;108 fillStyle.bitmapMatrix.hasScale = true;109 fillStyle.bitmapMatrix.scaleX = 0;110 fillStyle.bitmapMatrix.scaleY = 0;111 var shape : ShapeWithStyle = defineShape.shapes;112 shape.fillStyles.fillStyles.push(fillStyle);113 var r1 : StyleChangeRecord = new StyleChangeRecord();114 r1.fillStyle0 = 1;115 r1.moveDeltaX = 0;116 r1.moveDeltaY = 0;117 r1.stateFillStyle0 = true;118 r1.stateMoveTo = true;119 var r2 : StraightEdgeRecord = new StraightEdgeRecord();120 r2.verticalLine = true;121 r2.deltaY = h;122 var r3 : StraightEdgeRecord = new StraightEdgeRecord();123 r3.horizontalLine = true;124 r3.deltaX = w;125 var r4 : StraightEdgeRecord = new StraightEdgeRecord();126 r4.verticalLine = true;127 r4.deltaY = -h;128 var r5 : StraightEdgeRecord = new StraightEdgeRecord();129 r5.horizontalLine = true;130 r5.deltaX = -w;131 shape.shapeRecords.push(r1, r2, r3, r4, r5);132 133 _swf.tags.addTag(defineShape);134 135 var placeObject : PlaceObject2 = new PlaceObject2();136 placeObject.characterId = (i * 2 + 1) + 1;137 placeObject.depth = i + 1;138 placeObject.hasCharacter = true;139 140 _swf.tags.addTag(placeObject);141 _swf.tags.addTag(new ShowFrame());142 _swf.header.numFrames++;143 }144 145 146 var swfBytes : ByteArray = new ByteArray();147 148 var wc : WritingContext = new WritingContext();149 // wc.length = 5000;150 151 var write : SWFWriter = new SWFWriter();152 write.writeSWF(new ByteArrayOutputStream(swfBytes), wc, _swf);153 154 _fileRef = new FileReference();155 _fileRef.addEventListener(Event.COMPLETE, handleCompleteEvent, false, 0, true);156 _fileRef.addEventListener(ProgressEvent.PROGRESS, handleProgressEvent, false, 0, true);157 _fileRef.addEventListener(Event.CANCEL, handleCancelEvent, false, 0, true);158 _fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityEvent, false, 0, true);159 _fileRef.addEventListener(IOErrorEvent.IO_ERROR, onSaveError, false, 0, true);160 _fileRef.addEventListener(Event.OPEN, onOpen, false, 0, true);161 162 _fileRef.save(swfBytes, _name + ".swf");163 164 /**165 * strange things happen here. if you dont activate Event.ENTER_FRAME no Event.COMPLETE will fire !!!166 */167 168 _eof = new Sprite();169 _eof.addEventListener(Event.ENTER_FRAME, handleEof, false, 0, true);170 171 return bmd;172 }173 174 private function handleEof(event : Event) : void {175 if(_fileRef.data) SOS.alert(_fileRef.data);176 }177 178 private function onOpen(event : Event) : void {179 // SOS.alert('onOpen: ' + (onOpen));180 }181 182 private function handleClick(event : MouseEvent) : void {183 // SOS.alert('handleClick: ' + (handleClick));184 }185 186 private function onSaveError(event : IOErrorEvent) : void {187 // SOS.alert('onSaveError: ' + (onSaveError));188 }189 190 private function handleSecurityEvent(event : SecurityErrorEvent) : void {191 // SOS.alert('handleSecurityEvent: ' + (handleSecurityEvent));192 }193 194 private function handleCancelEvent(event : Event) : void {195 // SOS.alert("cancel event");196 }197 198 private function handleProgressEvent(event : ProgressEvent) : void {199 SOS.alert(event.bytesLoaded + " | " + event.bytesTotal);200 }201 202 private function handleCompleteEvent(event : Event) : void {203 if (_eof.hasEventListener(Event.ENTER_FRAME)) _eof.removeEventListener(Event.ENTER_FRAME, handleEof);204 dispatchEvent(new ImageProcessorEvent(ImageProcessorEvent.NEXT_FILE))205 // SOS.alert("save complete");206 }207 }208 }209
Palm Pre mit Vodafone und Daten Flat
update:
” ich habe eben noch mal mit Vodafone telef. aufgrund, das die änderung in wap.vodafone.de
nur GPRS empfang ergab. Und das ist auch richtigt ! Siehe http://www.vodafone.de/konfig
aber GPRS suckt ja ordentlich. Für Umts braucht man einen Vodafone Daten Tarif was ich auch hab’
also sind keine Änderungen nötig !!! Die Änderung, die unten beschrieben wird gilt nur für den Vodafone Life! Tarif !!
”
Ich habe mir gestern das Pre besorgt, schick schick aber ich habe Vodafone mit Datenflat bedeutet,
das man eine kleine Einstellung beim Pre vornehmen muss um nicht in die Kostenfalle zu tappen.
Aber Achtung – bitte vorher bei Vodafone anrufen und sich nach dem eigenen Tarif erkundigen.
Aber Achtung – alle änderungen die nun folgen sind auf eigene Gefahr !!
Das mini Tutorial erfordert schon fortgeschrittene Kenntnisse ansonsten könnt’s eng werden.
1. Root
Einen guten howto für den Root Zugang habe ich hier gefunden Palm Pre Root Zugang also dann erstma “bis später …”
2. APN
man muss den richtigen APN Zugangspunkt eingeben dafür habe ihr jetzt ja auch den root zugang. Also
putty öffnen und in die console
1 cp /usr/lib/luna/CarrierNetworkSettings.db3 /media/internal
damit habt ihr die Datei CarrierNetworkSettings.db3 in einem für euch zugängliches Verzeichnis kopiert.
Jetzt einfach über den usb Modus die Datei auf euren Rechner übertragen.
Die Datei ist eigentlich eine kleine Datenbank des Typs Sqlite. Dort befinden sich die APN Zugänge.
Achtung ! – Eine Sicherungskopie der CarrierNetworkSettings.db3 anlegen. Falls was schief geht …..
Jetzt müssen wir diese Datei editieren. Ich persönlich finde den sqlite-manager am Besten !! Plattform unabhängig und klein wie Sqlite. Also installieren.
Jetzt habt ihr im FF unter Extras den sqlite-manager damit mach ihr die CarrierNetworkSettings.db3 auf dort müsst ihr unter
com_palm_data_carriernetworksettings_DataConnectionSettings mal die suche öffnen und auf das Feld APN contains web
eingeben.

dort das feld web.vodafone.de mit wap.vodafone.de ersetzen und fertig.
Zur Sicherheit könnt Ihr noch die Tabelle durchsuchen ob da noch irgendwo web steht. Dies sollte nicht der Fall sein.
Mir ist von Vodafone gesagt worden, das die Flatrate nur für den APN wep gilt. Sollte man über web gehen wird’s teuer !!
Hier könnt ihr aber auch noch mit der Hotline reden über mehr Info’s bin ich auch dankbar.
!! Bitte über den Quick check im vodafone Portal mal ständig den Rechnungsstatus checken !!
So jetzt müssen wir die CarrierNetworkSettings.db3 irgendwie wieder zurück schaufeln dafür nutze ich
Wenn WebOS Quick Install bei euch läuft müsst ihr nur auf Tools -> Sendfile gehen und die überarbeitete db3 in die Verzeichnisse
&
1 /usr/lib/luna/
kopieren.
1 /var/luna/data/
das wars’.
Schon 24h um und keine Kosten zu sehen.
How to save a SWF file at runtime with swfassist and FileReference
Here`s a little class to build a swf file at runtime with 2 images. Just an example :
Here you could find the swfassist framework. Unfortunately its not documented very well.
Just check out the svn for some examples.
JPGEncoder click here
I made a swf file with 20 frames, each frame the shown bitmap is switched. The swf could be saved locally on your Pc.
001 002 /**003 * Copyright 31.08.2009 Christian Sobolewski004 *005 * usage :006 *007 * Parameters:008 *009 * Version:010 *011 * History:012 *013 * SwfWrite014 * @author Christian Sobolewski015 */016 package {017 import com.adobe.images.JPGEncoder;018 019 import org.libspark.swfassist.io.ByteArrayOutputStream;020 import org.libspark.swfassist.swf.io.SWFWriter;021 import org.libspark.swfassist.swf.io.WritingContext;022 import org.libspark.swfassist.swf.structures.FillStyle;023 import org.libspark.swfassist.swf.structures.FillStyleTypeConstants;024 import org.libspark.swfassist.swf.structures.SWF;025 import org.libspark.swfassist.swf.structures.ShapeWithStyle;026 import org.libspark.swfassist.swf.structures.StraightEdgeRecord;027 import org.libspark.swfassist.swf.structures.StyleChangeRecord;028 import org.libspark.swfassist.swf.tags.DefineBitsJPEG2;029 import org.libspark.swfassist.swf.tags.DefineShape;030 import org.libspark.swfassist.swf.tags.PlaceObject2;031 import org.libspark.swfassist.swf.tags.RemoveObject2;032 import org.libspark.swfassist.swf.tags.SetBackgroundColor;033 import org.libspark.swfassist.swf.tags.ShowFrame;034 035 import flash.display.BitmapData;036 import flash.display.DisplayObject;037 import flash.display.Sprite;038 import flash.geom.Rectangle;039 import flash.net.FileReference;040 import flash.utils.ByteArray;041 042 /**043 * @author Christian Sobolewski044 */045 public class SwfWrite extends Sprite {046 047 private var _swf : SWF;048 049 [Embed(source="test.jpg")]050 public var imgCls : Class;051 052 [Embed(source="logo.jpg")]053 public var imgCls2 : Class;054 055 private var _pixels : ByteArray;056 private var _pixelsOne : ByteArray;057 private var _data : Array;058 private var _maxLength : uint;059 060 public function SwfWrite() {061 062 _maxLength = 20;063 064 var imgCls : DisplayObject = new imgCls();065 var imgCls2 : DisplayObject = new imgCls2();066 067 _swf = new SWF();068 _swf.header.version = 9;069 _swf.header.frameSize.xMax = 1024;070 _swf.header.frameSize.yMax = 768;071 _swf.header.frameRate = 2;072 _swf.header.numFrames = 1;073 074 var bgColor : SetBackgroundColor = new SetBackgroundColor();075 bgColor.backgroundColor.fromUint(0x000066);076 _swf.tags.addTag(bgColor);077 078 var bmd : BitmapData = new BitmapData(640, 480, false);079 bmd.draw(imgCls);080 081 _pixelsOne = new JPGEncoder(50).encode(bmd);082 083 var bmd2: BitmapData= new BitmapData(640, 480, false);084 bmd2.draw(imgCls2);085 086 _pixels = new JPGEncoder(50).encode(bmd2);087 _data = [];088 var q : Number;089 for (var i : int = 0;i < _maxLength;i++) {090 q = i % 2;091 if (q == 0) {092 _data.push(_pixelsOne);093 } else {094 _data.push(_pixels);095 }096 }097 098 test();099 100 101 var bytes : ByteArray = new ByteArray();102 var wc : WritingContext = new WritingContext();103 wc.length = 5000;104 105 var write : SWFWriter = new SWFWriter();106 write.writeSWF(new ByteArrayOutputStream(bytes), wc, _swf);107 108 var fileRef : FileReference = new FileReference();109 fileRef.save(bytes, "writen" + Math.random() + 100 + ".swf");110 }111 112 private function test() : void {113 for (var i : uint = 0;i < _maxLength;++i) {114 // var file:File = File(files[i]);115 116 var defineJPEG : DefineBitsJPEG2 = new DefineBitsJPEG2();117 defineJPEG.characterId = (i * 2) + 1;118 119 // var fileStream:FileStream = new FileStream();120 // fileStream.open(file, FileMode.READ);121 // fileStream.readBytes(defineJPEG.jpegData);122 // fileStream.close();123 // fileStream = null;124 125 defineJPEG.jpegData = _data[i];126 127 _swf.tags.addTag(defineJPEG);128 129 var defineShape : DefineShape = new DefineShape();130 defineShape.shapeId = (i * 2 + 1) + 1;131 defineShape.shapeBounds.xMax = 500;132 defineShape.shapeBounds.yMax = 375;133 var fillStyle : FillStyle = new FillStyle();134 fillStyle.fillStyleType = FillStyleTypeConstants.CLIPPED_BITMAP_FILL;135 fillStyle.bitmapId = (i * 2) + 1;136 fillStyle.bitmapMatrix.hasScale = true;137 fillStyle.bitmapMatrix.scaleX = 20;138 fillStyle.bitmapMatrix.scaleY = 20;139 var shape : ShapeWithStyle = defineShape.shapes;140 shape.fillStyles.fillStyles.push(fillStyle);141 var r1 : StyleChangeRecord = new StyleChangeRecord();142 r1.fillStyle0 = 1;143 r1.moveDeltaX = 50;144 r1.moveDeltaY = 50;145 r1.stateFillStyle0 = true;146 r1.stateMoveTo = true;147 var r2 : StraightEdgeRecord = new StraightEdgeRecord();148 r2.verticalLine = true;149 r2.deltaY = 375;150 var r3 : StraightEdgeRecord = new StraightEdgeRecord();151 r3.horizontalLine = true;152 r3.deltaX = 500;153 var r4 : StraightEdgeRecord = new StraightEdgeRecord();154 r4.verticalLine = true;155 r4.deltaY = -375;156 var r5 : StraightEdgeRecord = new StraightEdgeRecord();157 r5.horizontalLine = true;158 r5.deltaX = -500;159 shape.shapeRecords.push(r1, r2, r3, r4, r5);160 161 _swf.tags.addTag(defineShape);162 163 var placeObject : PlaceObject2 = new PlaceObject2();164 placeObject.characterId = (i * 2 + 1) + 1;165 placeObject.depth = i + 1;166 placeObject.hasCharacter = true;167 168 _swf.tags.addTag(placeObject);169 _swf.tags.addTag(new ShowFrame());170 _swf.header.numFrames++;171 172 // for (var fadeIn:uint = 0; fadeIn < 20; ++fadeIn) {173 // var fadeObject : PlaceObject2 = new PlaceObject2();174 // fadeObject.depth = i + 1;175 // fadeObject.isMove = true;176 // fadeObject.hasColorTransform = true;177 // fadeObject.colorTransform.hasMultiplication = true;178 // fadeObject.colorTransform.redMultiplication = 256;179 // fadeObject.colorTransform.greenMultiplication = 256;180 // fadeObject.colorTransform.blueMultiplication = 256;181 // fadeObject.colorTransform.alphaMultiplication = (((1.0 / 20) * 20) * 256);182 // _swf.tags.addTag(fadeObject);183 // _swf.tags.addTag(new ShowFrame());184 // _swf.header.numFrames++;185 // }186 //187 // if (i > 0) {188 // var removeObject : RemoveObject2 = new RemoveObject2();189 // removeObject.depth = (i - 1) + 1;190 // _swf.tags.addTag(removeObject);191 // }192 193 // for (var n:uint = 0; n < len; ++n) {194 // _swf.tags.addTag(new ShowFrame());195 // _swf.header.numFrames++;196 // }197 }198 }199 }200 }201
Securimage PHP Captcha AS3 Class

This CAPTCHA Class uses Securimage. You can get it here
Securimage is an open-source free PHP CAPTCHA script for generating complex images and CAPTCHA codes to protect forms from spam and abuse…
show.php
1 2 include 'securimage.php';3 $img = new securimage();4 $img->show();5
To load the created image, just write an URLLoader than a Loader, that loads the URLLoader data ….
Captcha.as
01 02 public class Captcha extends Sprite03 {04 private var _loader:URLLoader;05 private var _captchadata:BitmapData;06 private var _captcha:Bitmap;07 private var _cont:Sprite;08 09 public function Captcha()10 {11 this._cont = new Sprite();12 this._cont.useHandCursor = true;13 this._cont.buttonMode = true;14 15 this._loader = new URLLoader();16 this._loader.dataFormat = URLLoaderDataFormat.BINARY;17 var url:String = "show.php";18 var urlReq:URLRequest = new URLRequest(url);19 20 this._loader.addEventListener(Event.COMPLETE, completeHandler);21 this._loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);22 this._loader.load(new URLRequest(url));23 }24 private function ioErrorHandler(e:IOErrorEvent):void25 {26 //SOS.alert(_e.toString());27 }28 private function completeHandler(e:Event):void29 {30 this._loader.removeEventListener(Event.COMPLETE, completeHandler);31 this._loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);32 33 var myLoader:Loader = new Loader();34 myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, createCaptcha);35 36 var byteArr:ByteArray = new ByteArray();37 byteArr = this._loader.data;38 39 if(byteArr.length != 0) { myLoader.loadBytes(this._loader.data); }40 else { /* SOS.alert("error"); */ }41 }42 private function createCaptcha(e:Event):void43 {44 this._captchadata = new BitmapData(175, 45, false, 0xFFFFFF); //sizes of secureimage.php ~ Line 8945 this._captchadata = (e.target.content).bitmapData;46 47 this._captcha = new Bitmap(this._captchadata, "auto", true);48 this._captcha.x = 920;49 this._captcha.y = 92;50 this._cont.addChild(this._captcha);51 this._cont.addEventListener(MouseEvent.MOUSE_DOWN , renew);52 this.addChildAt(this._cont,0);53 }54 private function renew(_me:MouseEvent):void55 {56 this._cont.removeChildAt(0);57 var url:String = "show.php?"+Math.random()*100;58 var urlReq:URLRequest = new URLRequest(url);59 60 this._loader.addEventListener(Event.COMPLETE, completeHandler);61 this._loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);62 this._loader.load(new URLRequest(url));63 64 }65 }66
I hard-coded some dimensions inside the class, and some other ugly things, so feel free to change for your needs.
But don’t forget to put the Math.random() after the URI to refresh the captcha, this can avoid caching issues.
You can see this class Working here. Click on the share Btn.
Sure, this class can be used to load nearly all types of binary image data ….
Copy to Clipboard” functionality using JavaScript and Flash
In my oppinion “copy to clipboard” buttons don’t have a real
usability benefit. The only thing they do is open new security holes.
Also the need to be updated when Browsers or Plugins change.
In the Past there was an approach using Flash, but since Player 10
this does not work any more. Sure there are new clipboard function
in Player 10 but what about the users < FP 10 ?
At the Moment there is a Js Library called Zero Clipboard which uses
Clickjacking to achieve the copy…..
Silentium @ AZ Aachen Live Mix

This was recorded “@home” in Aachen during a party at AZ
one of my n1 locations.
I don’t really have a play list, but feel free to ask !
Silentium
Live Mix fall 2008 Hamburg

This was recorded last year in Hamburg. Really amazing city !
Silentium
Play list:
Network (youtube version http://www.youtube.com/watch?v=MTN3s2iVKKI)
Ed Rush & Optical / Sonic & Silver
Future Signal Death Mask
Prolix Free Fall
Pacman (The Upbeats RMX)
j.majik & Wickaman crazyworld
Subfocus Timewarp
Callide – Nuclear Warhead / Pure Dubplate
Markman & Tsunami the furyan
Chris.su Double Axle
Vicious Circle & Nocturnal Welcome to Shanktown VIP
Kali Tokyo
JB react
Regula Junked up
Silver vs Simian We are your Friends (Silver RMX)
Nero vs Klaxons it’s not over
French Kiss
Smack my Bitch up (subfocus rmx)
Live audio visualization in flash pt I

Just for a short overview,
I sometimes play drum and bass on parties. To improve the audience experience, I use flash to visualize the digital culture I’m living. For this, I wrote some applications in flash and air. These apps are more experiments to find out how my sound can influence visual media to generate a special atmosphere.
Sometimes some people notice what I am doing or know what is happening. Therefore, questions came up and it is difficult to have a productive conversation at a party….
So why flash?
I think the main reason was that I wanted to experiment with Flash and later on with the new features of the player 10.
So let us get started.
The first step to reach the stuff I had in mind was to grab the audio signal. I have a line-in, so let us take a look what possibilities I have in flash to use this. I found the flash.media package providing some classes to access the microphone and the sound spectrum. I found out that it was not really easy to get apply the computeSpectrum method on the microphone. So I thought. O.K. I’ll code a Java app that catches the audio signal, computes spectrum and send this data as bytearray to flash. However, this was not very cool, even having some java code, I could re use and I wanted to stay with flash.
I explored the possibilities and none of them were easy and latency efficient for my purposes. I really needed some time to find the solution and it was sooo simple !
Setup a streaming Server on your computer. My choice after some tests was Icecast2 here is a sample of my config:
01 02 <icecast>03 <limits>04 <sources>2</sources>05 <queue-size>0</queue-size>06 <burst-on-connect>1</burst-on-connect>07 <burst-size>0</burst-size>08 </limits>09 <authentication>10 <source-password>hackme</source-password>11 <relay-password>hackme</relay-password>12 <admin-user>admin</admin-user>13 <admin-password>hackme</admin-password>14 </authentication>15 16 <hostname>localhost</hostname>17 <listen-socket>18 <port>6666</port>19 </listen-socket>20 <fileserve>1</fileserve>21 <paths>22 <logdir>./logs</logdir>23 <webroot>./web</webroot>24 <adminroot>./admin</adminroot>25 <alias source="/" dest="/status.xsl">26 </alias>27 <logging>28 <accesslog>access.log</accesslog>29 <errorlog>error.log</errorlog>30 <loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->31 </logging></paths></icecast>
Setup a streaming client on your computer like Edcast and choose the right audio in.
When you get this programs running you will have a streaming server running under the following URL:
or if you are using shoutcast :
….. /;stream.nsv
So now, you can catch this audio stream from your flash app like this:
1 2 this._sfx = new Sound();3 var req:URLRequest = new URLRequest("http://localhost:6666/stream");// /;stream.nsv4 var context:SoundLoaderContext = new SoundLoaderContext(0, false);5 this._sfx.load(req, context);6 this._channel = this._sfx.play();7 SoundMixer.bufferTime=0; // works for me locally8
Now you can get the spectrum over an onEnterFrame Event with SoundMixer.computeSpectrum. I am going to explain this in part II