views:

282

answers:

1

In my AS2 Flash game, I play a number of sound files and wait for the "onSoundComplete" message/function before proceeding.

The problem is if there is no sound card in the system (or it is disabled in device manager) - everything acts like it is working (no errors, onLoad handler gets "true") - but the sound never actually gets played, and as such, my event never gets triggered.

I had planned on dealing with this by hooking into my sound code, and if I detect no sound card, just kick off a timer to wait a few seconds before manually firing the "onSoundComplete" function.

The only problem is that I can't reliably find a way to determine if there is a sound card in the system!

btw - AS3 seems to handle this quite nicely by passing back a NULL soundchannel - unfortunately I am stuck in AS2.0

+1  A: 

You should be able to use System.capabilities

Here is an example for audio:

    var userAudio:Boolean = System.capabilities.hasAudio;
trace("YOUR SYSTEM HAS AUDIO:");
trace(userAudio);

Here is all of the properties from: http://www.actionscript.org/forums/showthread.php3?t=39727:

// Camera and Microphone check
var userCamMic:Boolean = System.capabilities.avHardwareDisable;
trace("YOUR CAMERA AND MICROPHONE ARE ENABLED:");
trace(userCamMic);
// Flash player supports communication to Accessibility Aids
var userAccess:Boolean = System.capabilities.hasAccessibility;
trace("YOUR FLASH PLAYER SUPPORTS COMMUNICATION TO ACCESSIBILITY AIDS:");
trace(userAccess);
// Checking to see if you have audio
var userAudio:Boolean = System.capabilities.hasAudio;
trace("YOUR SYSTEM HAS AUDIO:");
trace(userAudio);
// Checking to see if you have an audio encoder for streaming
var userAudioEnc:Boolean = System.capabilities.hasAudioEncoder;
trace("YOUR SYSTEM HAS AN AUDIO ENCODER, THUS ALLOWING STREAMING:");
trace(userAudioEnc);
// Checking to see if your system has embedded video capabilities
var userEmbVideo:Boolean = System.capabilities.hasEmbeddedVideo;
trace("YOUR SYSTEM ALLOWS FOR EMBEDDED VIDEO:");
trace(userEmbVideo);
// Checking to see if your system has an MP3 decoder
var userMP3:Boolean = System.capabilities.hasMP3;
trace("YOUR SYSTEM HAS AN MP3 DECODER:");
trace(userMP3);
// Checking to see if your system supports printing
var userPrint:Boolean = System.capabilities.hasPrinting;
trace("YOUR SYSTEM SUPPORTS PRINTING:");
trace(userPrint);
// Checking to see if your system supports development of screen broadcast
// applications to be run through Flash Communication Server
var userScrnBrd:Boolean = System.capabilities.hasScreenBroadcast;
trace("YOUR SYSTEM SUPPORTS DEVELOPMENT OF SCREEN BROADCAST APPLICATIONS TO BE RUN
 THROUGH FLASH COMMUNICATION SERVER:");
trace(userScrnBrd);
// Checking to see if your system supports playback of screen broadcast
// applications that are running from Flash Communication Server
var userScrnPlay:Boolean = System.capabilities.hasScreenPlayback;
trace("YOUR SYSTEM SUPPORTS PLAYBACK OF SCREEN BROADCAST APPLICATIONS THAT ARE 
RUNNING FROM FLASH COMMUNICATION SERVER:");
trace(userScrnPlay);
// Checking to see if your system can play streaming audio
var userStrmAud:Boolean = System.capabilities.hasStreamingAudio;
trace("YOUR SYSTEM CAN PLAY STREAMING AUDIO:");
trace(userStrmAud);
// Checking to see if your system can play streaming video
var userStrmVid:Boolean = System.capabilities.hasStreamingVideo;
trace("YOUR SYSTEM CAN PLAY STREAMING VIDEO:");
trace(userStrmVid);
// Checking to see if your system can encode streaming video
var userVidEnc:Boolean = System.capabilities.hasVideoEncoder;
trace("YOUR SYSTEM CAN ENCODE STREAMING VIDEO:");
trace(userVidEnc);
// Checking to see if your player is officially released (false) or a debugging version (true)
var userDebug:Boolean = System.capabilities.isDebugger;
trace("YOUR PLAYER IS A DEBUGGING VERSION:");
trace(userDebug);
// What language is your player running
var userLang:String = System.capabilities.language;
trace("YOUR PLAYER IS RUNNING ON THIS LANGUAGE (see Actionscript 'Reference' for language list.
Example: 'en' is English):");
trace(userLang);
// Checking to see if player is attempting to read anything from hard disk
var userLocFile:Boolean = System.capabilities.localFileReadDisable;
trace("YOUR PLAYER IS ATTEMPTING TO READ FROM YOUR HARD DISK:");
trace(userLocFile);
// Checking to see the manufacturer of your Flash player
var userManu:String = System.capabilities.manufacturer;
trace("YOUR FLASH PLAYER IS MANUFACTURED BY:");
trace(userManu);
// Checking to see what operating system user is running
var userOS:String = System.capabilities.os;
trace("YOUR OPERATING SYSTEM IS:");
trace(userOS);
// Checking the pixel aspect ratio of user screen
var userPAR:Number = System.capabilities.pixelAspectRatio;
trace("THE PIXEL ASPECT RATIO OF YOUR SCREEN IS:");
trace(userPAR);
// Checking to see what player the user system is using
var userPlayType:String = System.capabilities.playerType;
trace("THE PLAYER YOUR SYSTEM IS RUNNING IS:");
trace(userPlayType);
// Checking to see what color user screen is running
var userScrnCol:String = System.capabilities.screenColor;
trace("YOUR SYSTEM IS RUNNING THIS COLOR (color, gray, bw):");
trace(userScrnCol);
// Checking to see what the users screen DPI is
var userDPI:Number = System.capabilities.screenDPI;
trace("YOUR SCREEN DPI (DOTS PER INCH) IS:");
trace(userDPI);
// User screen resolution
var userScreenX:Number = System.capabilities.screenResolutionX;
var userScreenY:Number = System.capabilities.screenResolutionY;
trace("YOUR MONITOR RESOLUTION IS:");
trace(userScreenX+" x "+userScreenY);
// Creating URL code for users system capabilites
var userServStr:String = System.capabilities.serverString;
trace("THE URL CODE FOR YOUR USER SYSTEM CAPABILITIES IS:");
trace(userServStr);
// Checking to see what Flash player version user is running
var userVersion:String = System.capabilities.version;
trace("YOUR FLASH PLAYER VERSION IS:");
trace(userVersion);
// Checking to see if user has disabled windowless mode
var userWinDis:Boolean = System.capabilities.windowlessDisable;
trace("YOU HAVE DISABLED WINDOWLESS MODE:");
trace(userWinDis);
// Checking to super domain or exact domain is set
var userExacSet:Boolean = System.exactSettings;
trace("YOU HAVE SUPER DOMAIN SETTINGS:");
trace(userExacSet);
Todd Moses
Strangely enough, System.capabilities.hasAudio is "true" even if I disable the sound card in device manager.
n3wtz