【问题标题】:Flash AS2 - Handle Missing Sound CardFlash AS2 - 处理丢失的声卡
【发布时间】:2010-02-25 18:04:18
【问题描述】:

在我的 AS2 Flash 游戏中,我播放了一些声音文件并等待“onSoundComplete”消息/功能,然后再继续。

问题是如果系统中没有声卡(或者它在设备管理器中被禁用) - 一切都像正常工作一样(没有错误,onLoad 处理程序变为“真”) - 但声音实际上从未播放过,因此,我的事件永远不会被触发。

我曾计划通过连接到我的声音代码来解决这个问题,如果我没有检测到声卡,只需启动一个计时器等待几秒钟,然后手动触发“onSoundComplete”功能。

唯一的问题是我无法可靠地找到一种方法来确定系统中是否有声卡!

顺便说一句 - AS3 似乎通过传回 NULL 声道很好地处理了这个问题 - 不幸的是我被困在 AS2.0 中

【问题讨论】:

  • 目前,我能确定系统是否有声音的唯一可靠方法是以低音量播放一个简短的声音文件并检查它的 onSoundComplete 函数是否触发过。像这样的黑客让我的一小部分死亡。

标签: flash audio actionscript-2


【解决方案1】:

您应该能够使用 System.capabilities

这是一个音频示例:

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

这里是来自: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);

【讨论】:

  • 奇怪的是,即使我在设备管理器中禁用声卡,System.capabilities.hasAudio 也是“真”。
  • 这个答案不起作用,因为 System.capabilities.hasAudio 对于桌面播放器总是正确的 - System.capabilities 报告播放器的功能,而不是系统。见stackoverflow.com/questions/4511146/…
猜你喜欢
  • 2022-11-11
  • 2017-08-03
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多