ASP NET, NET Framework, MONO, SQL, Visual Studio | Professional Programs | Программист Еремин В.В.
(Flex) Flex (2011 год)

Simple Freeware OpenSource Flex Player for Web (one sound).

To view this page ensure that Adobe Flash Player version 10.0.0 or greater is installed.

В прошлом году мне опять попался проект с флеш-плеером (http://releasebeat.asp-net.ru/). Я сделал этот непростой проект на ASP.NET полностью за вычетом одной малости - согласно нашей договоренности - заказчик сайта должен был флеш-плеер заказывать самостоятельно на стороне (ибо в 2010-м году я неготов был тратить свое время неэффективно и писать на флеше лично). Первая дефка-флешерша (как оказалось) умеет делать только верстки на флеше и добавить Sound.play на кнопку ей было уже не по силам. Потом заказчик нашел нужный ему у другого флешера плеер за 30 тысяч и за месяц работы, потом за 20 тысяч и за две недели, потом нашел какого-то третьего флешера. Потом появился четвертый. Он перевел предоплату сначала одному флешеру, потом другому, потом начал договариваться с третьим. И с каждым флешером мне пришлось общаться, обьяснять им специфический интерфейс между сайтом и плеером. На очередном флешере (который так ничего и не сделал) - мое терпение от общения с флешерами лопнуло. Я описал письменно интерфейс между сайтом и плеером и четветому флешеру я отдал описание и весь сайт целиком с тестовым плеером (который я тупо скачал из инета и на котором отлаживал сайт). Этот проект был для меня той самой последней каплей, после которой я понял - делать сайты под ключ и надеятся на каких-то левых привлеченных людей, которые будут (или не будут) делать мега-важные компоненты любого сайта - так жить нельзя. Тем более это был уже наверное 20-й мой проект в котором я уперся в собственную тупость и неумение программировать на флеше. Я поднапрягся и с начала 2011-го года стал все больше и больше программировать на флеше - пока не добился беглого программирования на флеше почти с той же скоростью, как и на бейсике.

И вот результат перед вами. Это уже примерно мой пятидесятый проект на флеше (кое что из написанного за этот год я успел описать здесь. И этот Freeware OpenSource плеер я написал за одну неполную субботу (ну еще немного времени я потратил в воскресенье чтобы сделать это описние. Для сравнения - только на общение с тремя идиотами-флешерами в вышеописанном прошлогоднем проекте (которые по факту оказались все просто пустым местом) я потратил втрое больше времени. Ну я уже молчу про разницу в ощущениях от жизни - когда ты высшая форма человека разумного - программист и творец (и создаешь вот такие конфетки как этот плеер или другие мои проги) либо ты тратишь свое время на общение с пустым местом.


В процессе написания (поскольку времени я смог выделить оооочень мало) - я не стал писать адский универсальный плеер на все случаи жизни. Я сделал то, что успел сделать за один день - воспроизведение ОДНОГО аудио-ролика (справедливости ради заметим что это покрывает 90% потребностей в плеерах).

Но голова у меня беременна уже на десять плееров, например плеер - 600 слов из букваря Баррона. В голове вертится код AIR-приложения по типу VLC или Windows Media Player - которые в базе на SQLite запоминают расположения роликов на кампутере и потом можно просто открыть табличку и кликать по локейшенам роликов для вопроизведения. Можно сделать плееры с динамически настраиваемыми стилями, с натягиваемыми пользователями плеера скинами. Ну рассказывать все идеи пока не буду - голову просто рвет от плееров разной направленности. Будет еще свободное время - выложу еще пару-тройку Freeware OpenSource плееров, заточенных под разные задачи.


Итак, о коде. Поскольку времени было совсем мало - я не стал писать собственный визуализатор - а скачал визуализатор отсюда. Фактически взял первый попавшийся готовый OpenSource визуализатор, который нашел в гугле. Посмотрел как он управляется и прикрутил его к проекту. В принципе визуализатор Ben Stucki имеет кучу параметров - я мог бы их вытащить хотя бы в FlashVars или в управляющий XML. Можно было бы сделать управляемым хотя бы цвет плеера - но времени просто не хватило. Этот Freeware OpenSource плеер соответствует своему названию SIMPLE - то есть простой предельно: он белого цвета, умеет вопросизводить только один аудио-ролик, управлять эффектами из параметров нельзя, линейка с длительностью вопроизведения некликабельна, скины натягивать нельзя. Ну собственно нельзя практически ничего. Это с одной стороны плохо, но с другой стороны это БАЗОВЫЙ ШАБЛОН КОДА ПЛЕЕРА - шаблон который можно развивать с ЛЮБУЮ сторону.

Позиционирование я сначала хотел сделать относительное, чтобы плеер можно было масштабировать (примерно так - Как с помощью jQuery сделать флеш-ролик резиновым) - но потом я понял что времени не хватит закончить этот проект до вечера и сделал плеер фиксированного размера (но вам никто не мешает поменять размеры в дизайн-тайме). Поэтому вы можете видеть смешанную верстку - что-то спозиционировано аккуратно и относительно, потом вдруг что-то немотивированно спозиционировано абсолютно.

ID3 теги по полной программе протестировать я не успел. Слишком мало было у меня времени. Но первые пять точно работают (проверено), остальные (определенные в стандарте) - не уверен.


Ну вот вроде бы и все комментарии к моему коду:


   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
   3:                 xmlns:s="library://ns.adobe.com/flex/spark" 
   4:                 xmlns:xx="com.fusiox.ui.*"
   5:                 xmlns:mx="library://ns.adobe.com/flex/mx" 
   6:                 minWidth="620" minHeight="300" width="620" height="300" 
   7:                 applicationComplete="application1_applicationCompleteHandler(event)" backgroundColor="#FDF5E6">
   8:      
   9:      <fx:Script>
  10:          <![CDATA[
  11:              import flash.events.TimerEvent;
  12:              import flash.filters.BlurFilter;
  13:              import flash.media.Sound;
  14:              import flash.media.SoundLoaderContext;
  15:              import flash.media.SoundMixer;
  16:              import flash.net.URLLoader;
  17:              import flash.net.URLRequest;
  18:              import mx.controls.Alert;
  29:              import mx.effects.easing.Linear;
  20:              import mx.events.FlexEvent;
  21:              
  22:   
  23:              [Bindable]
  24:              public var effects:Array = new Array();
  25:              
  26:              private var Sound1:Sound;
  27:              private var SoundChannel1:SoundChannel;
  28:              private var SoundTranform1:SoundTransform;
  29:              private var Timer1:Timer = new Timer(50);
  30:              private var PausePosition:int;
  31:              private var params:Object;
  32:              
  33:              private var LoadTotal:int;
  34:              private var LoadCurrent:int;
  35:              private var PlayTotal:int;
  36:              private var PlayCurrent:int;
  37:              
  38:              protected function application1_applicationCompleteHandler(event:FlexEvent):void
  39:              {
  40:                  flash.media.SoundMixer.stopAll();
  41:                  SoundLocation.mask = SoundLocation_Mask;
  42:                  SoundID.mask = SoundID_Mask;
  43:      
  44:                  var LineColor:int=204;
  45:                  var FillColor:int=255;    
  46:                  
  47:                  effects.push(new Array("verticalBlur", verticalBlur));
  48:                  effects.push(new Array("horizontalBlur", horizontalBlur));
  49:                  effects.push(new Array("verticalScroll", verticalScroll));
  50:                  effects.push(new Array("horizontalScroll", horizontalScroll));
  51:                  effects.push(new Array("blueFade", blueFade));
  52:                  
  53:                  VisualPanel.setStyle("audioLineColor",LineColor);
  54:                  VisualPanel.setStyle("audioFillColor",FillColor);
  55:                  VisualPanel.addEventListener("beforeVisualization", effects[2][1]);
  56:                  VisualPanel.addEventListener("afterVisualization", effects[3][1]);
  57:                  
  58:                  
  59:                  params = mx.core.FlexGlobals.topLevelApplication.parameters;
  60:                  if (!params.hasOwnProperty("SoundUrl")) {
  61:                       // http://www.benstucki.net/mp3/tech_talk.mp3
  62:                       Alert.show("flashvars parameters 'SoundUrl' not set.");
  63:                           return;
  64:                        }
  65:                  else
  66:                  {
  67:                      SoundID.htmlText=params.SoundUrl;
  68:                      PlayOneSound(params.SoundUrl);
  69:                  }
  70:              }
  71:              
  72:              
  73:              private function PlayOneSound(SoundURL:String):void{
  74:              
  75:                  var Request1:URLRequest = new URLRequest(SoundURL);
  76:                  var Loader1:URLLoader = new URLLoader(Request1);
  77:                  Loader1.addEventListener(ProgressEvent.PROGRESS, UpdateProgress);
  78:                  Loader1.addEventListener(Event.COMPLETE, CompleteProgress);
  79:                  
  80:                  Sound1 = new Sound();
  81:                  
  82:                  Sound1.addEventListener(Event.COMPLETE, SoundComplete_Handler)            
  83:                  Sound1.addEventListener(IOErrorEvent.IO_ERROR,IOError_Handler);           
  84:                  Sound1.addEventListener(Event.ID3, ID3_Handler);                          
  85:                  Sound1.addEventListener(Event.OPEN,SoundOpen_Handler);                   
  86:                  Sound1.addEventListener(ProgressEvent.PROGRESS,SoundProgress_Handler);    
  87:                  Sound1.addEventListener(SampleDataEvent.SAMPLE_DATA,SampleData_Handler);  
  88:   
  89:                  Sound1.load(Request1);
  90:                  
  91:                  SoundChannel1 = Sound1.play();
  92:                  SoundChannel1.soundTransform = new SoundTransform (VolumeLevel.value, BallansLevel.value);
  93:                  
  94:                  Timer1.addEventListener(TimerEvent.TIMER, onTimer);
  95:                  Timer1.start();
  96:   
  97:                  ID3_marquee.duration = 30 * SoundID.width;
  98:                  ID3_marquee.xFrom = SoundID.width; 
  99:                  ID3_marquee.xTo = -SoundID.width;  
 100:                  ID3_marquee.play();
 101:                  
 102:                  AlertMessage(SoundURL);
 103:              }
 104:              
 105:              private function AlertMessage(Message:String) :void{
 106:                  SoundLocation.text=Message;
 107:                  URL_marquee.duration = 30 * SoundLocation.width;
 108:                  URL_marquee.repeatCount=1;
 109:                  URL_marquee.xFrom = SoundLocation.width; 
 110:                  URL_marquee.xTo = -SoundLocation.width;  
 111:                  URL_marquee.play();
 112:              }
 113:   
 114:              private function SoundOpen_Handler (e:Event):void{
 115:                  //load operation starts
 116:                  //AlertMessage ("SoundOpen:");
 117:              }
 118:              
 119:              private function SoundComplete_Handler (e:Event):void{
 120:                  //data has loaded successfully
 121:                  //AlertMessage("SoundComplete");
 122:              }
 123:              
 124:              private function IOError_Handler (e:Event):void{
 125:                  //input/output error occurs that causes a load operation to fail.
 126:                  AlertMessage("IOError")
 127:              }
 128:              
 129:              private function ID3_Handler (e:Event):void{
 130:                  //Sound ID3
 131:                  SoundID.htmlText="";
 132:                  Add_ID3_Tag(Sound1.id3.album);   //TALB
 133:                  Add_ID3_Tag(Sound1.id3.artist);  //TPE1
 134:                  Add_ID3_Tag(Sound1.id3.comment); //COMM
 135:                  Add_ID3_Tag(Sound1.id3.genre);   //TCON
 136:                  Add_ID3_Tag(Sound1.id3.songName);//TIT2
 137:                  Add_ID3_Tag(Sound1.id3.track);   //TRCK
 138:                  Add_ID3_Tag(Sound1.id3.year);    //TYER
 139:                  Add_ID3_Tag(Sound1.id3.TFLT); 
 140:                  Add_ID3_Tag(Sound1.id3.TIME);
 141:                  Add_ID3_Tag(Sound1.id3.TIT1);
 142:                  Add_ID3_Tag(Sound1.id3.TIT3);
 143:                  Add_ID3_Tag(Sound1.id3.TKEY);
 144:                  Add_ID3_Tag(Sound1.id3.TLAN);
 145:                  Add_ID3_Tag(Sound1.id3.TLEN);
 146:                  Add_ID3_Tag(Sound1.id3.TMED);
 147:                  Add_ID3_Tag(Sound1.id3.TOAL);
 148:                  Add_ID3_Tag(Sound1.id3.TOFN);
 149:                  Add_ID3_Tag(Sound1.id3.TOLY);
 150:                  Add_ID3_Tag(Sound1.id3.TOPE);
 151:                  Add_ID3_Tag(Sound1.id3.TORY);
 152:                  Add_ID3_Tag(Sound1.id3.TOWN);
 153:                  Add_ID3_Tag(Sound1.id3.TPE2);
 154:                  Add_ID3_Tag(Sound1.id3.TPE3);
 155:                  Add_ID3_Tag(Sound1.id3.TPE4);
 156:                  Add_ID3_Tag(Sound1.id3.TPOS);
 157:                  Add_ID3_Tag(Sound1.id3.TPUB);
 158:                  Add_ID3_Tag(Sound1.id3.TRDA);
 159:                  Add_ID3_Tag(Sound1.id3.TRSN);
 160:                  Add_ID3_Tag(Sound1.id3.TRSO);
 161:                  Add_ID3_Tag(Sound1.id3.TSIZ);
 162:                  Add_ID3_Tag(Sound1.id3.TSRC);
 163:                  Add_ID3_Tag(Sound1.id3.TSSE);
 164:                  Add_ID3_Tag(Sound1.id3.WXXX);
 165:              }
 166:   
 167:              private function Add_ID3_Tag (tag:Object):void{
 168:                  if (tag != null){ 
 169:                      if (tag != ""){
 170:                          SoundID.htmlText += " " + tag.toString();
 171:                      }
 172:                  }            }
 173:              
 174:              private function SoundProgress_Handler (e:Event):void{
 175:                  //data is received as a load operation progresses
 176:                  //trace ("SoundProgress: LoadTotal=" + LoadTotal + ", LoadCurrent=" + LoadCurrent+ ", PlayTotal=" + Sound1.length + ", PlayCurrent=" + SoundChannel1.position); 
 177:              }
 178:              
 179:              private function SampleData_Handler (e:Event):void{
 180:                  //player requests new audio data    
 181:                  //AlertMessage("requests new audio data")
 182:              }
 183:              
 184:              private function UpdateProgress(e:ProgressEvent ):void {
 185:                  //trace ("UpdateProgress: Total=" + e.bytesTotal + ", Loaded=" + e.bytesLoaded);
 186:                  LoadTotal=e.bytesTotal;
 187:                  LoadCurrent=e.bytesLoaded;
 188:              }
 189:              
 190:              public function onTimer(event:TimerEvent):void {
 191:                  //trace ("onTimer: LoadTotal=" + LoadTotal + ", LoadCurrent=" + LoadCurrent+ ", PlayTotal=" + Sound1.length + ", PlayCurrent=" + SoundChannel1.position); 
 192:                  PlayTotal = Sound1.length;
 193:                  PlayCurrent = SoundChannel1.position;
 194:                  SetProgressInfo();
 195:                  if (PlayTotal==PlayCurrent && PlayTotal!=0 && PlayCurrent!=0){
 196:                      //ролик завершен
 197:                      LoadProgress.label="";
 198:                      SoundLocation.text="";
 199:                      SoundID.htmlText="";
 200:                      ID3_marquee.stop();
 201:                      URL_marquee.stop();
 202:                      Timer1.stop();
 203:                  }
 204:              }
 205:              
 206:              private function CompleteProgress( e:Event ):void {
 207:                  //AlertMessage("CompleteProgress")
 208:              }
 209:              
 210:              private function blueFade( e:Event ):void {
 211:                  e.target.bitmapData.colorTransform( e.target.bitmapData.rect, new ColorTransform( 0.6, 0.8, 1, 0.9 ) );
 212:              }
 213:              
 214:              private function verticalBlur( e:Event ):void {
 215:                  e.target.bitmapData.applyFilter( e.target.bitmapData, e.target.bitmapData.rect, new Point(0,0), new BlurFilter(0,15));
 216:              }
 217:              
 218:              private function horizontalBlur( e:Event ):void {
 219:                  e.target.bitmapData.applyFilter(  e.target.bitmapData, e.target.bitmapData.rect, new Point(0,0), new BlurFilter(15,0));
 220:              }
 221:              
 222:              private function verticalScroll( e:Event ):void {
 223:                  e.target.bitmapData.scroll(0,5);
 224:              }
 225:              
 226:              private function horizontalScroll( e:Event ):void {
 227:                  e.target.bitmapData.scroll(-5,0);
 228:              }
 229:      
 230:              private function SetProgressInfo():void{
 231:                  PlayProgress.label="";
 232:                  if (LoadTotal!=0 && (PlayTotal==0 || PlayCurrent==0) ){
 233:                      LoadProgress.label = "Load " + Math.ceil(LoadCurrent/LoadTotal*100) + "% ";
 234:                      LoadProgress.setProgress(LoadCurrent,LoadTotal);
 235:                  }
 236:                  else if (PlayTotal!=0 && PlayCurrent!=0 && LoadCurrent==LoadTotal ){
 237:                      LoadProgress.label = "Play " + Math.ceil(PlayCurrent/PlayTotal*100) + "% ";
 238:                      PlayProgress.setProgress(PlayCurrent,PlayTotal);
 239:                  }
 240:                  else if (PlayTotal!=0 && LoadTotal!=0 && LoadCurrent!=LoadTotal && PlayCurrent!=PlayTotal){
 241:                      LoadProgress.label = "Load " + Math.ceil(LoadCurrent/LoadTotal*100) + "% " +  "Play " + Math.floor(PlayCurrent/PlayTotal*100) + "% ";
 242:                      LoadProgress.setProgress(LoadCurrent,LoadTotal);
 243:                      PlayProgress.setProgress(PlayCurrent,PlayTotal);
 244:                  }
 245:              }
 246:                  
 247:              protected function VolumeLevel_changeHandler(event:Event):void
 248:              {
 249:                  SoundTranform1 = new SoundTransform (VolumeLevel.value, BallansLevel.value);
 250:                  SoundChannel1.soundTransform = SoundTranform1;
 251:              }
 252:   
 253:              protected function BallansLevel_changeHandler(event:Event):void
 254:              {
 255:                  SoundTranform1 = new SoundTransform (VolumeLevel.value, BallansLevel.value);
 256:                  SoundChannel1.soundTransform = SoundTranform1;
 257:              }
 258:   
 259:              protected function PlayButton_clickHandler(event:MouseEvent):void
 260:              {
 261:                  SoundChannel1=Sound1.play(PausePosition);
 262:                  SoundTranform1 = new SoundTransform (VolumeLevel.value, BallansLevel.value);
 263:                  SoundChannel1.soundTransform = SoundTranform1
 264:                  PlayButton.enabled = false;
 265:                  PauseButton.enabled=true;
 266:              }
 267:   
 268:              protected function PauseButton_clickHandler(event:MouseEvent):void
 269:              {
 270:                  PausePosition = SoundChannel1.position;
 271:                  SoundChannel1.stop();
 272:                  PauseButton.enabled=false;
 273:                  PlayButton.enabled = true;
 274:              }
 275:   
 276:              protected function RewindButton_clickHandler(event:MouseEvent):void
 277:              {
 278:                  //рестарт ролика без перезагрузки c URL
 279:                  PausePosition=0;
 280:                  SoundChannel1.stop();
 281:                  SoundChannel1 = Sound1.play();
 282:                  SoundTranform1 = new SoundTransform (VolumeLevel.value, BallansLevel.value);
 283:                  SoundChannel1.soundTransform  = SoundTranform1
 284:                  PlayButton.enabled = false;
 285:                  PauseButton.enabled=true;
 286:                  Timer1.start();
 287:                  ID3_marquee.play();
 288:              }
 289:          ]]>
 290:      </fx:Script>
 291:      
 292:      <fx:Declarations>
 293:          <!-- Декларативное определение TWEEN-анимации -->
 294:          <mx:Move id="ID3_marquee" target="{SoundID}" repeatCount="0"  easingFunction="mx.effects.easing.Linear.easeIn" />
 295:          <mx:Move id="URL_marquee" target="{SoundLocation}" repeatCount="1" easingFunction="mx.effects.easing.Linear.easeIn" />
 296:      </fx:Declarations>
 297:      
 298:      <mx:Panel width="600" height="265" y="10"  borderVisible="true" enabled="true" headerHeight="20"  title="Simple Freeware OpenSource Flex Player for Web (one sound) - http://asp-net.ru/"  x="10">
 299:      <s:HGroup  width="500" height="240" gap="10" verticalCenter="0" verticalAlign="top" x="0">
 300:          <s:VGroup  width="90%" height="200" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" horizontalAlign="center">
 301:              <s:BorderContainer width="485"  height="150" borderVisible="false">
 302:                  <xx:Visualization id="VisualPanel" type="wave" bars="32"  width="485" height="150" />
 303:                  <mx:Label id="SoundID" width="485" fontSize="14"  />
 304:                  <s:BorderContainer id="SoundID_Mask" x="0" y="0" width="485" height="24" />
 305:                  <s:Label id="SoundLocation" x="4" y="137"  width="100%"/>
 306:                  <s:BorderContainer id="SoundLocation_Mask" x="0" y="137" width="485" height="12" />
 307:              </s:BorderContainer>    
 308:              <s:BorderContainer width="485"  height="40" borderVisible="false">
 309:                  <mx:ProgressBar id="LoadProgress" width="485"  mode="manual" chromeColor="#313131" z="2" label="" fontStyle="italic" fontWeight="normal" fontAntiAliasType="advanced" fontSize="12"/>
 310:                  <mx:ProgressBar id="PlayProgress" width="485"  mode="manual" alpha="0.5" z="1" label=""/>
 311:              </s:BorderContainer>
 312:          <s:HGroup width="100%" height="30" gap="20" paddingLeft="5" paddingRight="0">
 313:                  <s:Button label="Play" width="150" cornerRadius="5" id="PlayButton" click="PlayButton_clickHandler(event)" enabled="false"/>
 314:                  <s:Button label="Pause" width="150" cornerRadius="5" id="PauseButton" click="PauseButton_clickHandler(event)"/>
 315:                  <s:Button label="Rewind" width="150" cornerRadius="5" id="RewindButton" click="RewindButton_clickHandler(event)"/>
 316:              </s:HGroup>
 317:          </s:VGroup>
 318:          <s:VGroup width="100%" height="100%">
 319:              <mx:VRule height="20" visible="false"/>
 320:              <s:HGroup width="100%" paddingLeft="5">
 321:                  <s:VGroup  width="100%" height="100%">
 322:                      <s:VSlider id="VolumeLevel" x="644" y="21" height="180" minimum="0" maximum="1" stepSize="0.01" value="0.5" change="VolumeLevel_changeHandler(event)"/>
 323:                      <s:Label text="Vol" fontSize="14"/>
 324:                  </s:VGroup>
 325:                  <mx:HRule width="5" visible="false"/>
 326:                  <s:VGroup  width="100%" height="100%">
 327:                      <s:VSlider id="BallansLevel" x="644" y="318" height="180" minimum="-1" maximum="1" stepSize="0.1" value="0" change="BallansLevel_changeHandler(event)"/>
 328:                      <s:Label text="Bal" fontSize="14"/>
 329:                  </s:VGroup>
 330:              </s:HGroup>
 331:          </s:VGroup>
 332:      </s:HGroup>
 333:      
 334:      </mx:Panel>
 335:  </s:Application>

URL аудио-ролика при вызове плеера указывается в параметре SoundUrl:


   1:      <head>
   2:  ...
   3:          <style type="text/css" media="screen"> 
   4:              html, body    { height:100%; }
   5:              body { margin:0; padding:0; overflow:auto; text-align:center; 
   6:                     background-color: #fdf5e6; }   
   7:              object:focus { outline:none; }
   8:              #flashContent { display:none; }
   9:          </style>
  10:          
  11:      <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
  12:          <!-- BEGIN Browser History required section -->
  13:          <link rel="stylesheet" type="text/css" href="history/history.css" />
  14:          <script type="text/javascript" src="history/history.js"></script>
  15:          <!-- END Browser History required section -->  
  16:              
  17:          <script type="text/javascript" src="swfobject.js"></script>
  18:          <script type="text/javascript">
  19:              <!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. --> 
  20:              var swfVersionStr = "10.0.0";
  21:              <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
  22:              var xiSwfUrlStr = "playerProductInstall.swf";
  23:              var flashvars = {};
  24:              flashvars.SoundUrl="http://asp-net.ru/flex11/0001.WAV";
  25:              var params = {};
  26:              params.quality = "high";
  27:              params.bgcolor = "#fdf5e6";
  28:              params.allowscriptaccess = "sameDomain";
  29:              params.allowfullscreen = "true";
  30:              var attributes = {};
  31:              attributes.id = "AudioPlayer_Web";
  32:              attributes.name = "AudioPlayer_Web";
  33:              attributes.align = "middle";
  34:              swfobject.embedSWF(
  35:                  "AudioPlayer_Web.swf", "flashContent", 
  36:                  "620", "300", 
  37:                  swfVersionStr, xiSwfUrlStr, 
  38:                  flashvars, params, attributes);
  39:              <!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
  40:              swfobject.createCSS("#flashContent", "display:block;text-align:left;");
  41:          </script>
  42:      </head>
  43:      <body>
  44:  ...
  45:          <div id="flashContent">
  46:              <p>
  47:                  To view this page ensure that Adobe Flash Player version 
  48:                  10.0.0 or greater is installed. 
  49:              </p>
  50:              <script type="text/javascript"> 
  51:                  var pageHost = ((document.location.protocol == "https:") ? "https://" :    "http://"); 
  52:                  document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='" 
  53:                                  + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" ); 
  54:              </script> 
  55:          </div>
  56:             
  57:             <noscript>
  58:              <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="620" height="300" id="AudioPlayer_Web">
  59:                  <param name="movie" value="AudioPlayer_Web.swf" />
  60:                  <param name="quality" value="high" />
  61:                  <param name="bgcolor" value="#fdf5e6" />
  62:                  <param name="allowScriptAccess" value="sameDomain" />
  63:                  <param name="allowFullScreen" value="true" />
  64:                  <!--[if !IE]>-->
  65:                  <object type="application/x-shockwave-flash" data="AudioPlayer_Web.swf" width="620" height="300">
  66:                      <param name="FlashVars" value="SoundUrl='http://asp-net.ru/flex11/0001.WAV'"/>
  67:                      <param name="quality" value="high" />
  68:                      <param name="bgcolor" value="#fdf5e6" />
  69:                      <param name="allowScriptAccess" value="sameDomain" />
  70:                      <param name="allowFullScreen" value="true" />
  71:                  <!--<![endif]-->
  72:                  <!--[if gte IE 6]>-->
  73:                      <p> 
  74:                          Either scripts and active content are not permitted to run or Adobe Flash Player version
  75:                          10.0.0 or greater is not installed.
  76:                      </p>
  77:                  <!--<![endif]-->
  78:                      <a href="http://www.adobe.com/go/getflashplayer">
  79:                          <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
  80:                      </a>
  81:                  <!--[if !IE]>-->
  82:                  </object>
  83:                  <!--<![endif]-->
  84:              </object>
  85:          </noscript>    
  86:  ...    
  87:     </body>

Посмотреть всякие другие интересные штучки на флеше - на описание которых у меня хватило времени - можно здесь - Flex-программирование. Сгрузить этот плеер в готовом откомпилированном виде можно отсюда Simple Flex Player for Web (one sound).

Вы можете посмотреть еще мою заметку на видеотематику - Видео-камеры, видео-чаты и Flash-медиасервера (работающие по RTMP и самописным протоколам).




Комментарии к этой страничке ( )
ссылка на эту страничку: http://www.vb-net.ru/Simple-Flex-Music-Player/index.htm
<На главную>  <В раздел ASP>  <В раздел NET>  <В раздел SQL>  <В раздел Разное>  <Написать автору>  < Поблагодарить>