flash.mediaID3Info La classe ID3Info contient des propriétés qui reflètent les métadonnées ID3.Object La classe ID3Info contient des propriétés qui reflètent les métadonnées ID3. Vous pouvez obtenir des métadonnées supplémentaires pour les fichiers MP3 en accédant à la propriété id3 de la classe Sound, par exemple mySound.id3.TIME. Pour plus d’informations, voir l’entrée Sound.id3 et les définitions des balises ID3 à l’adresse http://www.id3.org. Sound.id3album Titre de l’album qui correspond à la balise ID3 2.0 TALB.String Titre de l’album qui correspond à la balise ID3 2.0 TALB. artist Nom de l’interprète qui correspond à la balise ID3 2.0 TPE1.String Nom de l’interprète qui correspond à la balise ID3 2.0 TPE1. comment Commentaire sur l’enregistrement qui correspond à la balise ID3 2.0 COMM.String Commentaire sur l’enregistrement qui correspond à la balise ID3 2.0 COMM. genre Genre du morceau qui correspond à la balise ID3 2.0 TCON.String Genre du morceau qui correspond à la balise ID3 2.0 TCON. songName Titre du morceau qui correspond à la balise ID3 2.0 TIT2.String Titre du morceau qui correspond à la balise ID3 2.0 TIT2. track Numéro de la piste qui correspond à la balise ID3 2.0 TRCK.String Numéro de la piste qui correspond à la balise ID3 2.0 TRCK. year Année d’enregistrement qui correspond à la balise ID3 2.0 TYER.String Année d’enregistrement qui correspond à la balise ID3 2.0 TYER. MediaType La classe MediaType énumère les types généraux d’éléments multimédias pouvant être renvoyés par une caméra.Object La classe MediaType énumère les types généraux d’éléments multimédias pouvant être renvoyés par une caméra.

Utilisez les constantes définies dans cette classe en tant qu’entrée pour la méthode launch() de la classe CameraUI. Les valeurs MediaType sont également utilisées dans la propriété mediaType de la classe MediaPromise.

CameraUI.launch()MediaPromise.mediaTypeIMAGE Une image unique.imageString Une image unique. VIDEO Une vidéo.videoString Une vidéo.
scanHardware Impose un rebalayage des microphones et des caméras sur le système. Impose un rebalayage des microphones et des caméras sur le système. Camera Utilisez la classe Camera pour capturer une vidéo depuis la caméra du système client.flash.events:EventDispatcher Utilisez la classe Camera pour capturer une vidéo depuis la caméra du système client. Servez-vous de la classe Video pour contrôler la vidéo localement. Utilisez les classes NetConnection et NetStream pour transmettre la vidéo au Flash Media Server. Flash Media Server peut envoyer le flux vidéo à d’autres serveurs et le diffuser à d’autres clients exécutant Flash Player.

Une occurrence de Camera permet ce capturer de la vidéo au format paysage. Sur les périphériques prenant en charge le changement d’orientation de l’écran, tels que les téléphones portables, un objet Video joint à la caméra affiche uniquement la vidéo filmée verticalement en orientation paysage. Par conséquent, les applications mobiles doivent utiliser l’orientation paysage lors de l’affichage vidéo et ne doivent pivoter automatiquement.

A partir d’AIR 2.6, l’autofocus est automatiquement activé sur les périphériques mobiles munis d’un appareil photo à autofocus. Si l’appareil photo ne prend pas en charge l’autofocus continu (ce qui est le cas pour de nombreux périphériques mobiles), l’appareil photo est mis au point lorsque l’objet Camera est associé à un flux vidéo et chaque fois que la méthode setMode() est appelée. Sur les ordinateurs de bureau, le comportement de l’autofocus dépend du pilote et des paramètres de la caméra.

Dans le cas d’une application AIR sur Android et iOS, la caméra ne capture pas les vidéos si l’application AIR n’est pas l’application active au premier plan. Il est en outre possible que les connexions de flux soient perdues lorsque l’application se trouve dans l’arrière-plan. Sur iOS, il est impossible d’afficher la caméra vidéo lorsqu’une application utilise le mode de rendu sur GPU. Il est toutefois possible de diffuser en continu la caméra vidéo sur un serveur.

Prise en charge du navigateur mobile : cette classe n’est pas prise en charge sur les navigateurs mobiles.

Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur les systèmes d’exploitation de bureau, mais ne l’est pas sur tous les périphériques mobiles. Elle n’est pas prise en charge sur les périphériques AIR pour TV. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété Camera.isSupported. Notez que pour les périphériques AIR pour TV, Camera.isSupported est true, mais Camera.getCamera() renvoie toujours null.

Pour plus d’informations sur la capture audio, voir la classe Microphone.

Important : Flash Player affiche une boîte de dialogue Confidentialité qui permet à l’utilisateur d’autoriser ou de refuser l’accès à la caméra. Assurez-vous que la taille de la fenêtre de votre application soit d’au moins 215 x 138 pixels, taille minimale requise par Flash pour afficher cette boîte de dialogue.

Pour créer ou référencer un objet Camera, utilisez la méthode getCamera().

L’exemple suivant montre l’image provenant d’une caméra après avoir pris connaissance de l’avertissement de sécurité. La scène est définie de telle sorte qu’il est impossible de la redimensionner, elle est alignée sur le coin supérieur gauche de la fenêtre du lecteur. L’événement activity est distribué au début et à la fin (si elle existe) de la session, et elle est capturée par la méthode activityHandler() qui imprime les informations concernant l’événement.

Remarque : une caméra doit être reliée à votre ordinateur pour le bon déroulement de cet exemple.

package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; public class CameraExample extends Sprite { private var video:Video; public function CameraExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width * 2, camera.height * 2); video.attachCamera(camera); addChild(video); } else { trace("You need a camera."); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } } }
flash.media.MicrophoneCristophe Coenraets : Conversation vidéo pour Android en 30 lignes de codeMichael Chaize : Android, AIR et la camérastatus Distribué lorsqu’une caméra publie son état.flash.events.StatusEvent.STATUSflash.events.StatusEvent Distribué lorsqu’une caméra publie son état. Avant d’accéder à une caméra, Flash Player affiche une boîte de dialogue de confidentialité pour permettre aux utilisateurs d’autoriser ou de refuser l’accès à leur caméra. Si la propriété code est définie sur "Camera.Muted", l’utilisateur a interdit au fichier SWF d’accéder à sa caméra. Si la propriété code est réglée sur "Camera.unmuted", l’utilisateur a autorisé le fichier SWF à accéder à sa caméra. Camera.getCamera()activity Distribué lorsqu’une caméra commence ou termine une session.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Distribué lorsqu’une caméra commence ou termine une session. Appelez Camera.setMotionLevel() pour spécifier la quantité de mouvement requise pour déclencher un événement activity avec une valeur activating de true ou le délai devant s’écouler sans activité avant le déclenchement d’un événement activity avec une valeur activating de false. getCamera Renvoie une référence à un objet Camera pour capturer de la vidéo.Si le paramètre name n’est pas spécifié, cette méthode renvoie une référence à la caméra par défaut ou, si elle est utilisée par une autre application, à la première caméra disponible (si plusieurs caméras sont installées, l’utilisateur peut spécifier la caméra par défaut dans le panneau Paramètres de la caméra de Flash Player). Si aucune caméra n’est disponible ou installée, la méthode renvoie null. flash.media:CameranameStringnullSpécifie la caméra à sélectionner, telle qu’elle est désignée à partir du tableau renvoyé par la propriété names. Dans la plupart des cas, omettez ce paramètre pour sélectionner la caméra par défaut. Pour spécifier une valeur pour ce paramètre, utilisez la représentation de chaîne de la position d’index de base zéro dans le tableau Camera.names. Par exemple, pour désigner la troisième caméra du tableau, utilisez Camera.getCamera("2"). Renvoie une référence à un objet Camera pour capturer de la vidéo. Pour commencer la capture de la vidéo, vous devez relier l’objet Camera à un objet vidéo (voir Video.attachCamera() ). Pour transmettre la vidéo à Flash Media Server, appelez NetStream.attachCamera() pour relier l’objet Camera à un objet NetStream.

Plusieurs appels de la méthode getCamera() référencent le même pilote de caméra. Ainsi, si votre script contient du code comme firstCam:Camera = getCamera() et secondCam:Camera = getCamera(), alors firstCam et secondCam font référence à une même caméra, qui est la caméra par défaut de l’utilisateur.

Sur les périphériques iOS munis d’une caméra arrière et frontale, il est uniquement possible de capturer des vidéos à partir d’une seule caméra à la fois. Sur les périphériques Android, vous pouvez accéder uniquement à la caméra arrière.

En général, évitez de transmettre la valeur du paramètre name ; contentez-vous d’utiliser getCamera() pour renvoyer une référence à la caméra par défaut. L’utilisateur peut spécifier la caméra par défaut devant être utilisée via le panneau Paramètres de la caméra (comme indiqué plus bas dans cette section).

Vous ne pouvez pas utiliser ActionScript pour définir un paramètre d’autorisation ou de refus pour l’accès à la caméra, mais vous pouvez afficher la boîte de dialogue de configuration de la caméra des paramètres d’Adobe Flash Player dans laquelle l’utilisateur peut définir l’autorisation de la caméra. Lorsqu’un fichier SWF utilisant la méthode attachCamera() tente d’associer la caméra renvoyée par la méthode getCamera() à un objet Video ou NetStream, Flash Player affiche une boîte de dialogue qui permet à l’utilisateur d’autoriser ou de refuser l’accès à la caméra (vérifiez la taille de la fenêtre de votre application qui doit être au moins de 215 x 138 pixels, taille minimale requise par Flash Player pour afficher la boîte de dialogue). Lorsque l’utilisateur répond à la boîte de dialogue de configuration de la caméra, Flash Player renvoie un objet information dans l’événement status qui précise la réponse de l’utilisateur : Camera.muted indique que l’utilisateur a refusé l’accès à une caméra ; Camera.unmuted qu’il en a autorisé l’accès. Pour déterminer si l’utilisateur a refusé ou autorisé l’accès à la caméra sans traiter l’événement status, utilisez la propriété muted.

Dans Flash Player, l’utilisateur peut spécifier des paramètres de confidentialité permanents pour un domaine spécifique. Pour ce faire, il lui suffit de cliquer sur le bouton droit de la souris (Windows et Linux) ou de cliquer sur le bouton droit de la souris tout en maintenant la touche Contrôle enfoncée (Macintosh) sur un fichier SWF en cours de lecture, de sélectionner Paramètres, d’ouvrir la boîte de dialogue Confidentialité, puis de sélectionner Mémoriser. Si l’utilisateur sélectionne Mémoriser, Flash Player ne l’invite plus à autoriser ou refuser l’accès à votre caméra des fichiers SWF de ce domaine.

Remarque : la méthode attachCamera() n’invoque pas la boîte de dialogue permettant d’autoriser ou de refuser l’accès à la caméra si l’utilisateur a refusé l’accès en sélectionnant Mémoriser dans la boîte de dialogue Paramètres de Flash Player. Dans ce cas, vous pouvez demander à l’utilisateur de modifier le paramètre d’autorisation ou de refus en affichant le panneau de confidentialité de Flash Player pour l’utilisateur à l’aide de Security.showSettings(SecurityPanel.PRIVACY).

Si getCamera() renvoie la valeur null, cela signifie que la caméra est utilisée par une autre application ou qu’aucune caméra n’est installée sur le système. Pour déterminer si une caméra est installée, utilisez la propriété names.length. Pour afficher le panneau Paramètres de la caméra de Flash Player qui permet à l’utilisateur de choisir la caméra à référencer par getCamera(), utilisez Security.showSettings(SecurityPanel.CAMERA).

L’analyse du matériel à la recherche de caméras exige un certain temps. Lorsque le moteur d’exécution détecte au moins une caméra, le matériel n’est plus analysé pendant la durée de vie de l’occurrence du lecteur. Cependant, si le moteur d’exécution ne détecte pas de caméra, il effectue une analyse à chaque appel de getCamera. Cela est particulièrement pratique si la caméra est désactivée. Si votre fichier SWF contient un bouton Réessayer qui appelle getCamera, Flash Player peut localiser la caméra sans que l’utilisateur ne soit obligé de redémarrer le fichier SWF.

Dans l’exemple suivant, une fois que l’utilisateur a autorisé l’accès la caméra, la caméra associée est utilisée pour capturer des images vidéo. Les informations concernant le flux vidéo, telles que les images en cours par seconde, sont affichées également.

La méthode Camera.getCamera() renvoie une référence à un objet camera, ou renvoie null si aucune caméra n’est disponible ni installée. L’instruction if vérifie si la caméra a été trouvée et si l’utilisateur a autorisé l’accès à la caméra. Si l’utilisateur a refusé l’accès, la propriété muted est définie sur true.

Généralement, lorsque la méthode attachCamera() est appelée, une boîte de dialogue apparaît et invite l’utilisateur à autoriser ou à refuser l’accès Flash Player à la caméra. Néanmoins, si l’utilisateur a refusé l’accès et a sélectionné l’option Mémoriser, la boîte de dialogue n’apparaît pas et rien ne s’affiche. Pour vérifier que l’utilisateur a la possibilité d’autoriser l’accès à la caméra, le champ de texte myTextField demande à l’utilisateur de cliquer sur le champ de texte afin d’appeler la boîte de dialogue Paramètres de Flash Player.

La méthode clickHandler() appelle la méthode Security.showSettings(), qui affiche le panneau PRIVACY de la boîte de dialogue Paramètres. Si l’utilisateur autorise l’accès, l’événement StatusEvent.STATUS est distribué et la valeur de la propriété code de l’événement est définie sur Camera.Unmuted (la propriété mute de l’objet de la caméra est définie sur false également).

La méthode statusHandler(), ajoutée pour écouter le changement d’état du paramètre de l’utilisateur, appelle la méthode connectCamera(), si l’utilisateur autorise l’accès. La méthode connectCamera() instancie un objet video avec la hauteur et la largeur du flux capturé. Pour afficher la vidéo capturée de la caméra, la référence au flux vidéo est associée à l’objet video, et ce dernier est ajouté à la liste d’affichage.

Un objet Timer est démarré également. Chaque seconde, un événement timer de l’objet Timer est distribué et la méthode timerHandler() est appelée. La méthode timerHandler() est affichée et met à jour plusieurs propriétés de l’objet Camera.

Remarque : pour cet exemple, la seule propriété qui change est la propriété currentFPS.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.system.SecurityPanel; import flash.system.Security; public class Camera_getCameraExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_getCameraExample() { myTextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; if (Camera.isSupported) { cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; } else if (cam.muted) { myTextField.text = "To enable the use of the camera,\n" + "please click on this text field.\n" + "When the Flash Player Settings dialog appears,\n" + "make sure to select the Allow radio button\n" + "to grant access to your camera."; myTextField.addEventListener(MouseEvent.CLICK, clickHandler); }else { myTextField.text = "Connecting"; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); }else { myTextField.text = "The Camera class is not supported on this device."; } } private function clickHandler(e:MouseEvent):void { Security.showSettings(SecurityPanel.PRIVACY); cam.addEventListener(StatusEvent.STATUS, statusHandler); myTextField.removeEventListener(MouseEvent.CLICK, clickHandler); } private function statusHandler(event:StatusEvent):void { if (event.code == "Camera.Unmuted") { connectCamera(); cam.removeEventListener(StatusEvent.STATUS, statusHandler); } } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); t.start(); } private function timerHandler(event:TimerEvent):void { myTextField.y = cam.height + 20; myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } } }
indexmutednamessetMode()statusVideo.attachCamera()statusflash.events:StatusEventDistribué lorsqu’une caméra publie son état. Avant d’accéder à une caméra, Flash Player affiche une boîte de dialogue de confidentialité pour permettre aux utilisateurs d’autoriser ou de refuser l’accès à leur caméra. Si la propriété code est réglée sur "Camera.muted", l’utilisateur a interdit au fichier SWF d’accéder à sa caméra. Si la propriété code est réglée sur "Camera.unmuted", l’utilisateur a autorisé le fichier SWF à accéder à sa caméra. Distribué lorsqu’une caméra publie son état.
setKeyFrameInterval Spécifie les images qui sont transmises intégralement (images-clés) sans être interpolées par l’algorithme de compression vidéo.keyFrameIntervalintValeur spécifiant les images qui sont transmises intégralement (images-clés) sans être interpolées par l’algorithme de compression vidéo. La valeur 1 signifie que chaque image est une image-clé, 3 qu’une image sur trois est une image-clé, etc. Les valeurs gérées sont comprises entre 1 et 48. Spécifie les images qui sont transmises intégralement (keyframes) sans être interpolées par l’algorithme de compression vidéo. Cette méthode ne fonctionne que si vous transmettez la vidéo via Flash Media Server.

L’algorithme de compression vidéo de Flash compresse la vidéo en transmettant uniquement les éléments modifiés à partir de la dernière image de la vidéo. Ces portions sont appelées images interpolées. Les images d’une vidéo peuvent être interpolées en fonction du contenu de l’image précédente. Une image-clé, en revanche, est une image vidéo complète. Elle n’est pas interpolée sur la base des images précédentes.

Pour déterminer la valeur du paramètre keyFrameInterval, tenez compte de la bande passante et de l’accessibilité de la lecture vidéo. Une valeur keyFrameInterval élevée (envoi moins fréquent des images-clés), par exemple, entraîne une consommation réduite de bande passante. En revanche, le temps nécessaire au positionnement de la tête de lecture à un point donné de la vidéo est susceptible d’augmenter, car il sera peut-être nécessaire d’interpoler un plus grand nombre d’images précédentes avant que la vidéo puisse reprendre.

Inversement, une valeur keyFrameInterval faible (envoi plus fréquent des images-clés) augmente la consommation de bande passante, car des images vidéo intégrales sont transmises plus souvent, mais elle peut réduire le temps nécessaire à la localisation d’une image spécifique dans une vidéo enregistrée.

keyFrameInterval
setLoopback Indique s’il est nécessaire d’utiliser un flux vidéo compressé pour un visionnage local des données reçues par la caméra.compressBooleanfalseIndique s’il est nécessaire d’utiliser un flux vidéo compressé (true) ou non (false) pour un visionnage local des données reçues par la caméra. Indique s’il est nécessaire d’utiliser un flux vidéo compressé pour un visionnage local des données reçues par la caméra. Cette méthode n’est applicable que si vous transmettez du contenu vidéo à l’aide de Flash Media Server. Le réglage de compress sur true vous permet de déterminer plus précisément la façon dont la vidéo se présentera lorsque les utilisateurs la visionneront en temps réel.

Bien qu’un flux compressé soit utile à des fins de test, par exemple pour se faire une idée des paramètres de qualité vidéo, les coûts de traitement qu’il entraîne sont élevés car il implique plus qu’une simple compression. Le contenu vidéo est compressé, édité à des fins de transmission comme sur une connexion en direct, puis décompressé pour un visionnage local.

Pour définir le taux de compression utilisé lorsque vous réglez compress sur true, servez-vous de Camera.setQuality().

setQuality()
setMode Définit le mode de capture de la caméra sur le mode natif qui remplit le mieux les conditions requises.widthintLargeur de capture demandée, en pixels. La valeur par défaut est 160. heightintHauteur de capture demandée, en pixels. La valeur par défaut est 120. fpsNumberCadence à laquelle la caméra doit capturer des données, en images par seconde. La valeur par défaut est 15. favorAreaBooleantrueIndique comment manipuler la largeur, la hauteur et la cadence si la caméra n’est pas dotée d’un mode natif qui remplit les conditions requises. La valeur par défaut est true, ce qui signifie que le maintien de la taille de capture est favorisé ; l’utilisation de ce paramètre permet de sélectionner le mode qui correspond le mieux aux valeurs width et height, même si cela affecte les performances en réduisant la cadence. Pour optimiser la cadence au détriment de la hauteur et de la largeur de la caméra, définissez le paramètre false sur favorArea. Définit le mode de capture de la caméra sur le mode natif qui remplit le mieux les conditions requises. Si la caméra ne dispose pas d’un mode natif correspondant à tous les paramètres que vous transmettez, Flash Player sélectionne un mode de capture qui synthétise le mieux le mode demandé. Cette manipulation peut nécessiter le découpage de l’image et l’omission d’images.

Par défaut, Flash Player omet des images si nécessaire pour conserver la taille de l’image. Pour réduire le nombre d’images omises, même si cela passe par une réduction de la taille de l’image, définissez le paramètre favorArea sur false.

Lorsqu’il choisit un mode natif, Flash Player tente de conserver le format demandé dans la mesure du possible. Par exemple, si vous publiez la commande myCam.setMode(400, 400, 30) et que les valeurs de largeur et de hauteur maximales disponibles sur la caméra sont 320 et 288, Flash Player définit la largeur et la hauteur sur 288. Ce faisant, Flash Player conserve le format 1/1 que vous avez demandé.

Pour déterminer les valeurs affectées à ces propriétés une fois la sélection, par Flash Player, du mode qui correspond le mieux aux valeurs que vous avez demandées, utilisez les propriétés width, height et fps.

Si vous utilisez Flash Media Server, vous pouvez également capturer des images uniques ou créer une séquence en accéléré. Pour plus d’informations, voir la méthode NetStream.attachCamera().

Dans l’exemple suivant, lorsqu’un utilisateur clique sur la Scène, la vidéo est redimensionnée et le taux de capture des images par seconde est défini sur une nouvelle valeur.

La Scène est définie de façon à ne pas être redimensionnée. La méthode Camera.getCamera() renvoie une référence à un objet camera, ou renvoie null si aucune caméra n’est disponible ni installée. Si une caméra existe, la méthode connectCamera() est appelée. La méthode connectCamera() instancie un objet video. Pour afficher la vidéo capturée de la caméra, la référence au flux vidéo est associée à l’objet video, et ce dernier est ajouté à la liste d’affichage. Un écouteur d’événement est défini également pour un événement MouseEvent.CLICK. Une fois que l’utilisateur a cliqué sur la Scène, la méthode clickHandler() est invoquée. La méthode vérifie la largeur de la vidéo capturée et définit la largeur, la hauteur, et le taux demandé d’images par seconde du mode de capture de la caméra. L’objet video doit être supprimé et recréé pour que ces paramètres soient appliqués. La hauteur et la largeur de la vidéo doivent également être définies sur la hauteur et la largeur de l’objet de la caméra.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.display.StageScaleMode; public class Camera_setModeExample extends Sprite { private var cam:Camera; private var vid:Video; public function Camera_setModeExample() { stage.scaleMode = StageScaleMode.NO_SCALE; cam = Camera.getCamera(); if (!cam) { trace("No camera is installed."); }else { connectCamera(); } } private function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); stage.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e:MouseEvent):void { switch (cam.width) { case 160: cam.setMode(320, 240, 10); break; case 320: cam.setMode(640, 480, 5); break; default: cam.setMode(160, 120, 15); break; } removeChild(vid); connectCamera(); } } }
i/sheightlargeurflash.net.NetStream.attachCamera()
setMotionLevel Spécifie la quantité (intensité) de mouvement requise pour distribuer l’événement activity.motionLevelintSpécifie la quantité (intensité) de mouvement requise pour distribuer l’événement activity. Les valeurs gérées sont comprises entre 0 et 100. La valeur par défaut est 50. timeoutint2000Indique le nombre de millisecondes qui doit s’écouler sans activité avant que Flash Player ne considère que l’activité a cessé et distribue l’événement activity. La valeur par défaut est 2 000 millisecondes (2 secondes). Spécifie la quantité de mouvement requise pour distribuer l’événement activity. Peut éventuellement définir le nombre de millisecondes qui doit s’écouler sans activité avant que Flash Player ne considère que le mouvement a cessé et distribue l’événement.

Remarque : la vidéo peut être affichée quelle que soit la valeur du paramètre motionLevel. Ce paramètre détermine uniquement à quel moment et dans quelles circonstances l’événement est distribué, pas si du contenu vidéo est capturé ou affiché.

Pour empêcher la caméra de détecter le mouvement, attribuez la valeur 100 au paramètre motionLevel. Dans ce cas, l’événement activity n’est jamais distribué (vous utiliserez probablement cette valeur à des fins de tests uniquement, par exemple pour désactiver temporairement des gestionnaires qui seraient normalement déclenchés par la distribution de l’événement).

Pour déterminer la quantité de mouvement actuellement détectée par la caméra, utilisez la propriété activityLevel. Les valeurs de sensibilité de mouvement correspondent directement aux valeurs d’activité. La valeur d’activité 0 est associée à l’absence totale de mouvement. La valeur d’activité 100 est associée au mouvement constant. Lorsque vous êtes immobile, votre valeur d’activité est inférieure à votre valeur de sensibilité de mouvement. Inversement, lorsque vous vous déplacez, vos valeurs d’activité sont fréquemment supérieures à votre valeur de sensibilité de mouvement.

L’objectif de cette méthode est similaire à celui de Microphone.setSilenceLevel(). Les deux méthodes sont utilisées pour spécifier à quel moment il convient de distribuer l’événement activity. Toutefois, leur impact sur la publication des flux diffère de manière significative :

  • Microphone.setSilenceLevel() est conçu pour optimiser la bande passante. Lorsqu’un flux audio est considéré comme étant silencieux, aucune donnée audio n’est envoyée. En revanche, un message unique indiquant le début du silence est envoyé.
  • Camera.setMotionLevel() est conçu pour détecter le mouvement et n’a aucune incidence sur l’utilisation de la bande passante. La vidéo est envoyée peu importe qu’un flux vidéo détecte du mouvement ou non.
Dans l’exemple suivant, la caméra de l’utilisateur est utilisée comme moniteur ou caméra de surveillance. La caméra détecte le mouvement et un champ de texte affiche le niveau d’activité (l’exemple peut être étendu pour émettre une alarme ou envoyer un message via un service Web à d’autres applications).

La méthode Camera.getCamera() renvoie une référence à un objet camera, ou renvoie null si aucune caméra n’est disponible ni installée. L’instruction if vérifie si une caméra est disponible, et appelle la méthode connectCamera() lorsqu’elle est disponible. La méthode connectCamera() instancie un objet video avec la hauteur et la largeur du flux capturé. Pour afficher la vidéo capturée de la caméra, la référence au flux vidéo est associée à l’objet video, et ce dernier est ajouté à la liste d’affichage. Généralement, lorsque la méthode attachCamera() est appelée, une boîte de dialogue apparaît et invite l’utilisateur à autoriser ou à refuser l’accès Flash Player à la caméra. Néanmoins, si l’utilisateur a refusé l’accès et a sélectionné l’option Mémoriser, la boîte de dialogue n’apparaît pas et rien n’est affiché. Pour vérifier que l’utilisateur a la possibilité d’autoriser l’accès à la caméra, utilisez la méthode system.Security.showSettings() pour appeler la boîte de dialogue Paramètres de Flash Player.

La méthode setMotionLevel() définit le niveau d’activité (quantité de mouvement) avant que l’événement activity soit appelé, sur cinq, pour un mouvement minimal. Le délai qui s’écoule entre le moment où la caméra arrête de détecter le mouvement et le moment où l’événement activity est appelé, est défini sur 1 seconde (1 000 millisecondes). Après 1 seconde d’inactivité ou si le niveau d’activité atteint cinq, l’événement ActivityEvent.ACTIVITY est distribué et la méthode activityHandler() est invoquée. Si l’événement a été déclenché par le niveau d’activité, la propriété activating est définie sur true et un objet Timer est démarré. Chaque seconde, un événement timer de l’objet Timer est distribué et la méthode timerHandler() est invoquée, ce qui affiche le niveau d’activité en cours (même si un niveau de cinq ou supérieur déclenche la minuterie, le niveau d’activité en cours affiché peut être une valeur inférieure).

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.ActivityEvent; public class Camera_setMotionLevelExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_setMotionLevelExample() { myTextField = new TextField(); myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; }else { myTextField.text = "Waiting to connect."; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); cam.setMotionLevel(5, 1000); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); } private function activityHandler(e:ActivityEvent):void { if (e.activating == true) { t.start(); } else { myTextField.text = "Everything is quiet."; t.stop(); } } private function timerHandler(event:TimerEvent):void { myTextField.x = 10; myTextField.y = cam.height + 20; myTextField.text = "There is some activity. Level: " + cam.activityLevel; } } }
motionLevelmotionTimeoutMicrophone.setSilenceLevel()
setQuality Définit la quantité maximale de bande passante par seconde ou la qualité d’image requise pour les données vidéo sortantes actuelles.bandwidthintSpécifie la quantité maximale de bande passante pouvant être utilisée par la vidéo sortante actuelle, en octets par seconde. Pour spécifier que la vidéo Flash Player peut utiliser autant de bande passante que nécessaire pour conserver la valeur de quality, attribuez la valeur 0 à bandwidth. La valeur par défaut est 16384. qualityintEntier spécifiant le niveau de qualité d’image requis, tel que déterminé par le taux de compression appliqué à chaque image vidéo. Les valeurs acceptables sont comprises entre 1 (qualité la plus médiocre, compression maximale) et 100 (qualité optimale, pas de compression). Pour spécifier que la qualité d’image peut varier autant que nécessaire afin d’éviter un dépassement de la bande passante disponible, attribuez la valeur 0 à quality. Définit la quantité maximale de bande passante par seconde ou la qualité d’image requise pour les données vidéo sortantes actuelles. Cette méthode ne peut généralement être appliquée que si vous transmettez la vidéo via Flash Media Server.

Utilisez-la pour spécifier l’élément de la vidéo sortante le plus important pour votre application, la bande passante ou la qualité de l’image.

  • Pour indiquer que la bande passante est prioritaire, attribuez une valeur à bandwidth et la valeur 0 à quality. Flash Player transmet une vidéo de qualité optimale dans la bande passante spécifiée. Si nécessaire, Flash Player réduit la qualité de l’image afin d’éviter de dépasser la bande passante spécifiée. En général, plus le mouvement augmente, plus la qualité diminue.
  • Pour indiquer que la qualité est prioritaire, transmettez la valeur 0 à bandwidth et une valeur numérique à quality. Flash Player utilise autant de bande passante que nécessaire pour conserver la qualité spécifiée. Si nécessaire, Flash Player réduit la fréquence pour conserver la qualité de l’image. En général, plus le mouvement augmente, plus la consommation de bande passante augmente également.
  • Pour spécifier que la bande passante et la qualité sont aussi importantes l’une que l’autre, transmettez des valeurs numériques aux deux paramètres. Flash Player transmet alors de la vidéo permettant de respecter la qualité requise et ne dépassant pas la bande passante spécifiée. Si nécessaire, Flash Player réduit la fréquence pour conserver la qualité de l’image sans dépasser la bande passante spécifiée.
getCamera()quality
activityLevel Quantité de mouvement détecté par la caméra.Number Quantité de mouvement détecté par la caméra. Les valeurs gérées sont comprises entre 0 (aucun mouvement n’est détecté) et 100 (une grande quantité de mouvement est détectée). La valeur de cette propriété peut vous aider à déterminer s’il est nécessaire de transmettre un paramètre à la méthode setMotionLevel().

Si la caméra est disponible mais qu’elle n’est pas encore utilisée parce que la méthode Video.attachCamera() n’a pas été appelée, cette propriété est définie sur -1.

Si vous diffusez en continu de la vidéo non compressée en local seulement, cette propriété n’est définie que si vous avez affecté une fonction au gestionnaire d’événement. Dans le cas contraire, elle n’est pas définie.

motionLevelsetMotionLevel()
bandwidth Quantité maximale de bande passante pouvant être utilisée par la source vidéo sortante actuelle, en octets.int Quantité maximale de bande passante pouvant être utilisée par la source vidéo sortante actuelle, en octets. Une valeur de 0 signifie que la source peut utiliser autant de bande passante que nécessaire pour conserver la qualité d’image voulue.

Pour définir cette propriété, utilisez la méthode setQuality().

setQuality()
currentFPS Cadence à laquelle la caméra capture des données, en images par seconde.Number Cadence à laquelle la caméra capture des données, en images par seconde. Cette propriété ne peut pas être définie ; toutefois, vous pouvez utiliser la méthode setMode() pour définir une propriété connexe, fps, qui spécifie la cadence maximale à laquelle vous souhaitez que la caméra capture les données. setMode()fps Fréquence maximale à laquelle la caméra peut capturer des données, en images par seconde.Number Fréquence maximale à laquelle la caméra peut capturer des données, en images par seconde. La fréquence maximale possible dépend des capacités de la caméra ; cette fréquence peut ne pas être atteinte.
  • Pour définir une valeur souhaitée pour cette propriété, utilisez la méthode setMode().
  • Pour déterminer la cadence à laquelle la caméra capture actuellement les données, utilisez la propriété currentFPS.
currentFPSsetMode()
height Hauteur de capture actuelle, en pixels.int Hauteur de capture actuelle, en pixels. Pour définir une valeur à cette propriété, utilisez la méthode setMode(). largeursetMode()index Entier (commençant à zéro) qui spécifie l’index de la caméra, tel qu’indiqué dans le tableau renvoyé par la propriété names.int Entier (commençant à zéro) qui spécifie l’index de la caméra, tel qu’indiqué dans le tableau renvoyé par la propriété names. namesgetCamera()isSupported La propriété isSupported est définie sur true si la classe Camera est disponible sur la plate-forme actuelle ; dans le cas contraire, elle est définie sur false.Boolean La propriété isSupported est définie sur true si la classe Camera est disponible sur la plate-forme actuelle ; dans le cas contraire, elle est définie sur false. keyFrameInterval Nombre d’images (appelées images-clés) qui sont transmises intégralement sans être interpolées par l’algorithme de compression vidéo.int Nombre d’images vidéos (appelées images-clés) transmises intégralement sans être interpolées par l’algorithme de compression vidéo. La valeur par défaut, 15, indique que chaque quinzième image est une image-clé. Une valeur de 1 signifie que chaque image est une image-clé. Les valeurs autorisées vont de 1 à 48. setKeyFrameInterval()loopback Indique si les données capturées par la caméra et visionnées localement sont compressées et décompressées (true), comme elles le seraient pour une transmission en directe par le biais de Flash Media Server, ou non compressées (false).Boolean Indique si les données capturées par la caméra et visionnées localement sont compressées et décompressées (true), comme elles le seraient pour une transmission en directe par le biais de Flash Media Server, ou non compressées (false). La valeur par défaut est false.

Le flux compressé est utile pour les tests, par exemple pour obtenir un aperçu des paramètres de qualité vidéo, mais son coût de traitement est important. L’affichage local est compressé, modifié pour être transmis comme il le serait sur une connexion directe, puis décompressé pour l’affichage local.

Pour définir cette valeur, utilisez Camera.setLoopback(). Pour définir le taux de compression utilisé lorsque vous réglez cette propriété sur true, utilisez Camera.setQuality().

setLoopback()setQuality()
motionLevel Quantité de mouvement requis pour invoquer l’événement activity.int Quantité de mouvement requis pour invoquer l’événement activity. Les valeurs gérées sont comprises entre 0 et 100. La valeur par défaut est 50.

La vidéo peut être affichée quelle que soit la valeur de la propriété motionLevel. Pour plus d’informations, voir l’entrée setMotionLevel().

setMotionLevel()
motionTimeout Nombre de millisecondes qui s’écoule entre le moment où la caméra arrête la détection du mouvement et le moment où l’événement activity est appelé.int Nombre de millisecondes qui s’écoule entre le moment où la caméra arrête la détection du mouvement et le moment où l’événement activity est appelé. La valeur par défaut est 2 000 (2 secondes).

Pour définir cette valeur, utilisez setMotionLevel().

setMotionLevel()
muted Valeur booléenne qui indique si l’utilisateur a refusé (true) ou autorisé (false) l’accès à la caméra dans la boîte de dialogue de confidentialité de Flash Player.Boolean Valeur booléenne qui indique si l’utilisateur a refusé (true) ou autorisé (false) l’accès à la caméra dans la boîte de dialogue de confidentialité de Flash Player. Lorsque cette valeur change, l’événement status est distribué. getCamera()statusname Nom de la caméra en cours, tel que renvoyé par le matériel de la caméra.String Nom de la caméra en cours, tel que renvoyé par le matériel de la caméra. namesgetCamera()names Tableau de chaînes qui indique les noms de toutes les caméras disponibles sans afficher la boîte de dialogue de confidentialité de Flash Player.Array Tableau de chaînes qui indique les noms de toutes les caméras disponibles sans afficher la boîte de dialogue de confidentialité de Flash Player. Ce tableau se comporte de la même manière que tout autre tableau ActionScript : il fournit de façon implicite l’index, commençant à zéro, de chaque caméra et le nombre de caméras présentes sur le système (via names.length). Pour plus d’informations, voir l’entrée names dans la section consacrée à la classe Array.

L’appel de la propriété names implique un examen minutieux du matériel. Dans la plupart des cas, vous pouvez utiliser la caméra par défaut.

Sur Android, seule un caméra est prise en charge, même si le périphérique en possède plusieurs. Le nom de la caméra est toujours "Default".

getCamera()indexname
quality Niveau de qualité d’image requis, tel que déterminé par le taux de compression appliqué à chaque image vidéo.int Niveau de qualité d’image requis, tel que déterminé par le taux de compression appliqué à chaque image vidéo. Les valeurs de qualité acceptables sont comprises entre 1 (qualité la plus médiocre, compression maximale) et 100 (qualité optimale, pas de compression). La valeur par défaut est 0, ce qui signifie que la qualité de l’image peut varier si nécessaire pour éviter de dépasser la bande passante disponible.

Pour définir cette propriété, utilisez la méthode setQuality().

setQuality()
width Largeur de capture actuelle, en pixels.int Largeur de capture actuelle, en pixels. Pour définir une valeur souhaitée pour cette propriété, utilisez la méthode setMode(). setMode()
SoundTransform La classe SoundTransform contient des propriétés relatives au volume et à la balance horizontale.Object La classe SoundTransform contient des propriétés relatives au volume et à la balance horizontale. L’exemple suivant charge et lit un fichier MP3. Pendant la lecture du fichier MP3, déplacez la souris ou un autre périphérique de saisie utilisateur ; le volume et la balance changent à mesure que vous déplacez le périphérique de saisie utilisateur sur la scène. Pour exécuter l’exemple, placez un fichier intitulé MySound.mp3 dans le même répertoire que votre fichier SWF. package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.Timer; public class SoundTransformExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundTransformExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.load(request); channel = soundFactory.play(); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function setPan(pan:Number):void { trace("setPan: " + pan.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.pan = pan; channel.soundTransform = transform; } private function setVolume(volume:Number):void { trace("setVolume: " + volume.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.volume = volume; channel.soundTransform = transform; } private function mouseMoveHandler(event:MouseEvent):void { var halfStage:uint = Math.floor(stage.stageWidth / 2); var xPos:uint = event.stageX; var yPos:uint = event.stageY; var value:Number; var pan:Number; if (xPos > halfStage) { value = xPos / halfStage; pan = value - 1; } else if (xPos < halfStage) { value = (xPos - halfStage) / halfStage; pan = value; } else { pan = 0; } var volume:Number = 1 - (yPos / stage.stageHeight); setVolume(volume); setPan(pan); } } } flash.display.SimpleButton.soundTransformflash.display.Sprite.soundTransformflash.media.Microphone.soundTransformflash.media.SoundChannel.soundTransformflash.media.SoundMixer.soundTransformflash.net.NetStream.soundTransformSoundTransform Crée un objet SoundTransform.volNumber1Volume, compris entre 0 (muet) et 1 (volume maximal). panningNumber0Balance horizontale du son, comprise entre -1 (balance à gauche) et 1 (balance à droite). La valeur 0 correspond à une balance équilibrée (centre). Crée un objet SoundTransform. Dans l’exemple suivant, le fichier audio n’est lu qu’à partir du canal droit, et le volume est défini sur 50 pour-cent.

Dans le constructeur, le son est chargé et affecté à un canal audio (channel). Un objet SoundTranform (transform) est également créé. Son premier argument définit le volume sur 50 pour-cent (la plage va de 0.0 à 1.0). Son second argument définit la balance. Dans cet exemple, la balance est définie sur 1.0, ce qui signifie que le son provient du haut-parleur droit uniquement. Pour que ces réglages prennent effet, l’objet SoundTranform transform est attribué à la propriété souundTransform du canal audio.

Remarque : la gestion d’erreur écrite pour cet exemple est limitée.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.events.IOErrorEvent; public class SoundTransform_constructorExample extends Sprite { public function SoundTransform_constructorExample() { var mySound:Sound = new Sound(); var url:URLRequest = new URLRequest("mySound.mp3"); var channel:SoundChannel; var transform:SoundTransform = new SoundTransform(0.5, 1.0); mySound.load(url); channel = mySound.play(); channel.soundTransform = transform; mySound.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
leftToLeft Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée gauche à émettre dans le haut-parleur gauche.Number Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée gauche à émettre dans le haut-parleur gauche. leftToRight Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée gauche à émettre dans le haut-parleur droit.Number Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée gauche à émettre dans le haut-parleur droit. pan Balance horizontale du son, comprise entre -1 (balance à gauche) et 1 (balance à droite).Number Balance horizontale du son, comprise entre -1 (balance à gauche) et 1 (balance à droite). La valeur 0 correspond à une balance équilibrée (centre). rightToLeft Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée droite à émettre dans le haut-parleur gauche.Number Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée droite à émettre dans le haut-parleur gauche. rightToRight Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée droite à émettre dans le haut-parleur droit.Number Valeur, comprise entre 0 (aucun) et 1 (maximum), indiquant la quantité d’entrée droite à émettre dans le haut-parleur droit. volume Volume, compris entre 0 (muet) et 1 (volume maximal).Number Volume, compris entre 0 (muet) et 1 (volume maximal).
StageVideoAvailability Cette classe définit une énumération qui indique si la vidéo sur la scène est actuellement disponible.Enumération qui indique si la vidéo sur la scène est actuellement disponible. Object Cette classe définit une énumération qui indique si la vidéo sur la scène est actuellement disponible. flash.events.StageVideoAvailabilityEventAVAILABLE La vidéo sur la scène est actuellement disponible.availableStringLa vidéo sur la scène est actuellement disponible. La vidéo sur la scène est actuellement disponible. UNAVAILABLE La vidéo sur la scène n’est actuellement pas disponible.unavailableStringLa vidéo sur la scène n’est actuellement pas disponible. La vidéo sur la scène n’est actuellement pas disponible. StageWebView La classe StageWebView affiche le contenu HTML dans une fenêtre d’affichage de la scène.flash.events:EventDispatcher La classe StageWebView affiche le contenu HTML dans une fenêtre d’affichage de la scène.

La classe StageWebView fournit un moyen simple pour afficher du contenu HTML sur les périphériques qui ne prennent pas en charge la classe HTMLLoader. Cette classe ne fournit aucune interaction entre ActionScript et le contenu HTML, sauf à travers les méthodes et les propriétés de la classe StageWebView elle-même. Par exemple, il n’existe aucun moyen de transmettre des valeurs ou d’appeler des fonctions entre ActionScript et JavaScript.

Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur tous les systèmes d’exploitation de bureau et sur tous les périphériques mobiles, mais ne l’est pas sur les périphériques AIR pour TV. Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété StageWebView.isSupported. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

Sur les périphériques des profils mobiles et des profils mobiles étendus, la classe StageWebView utilise le contrôle du système Web proposé par le système d’exploitation du périphérique. Par conséquent, les fonctions disponibles et l’aspect du rendu peuvent varier d’un périphérique à l’autre. Sur les ordinateurs de bureau (dans les profils de bureau et les profils de bureau étendu), la classe StageWebView utilise le moteur WebKit AIR interne. Les fonctionnalités disponibles et l’aspect du rendu sont les mêmes que ceux de la classe HTMLLoader (sans l’intégration étroite et la correspondance de scripts entre ActionScript et JavaScript fournis par une occurrence de HTMLLoader). Testez la propriété isSupported de la classe StageWebView pour déterminer si la classe est prise en charge sur le périphérique actuel.

La classe StageWebView n’est PAS un objet d’affichage et ne peut pas être ajoutée à la liste d’affichage de Flash. Par contre, vous pouvez afficher un objet StageWebView en l’associant directement à une scène à l’aide de la propriété stage. L’occurrence de StageWebView associée à une scène s’affiche au-dessus de n’importe quel objet d’affichage Flash. Vous pouvez contrôler la taille et la position de la zone de rendu avec la propriété viewPort. Il n’existe aucun moyen de contrôler l’ordre de profondeur des différents objets StageWebView. Le chevauchement de deux instances n’est pas recommandé.

Dès que le contenu à l’intérieur de l’objet StageWebView a le focus, l’objet StageWebView a la première occasion de gérer la saisie au clavier. La scène à laquelle l’objet StageWebView est associé distribue toute saisie au clavier qui n’est pas gérée. La capture et la propagation standard d’événements ne s’appliquent pas ici, car l’occurrence de StageWebView ne fait pas partie de la liste d’affichage.

Dans Android 3.0+, l’application doit activer l’accélération matérielle dans l’élément manifestAdditions Android du descripteur d’application AIR pour afficher le contenu des modules d’extension dans un objet StageWebView.

L’exemple suivant définit un objet StageWebView pour remplir la scène. Cet exemple charge un site Web avec la méthode loadURL(), et utilise les touches Retour et Recherche du périphérique pour naviguer dans l’historique. package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.desktop.NativeApplication; public class StageWebViewExample extends MovieClip{ private var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" ); stage.addEventListener( KeyboardEvent.KEY_DOWN, onKey ); } private function onKey( event:KeyboardEvent ):void { if( event.keyCode == Keyboard.BACK && webView.isHistoryBackEnabled ) { trace("Back."); webView.historyBack(); event.preventDefault(); } if( event.keyCode == Keyboard.SEARCH && webView.isHistoryForwardEnabled ) { trace("Forward."); webView.historyForward(); } } } }
Classe HTMLLoaderMark Doherty : AIR sur Android : TweetrAppMark Doherty : Prise en charge d’OAuthActivation de Flash Player et d’autres modules d’extension dans un objet StageWebViewfocusOut Distribué lorsque StageWebView abandonne le focus.flash.events.FocusEvent Distribué lorsque StageWebView abandonne le focus. focusIn Distribué lorsque cet objet StageWebView reçoit le focus.flash.events.FocusEvent Distribué lorsque cet objet StageWebView reçoit le focus. error Indique qu’une erreur est survenue.flash.events.ErrorEvent Indique qu’une erreur est survenue. complete Indique que la dernière opération de chargement sollicitée par la méthode loadString() ou loadURL() est terminée.flash.events.Event.COMPLETEflash.events.EventIndique que la dernière opération de chargement sollicitée par la méthode loadString() ou load() est terminée. Indique que la dernière opération de chargement sollicitée par la méthode loadString() ou load() est terminée. locationChanging Indique que la propriété location de l’objet StageWebView est sur le point d’être modifiée.flash.events.LocationChangeEvent.LOCATION_CHANGINGflash.events.LocationChangeEventIndique que la propriété location de l’objet StageWebView est sur le point d’être modifiée. Indique que la propriété location de l’objet StageWebView est sur le point d’être modifiée.

Un événement locationChanging est distribué uniquement lorsque le changement d’emplacement est initié via le contenu HTML ou le code qui s’exécute à l’intérieur de l’objet StageWebView, notamment lorsqu’un utilisateur clique sur un lien. Par défaut, le nouvel emplacement est affiché dans cet objet StageWebView. Vous pouvez appeler la méthode preventDefault() de l’objet d’événement pour annuler le comportement par défaut. Par exemple, vous pouvez utiliser la fonction flash.net.navigateToURL() pour ouvrir la page dans le navigateur système en fonction de la propriété location de l’objet d’événement.

Aucun événement locationChanging n’est distribué lorsque vous modifiez l’emplacement à l’aide des méthodes suivantes :

  • historyBack()
  • historyForward()
  • historyGo()
  • loadString()
  • loadURL()
  • reload()
locationChange Indique que la propriété location de l’objet StageWebView a été modifiée.flash.events.LocationChangeEvent.LOCATION_CHANGEflash.events.LocationChangeEventIndique que la propriété location de l’objet StageWebView a été modifiée. Signale que la propriété location de l’objet StageWebView a été modifiée.

Il est impossible d’annuler cet événement.

StageWebView Crée un objet StageWebView. Crée un objet StageWebView.

L’objet est invisible tant qu’il n’est pas associé à une scène et tant que la propriété viewPort n’est pas définie.

assignFocus Donne le focus au contenu dans cet objet StageWebView.directionStringnoneIndique si le premier ou le dernier objet pouvant recevoir le focus dans le contenu affiché doit recevoir le focus. Donne le focus au contenu dans cet objet StageWebView.

Les valeurs de direction sont définies dans la classe FocusDirection et comprennent : "bottom", "none" et "top".

FocusDirection
dispose Supprime cet objet StageWebView. Supprime cet objet StageWebView.

L’appel de la méthode dispose() est facultatif. Si vous n’avez pas conservé de référence à cette occurrence de StageWebView, elle peut faire l’objet d’une récupération de place. L’appel de la méthode dispose() peut accélérer la récupération de place ou la faire intervenir à un moment plus opportun.

drawViewPortToBitmapData Crée la fenêtre d’affichage de l’objet StageWebView sur un bitmap. La largeur ou la hauteur de l’image bitmap est différente de celle de la fenêtre d’affichage. ArgumentErrorArgumentErrorLe paramètre bitmap est défini sur null. ErrorErrorbitmapflash.display:BitmapDataObjet BitmapData sur lequel créer la partie visible de la fenêtre d’affichage de l’objet StageWebView. Crée la fenêtre d’affichage de l’objet StageWebView sur un bitmap.

Capturez l’image bitmap et définissez la scène sur null pour afficher le contenu au-dessus de l’objet StageWebView.

L’exemple suivant affiche deux libellés : google et facebook. Le fait de cliquer sur le libellé capture la page Web correspondante et l’affiche sous forme d’instantané sur la scène. package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.*; import flash.geom.Rectangle; import flash.media.StageWebView; import flash.net.*; import flash.text.TextField; public class stagewebview1 extends Sprite { public var webView:StageWebView = new StageWebView(); public var textGoogle:TextField=new TextField(); public var textFacebook:TextField=new TextField(); public function stagewebview() { textGoogle.htmlText="<b>Google</b>"; textGoogle.x=300; textGoogle.y=-80; addChild(textGoogle); textFacebook.htmlText="<b>Facebook</b>"; textFacebook.x=0; textFacebook.y=-80; addChild(textFacebook); textGoogle.addEventListener(MouseEvent.CLICK,goGoogle); textFacebook.addEventListener(MouseEvent.CLICK,goFaceBook); webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); } public function goGoogle(e:Event):void { webView.loadURL("http://www.google.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function goFaceBook(e:Event):void { webView.loadURL("http://www.facebook.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function handleLoad(e:Event):void { var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); webView.drawViewPortToBitmapData(bitmapData); var webViewBitmap:Bitmap=new Bitmap(bitmapData); addChild(webViewBitmap); } } }
historyBack Revient à la page précédente dans l’historique de navigation. Revient à la page précédente dans l’historique de navigation. historyForward Passe à la page suivante dans l’historique de navigation. Passe à la page suivante dans l’historique de navigation. loadString Charge et affiche la chaîne HTML spécifiée.textStringChaîne de contenu HTML ou XHTML à afficher. mimeTypeStringtext/htmlType MIME du contenu, soit "text/html" soit "application/xhtml+xml". Charge et affiche la chaîne HTML spécifiée.

Lors de l’utilisation de la méthode loadString(), la propriété position est signalée comme "about:blank". Seuls les modèles d’URI standard peuvent être utilisés dans les URL de la chaîne HTML. Les modèles d’URI d’AIR, à savoir "app:" et "app-storage:", ne sont pas autorisés.

Le contenu HTML ne peut pas charger des ressources locales, telles que des fichiers image. Les requêtes HTTP XML ne sont pas autorisées.

Seuls les types MIME "text/html" et "application/xhtml+xml" sont pris en charge.

L’exemple suivant définit un objet StageWebView pour remplir la scène. Cet exemple charge une page HTML avec la méthode loadString(). var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); var htmlString:String = "<!DOCTYPE HTML>" + "<html>" + "<body>" + "<h1>Example</h1>" + "<p>King Phillip cut open five green snakes.</p>" + "</body>" + "</html>"; webView.loadString( htmlString, "text/html" );
loadURL Charge la page à l’adresse URL spécifiée.urlString Charge la page à l’adresse URL spécifiée.

L’URL peut utiliser les modèles d’URI suivants : http:, https:, file:, data: et javascript:. Contenu chargé avec le fichier : le modèle peut charger d’autres ressources locales.

L’exemple suivant définit un objet StageWebView pour remplir la scène. Cet exemple charge un site Web avec la méthode loadURL().

Remarque : sur Android, vous devez spécifier une autorisation INTERNET dans votre fichier descripteur d’application AIR pour charger URL distantes.

var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" );
reload Recharge la page en cours. Recharge la page en cours. stop Interrompt l’opération de chargement en cours. Interrompt l’opération de chargement en cours. isHistoryBackEnabled Indique s’il existe une page précédente dans l’historique de navigation.Boolean Indique s’il existe une page précédente dans l’historique de navigation. isHistoryForwardEnabled Indique s’il existe une page suivante dans l’historique de navigation.Boolean Indique s’il existe une page suivante dans l’historique de navigation. isSupported Indique si la classe StageWebView est prise en charge sur le périphérique actuel.Boolean Indique si la classe StageWebView est prise en charge sur le périphérique actuel. location URL de l’emplacement actuel.String URL de l’emplacement actuel. stage Scène sur laquelle cet objet StageWebView est affiché.flash.display:Stage Scène sur laquelle cet objet StageWebView est affiché.

Définissez stage sur null pour masquer cet objet StageWebView.

title Valeur du titre HTML.String Valeur du titre HTML. viewPort Zone sur la scène sur laquelle l’objet StageWebView est affiché.flash.geom:RectangleLa valeur Rectangle n’est pas valide. RangeErrorRangeError Zone sur la scène sur laquelle l’objet StageWebView est affiché.
VideoStatus Cette classe définit une énumération décrivant de possibles niveaux de décodage vidéo.Enumération décrivant de possibles niveaux de décodage vidéo. Object Cette classe définit une énumération décrivant de possibles niveaux de décodage vidéo. ACCELERATED Indique que le décodage vidéo est effectué par accélération matérielle (GPU).acceleratedStringIndique que le décodage vidéo est effectué par accélération matérielle (GPU). Indique que le décodage vidéo est effectué par accélération matérielle (GPU). SOFTWARE Indique que le décodage vidéo est effectué via le logiciel.softwareStringIndique que le décodage vidéo est effectué via le logiciel. Indique que le décodage vidéo est effectué via le logiciel. UNAVAILABLE Le décodage vidéo n’est pas pris en charge.unavailableStringLa vidéo n’est pas prise en charge. Le décodage vidéo n’est pas pris en charge. MediaPromise La classe MediaPromise représente le fichier promis permettant de fournir un objet multimédia.flash.desktop:IFilePromiseflash.events:EventDispatcher La classe MediaPromise représente le fichier promis permettant de fournir un objet multimédia.

La propriété data d’un objet MediaEvent est une occurrence de MediaPromise. Vous pouvez utiliser les méthodes MediaPromise pour accéder à l’objet multimédia promis. Les formats multimédias pris en charge formats sont des images fixes et des vidéos.

Vous ne pouvez pas créer un objet MediaPromise. L’appel de MediaPromise() génère une erreur d’exécution.

MediaEventIFilePromiseLoader.LoadFilePromise()IDataInputCameraRoll.browseForImage()CameraUIcomplete Un objet MediaPromise distribue un événement complete après la lecture de toutes les données.flash.events.Event.COMPLETEflash.events.Event Un objet MediaPromise distribue un événement complete après la lecture de toutes les données. L’événement indique qu’il n’existe plus aucune donnée disponible dans le flux sous-jacent.

Aucun événement complete n’est distribué par une source de données synchrone.

progress Un objet MediaPromise distribue des événements progress au fur et à mesure que les données deviennent disponibles.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Un objet MediaPromise distribue des événements progress lorsque les données deviennent disponibles.

La propriété bytesTotal de tous les événements progress, à l’exception du dernier, a une valeur de 0. Si toutes les données sont disponibles immédiatement, il est possible qu’aucun événement progress ne soit distribué. Aucun événement progress n’est distribué par des sources de données synchrones.

ioError Un objet MediaPromise distribue un événement ioError si une erreur est détectée lors de la lecture du flux de données sous-jacent.flash.events.IOErrorEvent.IOERRORflash.events.IOErrorEvent Un objet MediaPromise distribue un événement ioError si une erreur est détectée lors de la lecture du flux de données sous-jacent. Plus aucune donnée ne peut être lue après la distribution de cet événement. close Un objet MediaPromise distribue un événement close après la fermeture du flux de données sous-jacent.flash.events.Event.CLOSEflash.events.Event Un objet MediaPromise distribue un événement close après la fermeture du flux de données sous-jacent. close Ferme la source de données. Ferme la source de données. open Ouvre la source de données sous-jacente et renvoie l’occurrence de IDataInput permettant de la lire.flash.utils:IDataInput Ouvre la source de données sous-jacente et renvoie l’occurrence de IDataInput permettant de la lire.

Si la source de données sous-jacente est asynchrone, l’objet MediaPromise distribue des événements progress et complete qui indiquent si les données sont disponibles pour la lecture. Si la source de données est synchrone, toutes les données sont immédiatement disponibles et ces événements ne sont pas distribués.

Remarque : vous pouvez charger un objet MediaPromise à l’aide de la méthode loadFilePromise() de la classe Loader au lieu de lire les données manuellement.

Loader.loadFilePromise()
reportError Utilisé par le moteur d’exécution pour signaler des erreurs.eflash.events:ErrorEventL’événement d’erreur à distribuer. Utilisé par le moteur d’exécution pour signaler des erreurs.

Le code de l’application ne doit pas appeler cette méthode.

file Occurrence de File représentant l’objet multimédia, s’il existe.flash.filesystem:File Occurrence de File représentant l’objet multimédia, s’il existe.

Cette propriété fait référence à un objet File si la source de données sous-jacente est basée sur un fichier et si le fichier est accessible à l’application. Dans le cas contraire, cette propriété est null.

isAsync Indique si la source de données sous-jacente est asynchrone ou synchrone.Boolean Indique si la source de données sous-jacente est asynchrone ou synchrone.

mediaType Type général d’éléments multimédias (images ou vidéos).String Type général d’éléments multimédias (images ou vidéos).

Les constantes de la classe MediaType définissent les valeurs possibles de cette propriété :

  • MediaType.IMAGE
  • MediaType.VIDEO
MediaType
relativePath Nom du fichier de l’objet multimédia, s’il existe.String Nom du fichier de l’objet multimédia, s’il existe.

Un nom de fichier est disponible si la source de données sous-jacente est basée sur un fichier et si le fichier est accessible à l’application. Dans le cas contraire, cette propriété est null.

SoundLoaderContext La classe SoundLoaderContext effectue des contrôles de sécurité des fichiers qui chargent le son.Object La classe SoundLoaderContext effectue des contrôles de sécurité des fichiers qui chargent le son. Les objets SoundLoaderContext sont transmis en tant qu’arguments au constructeur et à la méthode load() de la classe Sound.

Lorsque vous employez cette classe, tenez compte du modèle de sécurité suivant :

  • Le chargement et la lecture d’un son ne sont pas autorisés si le fichier appelant se trouve sur un sandbox réseau et que le fichier à charger est local.
  • Par défaut, le chargement et la lecture d’un son sont interdits si le fichier appelant est local et tente de charger et de lire un son distant. Pour que cette opération soit possible, un utilisateur doit accorder une autorisation explicite.
  • Des restrictions s’appliquent à certaines opérations concernant le son. Tout fichier appartenant à un autre domaine ne peut pas accéder aux données d’un son chargé, sauf si vous implémentez un fichier de régulation d’URL. La propriété Sound.id3 et les méthodes SoundMixer.computeSpectrum(), SoundMixer.bufferTime et SoundTransform() comptent parmi les API liées au son qui sont soumises à cette restriction.

Néanmoins, dans Adobe AIR, le contenu du sandbox de sécurité application (contenu installé avec l’application AIR) n’est pas soumis à ces restrictions de sécurité.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

SoundLoaderContext Crée un objet SoundLoaderContext.bufferTimeNumber1000Durée, en secondes, de préchargement dans une mémoire tampon d’un son en flux continu avant que la diffusion ne commence. checkPolicyFileBooleanfalseIndique si l’existence d’un fichier de régulation d’URL doit être vérifiée après le chargement de l’objet (true) ou non. Crée un objet SoundLoaderContext. Dans l’exemple suivant, le tampon des données audio devant être chargées est défini sur trois secondes.

Le premier paramètre d’un objet SoundLoaderContext (context) est utilisé pour augmenter la valeur de tampon par défaut d’une seconde à trois secondes (la valeur est en millisecondes). Si le second paramètre de l’objet SoundLoaderContext est défini sur true, Flash Player recherche un fichier de régulation interdomaines lors du chargement de l’objet Ici, il est défini sur la valeur par défaut false, donc aucun fichier de régulation n’est recherché. La méthode load() de l’objet audio utilisera le paramètre de contexte pour s’assurer que le préchargement des données audio en flux continu dans un tampon prendra trois secondes avant que ces données ne commencent à être diffusées. L’objet URLRequest détermine l’emplacement du fichier, qui correspond à un podcast d’Adobe. Si une erreur IOErrorEvent.IO_ERROR se produit pendant le chargement du fichier audio, la méthode errorHandler() est invoquée.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.events.IOErrorEvent; public class SoundLoaderContextExample extends Sprite { public function SoundLoaderContextExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); var context:SoundLoaderContext = new SoundLoaderContext(3000, false); snd.load(req, context); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
bufferTime Durée, en millisecondes, de préchargement dans une mémoire tampon d’un son en flux continu avant que la diffusion ne commence.1000Number Durée, en millisecondes, de préchargement dans une mémoire tampon d’un son en flux continu avant que la diffusion ne commence.

Vous pouvez remplacer la valeur de SoundLoaderContext.bufferTime en définissant la propriété globale SoundMixer.bufferTime. La propriété SoundMixer.bufferTime affecte uniquement la durée de mise en mémoire tampon des sons en flux continu imbriqués dans un fichier SWF. Elle n’a aucune incidence sur les objets Sound créés dynamiquement (autrement dit, créés dans ActionScript).

checkPolicyFile Indique si l’application doit tenter de télécharger un fichier de régulation d’URL à partir du serveur du son chargé avant de commencer à charger ce dernier.falseBoolean Indique si l’application doit tenter de télécharger un fichier de régulation d’URL à partir du serveur du son chargé avant de commencer à charger ce dernier. Cette propriété s’applique si le son chargé à l’aide de la méthode Sound.load() se trouve en dehors du domaine du fichier appelant.

Définissez cette propriété sur true lorsque vous chargez un son qui se trouve en dehors du domaine du fichier appelant et que le code dans le fichier appelant requiert un accès de niveau bas pour les données du son. Référencer la propriété Sound.id3 pour extraire un objet ID3Info et appeler la méthode SoundMixer.computeSpectrum() pour extraire des échantillons audio du son chargé constituent des exemples d’accès de bas niveau. Si vous tentez d’accéder aux données audio sans régler la propriété checkPolicyFile sur true au chargement, vous risquez d’obtenir une exception SecurityError car le fichier de régulation requis n’a pas été téléchargé.

Si un accès de bas niveau aux données audio que vous chargez est inutile, il est préférable de ne pas régler checkPolicyFile sur true. La recherche d’un fichier de régulation consomme de la bande passante réseau et peut retarder le début du téléchargement. N’effectuez donc cette opération qu’en cas de nécessité.

Lorsque vous appelez Sound.load() en définissant SoundLoaderContext.checkPolicyFile sur true, Flash Player ou AIR doit télécharger un fichier de régulation d’URL approprié, ou déterminer qu’un tel fichier n’existe pas, avant de commencer à télécharger le son spécifié. Flash Player ou AIR exécute les actions suivantes, dans l’ordre indiqué, pour vérifier l’existence d’un fichier de régulation :

  • Flash Player ou AIR examine les fichiers de régulation téléchargés au préalable.
  • Flash Player ou AIR tente de télécharger tout fichier de régulation en attente spécifié dans les appels de Security.loadPolicyFile().
  • Flash Player ou AIR tente de télécharger un fichier de régulation à partir de l’emplacement par défaut qui correspond à l’URL du son, autrement dit /crossdomain.xml sur le même serveur que URLRequest.url (l’URL du son est spécifiée dans la propriété url de l’objet URLRequest transmis à Sound.load() ou à la fonction du constructeur Sound()).

Dans tous les cas, Flash Player ou AIR requiert que le serveur du son héberge un fichier de régulation approprié et que ce fichier autorise l’accès au fichier son à URLRequest.url, sur la base de l’emplacement du fichier de régulation, et qu’il permette au domaine du fichier appelant d’accéder au son par le biais d’une ou plusieurs balises <allow-access-from>.

Si vous réglez checkPolicyFile sur true, Flash Player ouAIR attend la vérification du fichier de régulation avant de télécharger le son. Avant d’effectuer des opérations de bas niveau sur les données audio, en appelant Sound.id3 ou SoundMixer.computeSpectrum() par exemple, attendez que l’objet Sound ait déclenché les événements progress et complete.

Si vous définissez checkPolicyFile sur true et qu’il n’existe aucun fichier de régulation approprié, vous ne recevez aucun message d’erreur tant que vous n’effectuez pas d’opération nécessitant un tel fichier ; dans ce cas Flash Player ou AIR renvoie une exception SecurityError. Une fois que vous avez reçu un événement complete, vous pouvez vérifier qu’un fichier de régulation approprié a été éventuellement trouvé en extrayant la valeur de Sound.id3 d’un bloc try et en vérifiant si une exception SecurityError est renvoyée.

Servez-vous de checkPolicyFile avec précaution si vous téléchargez un son à partir d’une URL qui utilise des redirections HTTP côté serveur. Flash Player ou AIR tente d’extraire les fichiers de régulation correspondant à la propriété url de l’objet URLRequest transmis à Sound.load(). Si le fichier audio final provient d’une URL différente en raison de redirections HTTP, les fichiers de régulation initialement téléchargés peuvent ne pas être applicables à l’URL finale du son, autrement dit l’URL à prendre en compte dans les décisions relatives à la sécurité.

La solution ci-après peut vous permettre de résoudre ce problème. Après la réception d’un événement progress ou complete, vous pouvez examiner la valeur de la propriété Sound.url qui contient l’URL finale du son. Appelez ensuite la méthode Security.loadPolicyFile() en vous basant sur l’URL finale du son pour calculer l’URL du fichier de régulation. Enfin, interrogez Sound.id3 jusqu’à ce qu’aucune exception ne soit renvoyée.

Ceci ne s’applique pas au contenu dans le sandbox de l’application AIR. Le contenu dans le sandbox de l’application a toujours un accès par programmation au contenu sonore, quelle que soit son origine.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

flash.media.Sound.load()flash.media.Sound.id3flash.media.SoundMixer.computeSpectrum()flash.media.Sound.urlflash.system.Security.loadPolicyFile()
SoundChannel La classe SoundChannel contrôle un son dans une application.flash.events:EventDispatcher La classe SoundChannel contrôle un son dans une application. Chaque son est attribué à un canal audio, et l’application peut avoir plusieurs canaux audio mélangés. La classe SoundChannel contient une méthode stop(), des propriétés permettant de contrôler l’amplitude (volume) du canal et une propriété servant à affecter un objet SoundTransform au canal. L’exemple suivant charge un fichier MP3, le lit et affiche des informations sur les événements sonores qui se produisent tandis que le fichier MP3 est chargé et lu. Un objet Timer fournit des informations récentes sur le positionnement de la tête de lecture toutes les 50 millisecondes. Pour exécuter l’exemple, placez un fichier intitulé MySound.mp3 dans le même répertoire que votre fichier SWF. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.utils.Timer; public class SoundChannelExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundChannelExample() { var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); channel = soundFactory.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); positionTimer = new Timer(50); positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler); positionTimer.start(); } private function positionTimerHandler(event:TimerEvent):void { trace("positionTimerHandler: " + channel.position.toFixed(2)); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); positionTimer.stop(); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } private function soundCompleteHandler(event:Event):void { trace("soundCompleteHandler: " + event); positionTimer.stop(); } } } SoundSoundTransformsoundComplete Distribué au terme de la lecture d’un son.flash.events.Event.SOUND_COMPLETEflash.events.Event Distribué au terme de la lecture d’un son. Dans l’exemple suivant, l’utilisateur sélectionne des morceaux dans une liste de lecture, puis sélectionne Lecture pour les écouter dans l’ordre sélectionné.

Dans le constructeur, un champ de texte est défini et contient la liste des chansons et une ligne de sélection des lectures (généralement, des boutons servent à lire et à lister les champs d’une liste de chansons). Un objet text format est défini pour changer le format des lignes de chansons en italique une fois qu’elles sont sélectionnées. Lorsqu’un utilisateur sélectionne le champ de texte, la méthode clickHandler() est invoquée.

Dans la méthode clickHandler(), la méthode getLineIndexAtPoint() de l’objet de champ de texte renvoie l’index de la ligne que l’utilisateur a sélectionnée. A l’aide de l’index de la ligne, la méthode getLineText() obtient le contenu du texte. L’instruction if vérifie si l’utilisateur a sélectionné un élément pour le lire ou pour ajouter une chanson à la liste de lecture. Si l’utilisateur a activé la lecture et qu’un morceau a été sélectionné, l’écouteur d’événement du clic de souris est supprimé et la méthode playNext() est appelée pour commencer la lecture des morceaux. Si l’utilisateur a sélectionné un titre de chanson, le contenu de la ligne est ajouté au tableau songList et le format de la ligne est défini sur italique.

La méthode playNext() charge et lit chaque chanson en faisant une itération dans la liste du tableau. La chanson est également affectée à un canal audio. Un écouteur d’événement du canal audio est ajouté pour répondre lorsque la lecture de la chanson est terminée et l’événement Event.SOUND_COMPLETE est distribué. La méthode soundCompleteHandler() invoque alors la méthode playNext() pour diffuser la chanson suivante. Ce processus se poursuit jusqu’à ce que la lecture de toutes les chansons du tableau soit terminée.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.text.TextFormat; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; public class SoundChannel_event_soundCompleteExample extends Sprite { private var channel:SoundChannel = new SoundChannel(); private var songList:Array = new Array(); private var listTextField:TextField = new TextField(); private var songFormat:TextFormat = new TextFormat(); private var arrayIndex:int = 0; private var songSelected:Boolean = false; public function SoundChannel_event_soundCompleteExample() { listTextField.autoSize = TextFieldAutoSize.LEFT; listTextField.border = true listTextField.background = true; listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY"; songFormat.italic = true; listTextField.addEventListener(MouseEvent.CLICK, clickHandler); addChild(listTextField); } private function clickHandler(e:MouseEvent):void { var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY); var line:String = listTextField.getLineText(index); var firstIndex:uint = listTextField.getLineOffset(index); var playLine:uint = listTextField.numLines - 1; if((index == playLine) && (songSelected == true)) { listTextField.removeEventListener(MouseEvent.CLICK, clickHandler); playNext(); } else if (index != playLine) { songList.push(line.substr(0, (line.length - 1))); listTextField.setTextFormat(songFormat, firstIndex, (firstIndex + listTextField.getLineLength(index))); songSelected = true; } } private function playNext():void { if(arrayIndex < songList.length) { var snd:Sound = new Sound(); snd.load(new URLRequest(songList[arrayIndex])); channel = snd.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); arrayIndex++; } else { songSelected = false; while(arrayIndex > 0) { songList.pop(); arrayIndex--; } } } private function soundCompleteHandler(e:Event):void { playNext(); } private function errorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
stop Arrête la lecture du son dans le canal. Arrête la lecture du son dans le canal. Dans l’exemple suivant, l’utilisateur peut interrompre et reprendre la lecture d’un fichier audio.

Le fichier audio est chargé dans le constructeur (cet exemple suppose que le fichier est dans le même répertoire que le fichier SWF). Un champ de texte est utilisé comme bouton pour que l’utilisateur puisse lire ou interrompre la lecture. Lorsque l’utilisateur sélectionne le champ de texte button, la méthode clickHandler() est invoquée.

Dans la méthode clickHandler(), la première fois que l’utilisateur sélectionne le champ de texte, le son est défini sur lecture et affecté à un canal audio. Lorsque l’utilisateur sélectionne ensuite le champ de texte pour faire une pause, la lecture s’interrompt. La propriété position du canal audio enregistre la position du son au moment où il a été arrêté. Cette propriété est utilisée pour reprendre le son à partir de cette position, une fois que l’utilisateur sélectionne le champ de texte pour relancer la lecture. Chaque fois que la méthode Sound.play() est appelée, un nouvel objet SoundChannel est créé et affecté à la variable channel. L’objet Sound doit être affecté à un objet SoundChannel pour que la méthode stop() du canal audio soit utilisée pour arrêter le son.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLLoader; import flash.net.URLRequest; import flash.text.TextField; import flash.events.MouseEvent; import flash.text.TextFieldAutoSize; public class SoundChannel_stopExample extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var button:TextField = new TextField(); public function SoundChannel_stopExample() { var req:URLRequest = new URLRequest("MySound.mp3"); snd.load(req); button.x = 10; button.y = 10; button.text = "PLAY"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.CENTER; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { var pausePosition:int = channel.position; if(button.text == "PLAY") { channel = snd.play(pausePosition); button.text = "PAUSE"; } else { channel.stop(); button.text = "PLAY"; } } } }
leftPeak Amplitude actuelle (volume) du canal gauche, comprise entre 0 (muet) et 1 (amplitude maximale).Number Amplitude actuelle (volume) du canal gauche, comprise entre 0 (muet) et 1 (amplitude maximale). position Lorsque le fichier est en cours de lecture, la propriété position indique en millisecondes le point en cours de lecture dans le fichier audio.Number Lorsque le fichier est en cours de lecture, la propriété position indique en millisecondes le point en cours de lecture dans le fichier audio. Lorsque la lecture est arrêtée ou interrompue, la propriété position indique le dernier point lu dans le fichier audio.

Généralement, la valeur de la propriété position est enregistrée lorsque la lecture est interrompue. Vous pouvez ensuite reprendre la lecture en redémarrant à partir de cette position enregistrée.

Si le son fait l’objet d’une boucle, la propriété position est réinitialisée à 0 au début de chaque boucle.

rightPeak Amplitude actuelle (volume) du canal droit, comprise entre 0 (muet) et 1 (amplitude maximale).Number Amplitude actuelle (volume) du canal droit, comprise entre 0 (muet) et 1 (amplitude maximale). soundTransform Objet SoundTransform affecté au canal audio.flash.media:SoundTransform Objet SoundTransform affecté au canal audio. Un objet SoundTransform comprend les propriétés de réglage du volume, du déplacement panoramique, ainsi que des haut-parleurs gauche et droit. SoundTransform
SoundMixer La classe SoundMixer contient des propriétés et des méthodes statiques permettant de contrôler globalement le son dans l’application.Object La classe SoundMixer contient des propriétés et des méthodes statiques permettant de contrôler globalement le son dans l’application. La classe SoundMixer contrôle les sons en flux continu intégrés dans l’application. elle ne contrôle pas dynamiquement les sons créés (c’est-à-dire les sons générés en réponse à un objet Sound qui distribue un événement sampleData). areSoundsInaccessible Détermine si des sons sont inaccessibles en raison de restrictions de sécurité.Représentation de la chaîne de la valeur booléenne. Boolean Détermine si des sons sont inaccessibles en raison de restrictions de sécurité. Par exemple, un son chargé à partir d’un domaine différent de celui du contenu appelant cette méthode est inaccessible si le serveur du son ne possède pas de fichier de régulation d’URL autorisant l’accès au domaine de ce domaine. Le son peut cependant être chargé et lu, mais les opérations de bas niveau, telles que l’extraction de métadonnées ID3 pour le son, ne peuvent pas être exécutées sur des sons inaccessibles.

Pour le contenu d’une application AIR dans le sandbox de sécurité de l’application, l’appel à cette méthode renvoie toujours false. Tous les sons, y compris ceux chargés d’autres domaines, sont accessibles au contenu dans le sandbox de sécurité de l’application.

computeSpectrum()
computeSpectrum Génère un instantané de l’onde sonore actuelle et le place dans l’objet ByteArray spécifié.outputArrayflash.utils:ByteArrayObjet ByteArray qui contient les valeurs associées au son. Si certains sons ne sont pas disponibles en raison des restrictions de sécurité (areSoundsInaccessible == true), l’objet outputArray ne subit aucune modification. Si tous les sons sont arrêtés, l’objet outputArray est rempli de zéros. FFTModeBooleanfalseValeur booléenne indiquant si les données audio sont d’abord soumises à une transformation de Fourier. Lorsque ce paramètre correspond à true, la méthode renvoie un spectre de fréquences, plutôt que l’onde sonore brute. Dans le spectre de fréquences, les basses fréquences sont représentées sur la gauche et les hautes fréquences sur la droite. stretchFactorint0Résolution des échantillons audio. Si vous réglez la valeur stretchFactor sur 0, les données sont échantillonnées à 44,1 KHz. Réglez-la sur 1 et elles sont échantillonnées à 22,05 KHz ; sur 2 et elles sont échantillonnées à 11,025 KHz, etc. Génère un instantané de l’onde sonore actuelle et le place dans l’objet ByteArray spécifié. Les valeurs sont mises en forme comme des valeurs à virgule flottante normalisées allant de -1,0 à 1,0. L’objet ByteArray transmis au paramètre outputArray est remplacé par de nouvelles valeurs. La taille de l’objet ByteArray créé est fixée à 512 valeurs à virgule flottante, les 256 premières représentant le canal gauche et les autres le canal droit.

Remarque : cette méthode est soumise aux restrictions relatives à la sécurité des fichiers locaux et aux restrictions concernant le chargement interdomaines. Si vous utilisez des fichiers locaux ou des sons chargés à partir d’un serveur appartenant à un autre domaine que le contenu appelant, vous devez peut-être contourner les restrictions liées au sandbox par le biais d’un fichier de régulation interdomaines. Pour plus d’informations, voir la description de la classe Sound. En outre, cette méthode ne permet pas d’extraire des données de flux RTMP, même si elle est appelée par un contenu résidant dans le même domaine que le serveur RTMP.

Cette méthode est prise en charge sur RTMP dans Flash Player 9.0.115.0 et versions ultérieures, ainsi que dans Adobe AIR. Vous pouvez contrôler l’accès aux flux sur un serveur FMS (Flash Media Server) dans un script coté serveur. Pour plus de détails, voir les propriétés Client.audioSampleAccess et Client.videoSampleAccess dans le Guide de référence du langage ActionScript d’Adobe Flash Media Server côté serveur.

Dans l’exemple suivant, la méthode computeSpectrum() est utilisée pour produire une représentation graphique des données d’ondes acoustiques.

Dans le constructeur, un fichier audio est chargé et défini sur lecture (il n’y a pas de gestion d’erreur dans cet exemple, et le fichier audio est supposé être dans le même répertoire que le fichier SWF). Cet exemple est à l’écoute de l’événement Event.ENTER_FRAME pendant la lecture du son, ce qui déclenche de façon répétée la méthode onEnterFrame() pour le traçage du graphique des valeurs de données audio. Lorsque la lecture d’un son est terminée, la méthode onPlaybackComplete() arrête le processus de dessin en supprimant l’écouteur de l’événement Event.ENTER_FRAME.

Dans la méthode onEnterFrame(), la méthode computeSpectrum() stocke le son brut dans l’objet tableau d’octets bytes. Les données sont échantillonnées à 44,1 KHz. Le tableau d’octets contient 512 octets de données, chacun contenant une valeur à virgule flottante comprise entre -1 et 1. Les 256 premières valeurs représentent le canal gauche et les autres le canal droit. La première boucle for lit les 256 premières valeurs (canal stéréo gauche ) et trace chaque fois une ligne d’un point à l’autre via la méthode Graphics.lineTo() (l’affichage du graphique vectoriel de l’onde acoustique est directement écrit dans l’objet Sprite de la classe). Les octets du son sont lus sous forme de nombre à virgule flottante 32 bits dans le flux d’octets et multipliés par la hauteur du point pour autoriser la plage verticale du graphique. La largeur est définie sur le double de la longueur du canal. La seconde boucle for lit les 256 valeurs suivantes (canal stéréo droit) et trace les lignes en ordre inverse. Les méthodes g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); et g.lineTo(0, PLOT_HEIGHT); tracent la base des ondes. Le dessin de la courbe audio qui en résulte produit un effet miroir.

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.text.TextField; public class SoundMixer_computeSpectrumExample extends Sprite { public function SoundMixer_computeSpectrumExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("Song1.mp3"); snd.load(req); var channel:SoundChannel; channel = snd.play(); addEventListener(Event.ENTER_FRAME, onEnterFrame); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); } private function onEnterFrame(event:Event):void { var bytes:ByteArray = new ByteArray(); const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; SoundMixer.computeSpectrum(bytes, false, 0); var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; for (var i:int = 0; i < CHANNEL_LENGTH; i++) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); g.endFill(); g.lineStyle(0, 0xCC0066); g.beginFill(0xCC0066, 0.5); g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); for (i = CHANNEL_LENGTH; i > 0; i--) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } private function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); } } }
areSoundsInaccessible()flash.utils.ByteArrayflash.media.Soundflash.media.SoundLoaderContext.checkPolicyFile
stopAll Arrête tout son en cours de lecture. Arrête tout son en cours de lecture.

>Dans Flash Professional, cette méthode n’arrête pas la tête de lecture. Les sons diffusés en continu sont émis de nouveau lorsque la tête de lecture passe au-dessus des images les contenant.

Pour utiliser cette propriété, tenez compte du modèle de sécurité suivant :

  • Par défaut, l’appel de la méthode SoundMixer.stopAll() arrête uniquement les sons se trouvant dans le même sandbox de sécurité que l’objet qui appelle la méthode. Les sons dont la lecture n’a pas été lancée à partir du sandbox de l’objet appelant ne sont pas arrêtés.
  • Lorsque vous chargez le son à l’aide de la méthode load() de la classe Sound, vous pouvez spécifier un paramètre context qui est un objet SoundLoaderContext. Si vous réglez la propriété checkPolicyFile de l’objet SoundLoaderContext sur true, Flash Player ou Adobe AIR recherche un fichier de régulation interdomaines sur le serveur à partir duquel le son est chargé. Si le serveur dispose d’un fichier de régulation interdomaines qui autorise le domaine du contenu appelant, ce fichier peut arrêter le son chargé par le biais de la méthode SoundMixer.stopAll() ; dans le cas contraire, il ne peut pas l’arrêter.

Néanmoins, dans Adobe AIR, le contenu du sandbox de sécurité application (contenu installé avec l’application AIR) n’est pas soumis à ces restrictions de sécurité.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

Dans l’exemple suivant, la méthode stopAll() est utilisée pour désactiver deux sons lus en même temps.

Dans le constructeur, deux fichiers audio différents sont chargés et définis sur la lecture. Le premier est chargé localement et attribué à un canal audio (ce fichier est supposé être dans le même répertoire que le fichier SWF). Le second fichier est chargé et diffusé en continu depuis le site d’Adobe. Pour utiliser la méthode SoundMixer.stopAll(), tous les sons doivent être accessibles (un objet SoundLoaderContext peut être utilisé pour rechercher le fichier de régulation interdomaines). Chaque son doit également posséder un écouteur d’événement invoqué lorsqu’une erreur d’E/S survient lors du chargement du fichier audio. Un champ de texte muteButton est également créé. Il écoute un événement de type clic, qui invoque la méthode muteButtonClickHandler().

Dans la méthode muteButtonClickHandler(), si le contenu du champ de texte est « MUTE », la méthode areSoundsInaccessible() vérifie que le mélangeur de sons a accès aux fichiers. Si les fichiers sont accessibles, la méthode stopAll() interrompt les sons. Si le champ de texte est à nouveau sélectionné, la lecture du premier son commence et le contenu du champ de texte est à nouveau défini sur « MUTE ». Cette fois la méthode stopAll() désactive le son en cours de lecture. Notez que la méthode stop() du canal audio peut également être utilisée pour arrêter un son spécifique attribué au canal (pour utiliser la fonctionnalité du canal, le son doit être réaffecté à ce canal à chaque appel de la méthode play()).

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.events.IOErrorEvent; public class SoundMixer_stopAllExample extends Sprite { private var firstSound:Sound = new Sound(); private var secondSound:Sound = new Sound(); private var muteButton:TextField = new TextField(); private var channel1:SoundChannel = new SoundChannel(); public function SoundMixer_stopAllExample() { firstSound.load(new URLRequest("mySound.mp3")); secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3")); firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler); secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler); channel1 = firstSound.play(); secondSound.play(); muteButton.autoSize = TextFieldAutoSize.LEFT; muteButton.border = true; muteButton.background = true; muteButton.text = "MUTE"; muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler); this.addChild(muteButton); } private function muteButtonClickHandler(event:MouseEvent):void { if(muteButton.text == "MUTE") { if(SoundMixer.areSoundsInaccessible() == false) { SoundMixer.stopAll(); muteButton.text = "click to play only one of sound."; } else { muteButton.text = "The sounds are not accessible."; } } else { firstSound.play(); muteButton.text = "MUTE"; } } private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
bufferTime Durée, en secondes, de préchargement dans une mémoire tampon d’un son en flux continu imbriqué avant que la diffusion en continu ne commence.int Durée, en secondes, de préchargement dans une mémoire tampon d’un son en flux continu imbriqué avant que la diffusion en continu ne commence. Les données d’un son chargé, y compris sa durée de préchargement en mémoire tampon, ne sont pas accessibles par un fichier SWF appartenant à un autre domaine, sauf si vous mettez en place un fichier de régulation interdomaines. Pour plus d’informations sur la sécurité et le son, voir la description de la classe Sound. Les données d’un son chargé, y compris sa durée de préchargement en mémoire tampon, ne sont pas accessibles par le code d’un fichier appartenant à un autre domaine, sauf si vous mettez en place un fichier de régulation interdomaines. Néanmoins, dans le sandbox d’application d’une application AIR, le code peut accéder aux données dans des fichiers de son à partir de n’importe quelle source. Pour plus d’informations sur la sécurité et le son, voir la description de la classe Sound.

La propriété SoundMixer.bufferTime affecte uniquement la durée de mise en mémoire tampon des sons en flux continu imbriqués dans un fichier SWF. Elle n’a aucune incidence sur les objets Sound créés dynamiquement (autrement dit, créés dans ActionScript). La valeur de SoundMixer.bufferTime ne peut pas remplacer ni définir la durée de mise en mémoire tampon par défaut spécifiée dans l’objet SoundLoaderContext qui est transmis à la méthode Sound.load().

Sound
soundTransform Objet SoundTransform contrôlant les propriétés audio globales.flash.media:SoundTransform Objet SoundTransform contrôlant les propriétés audio globales. Un objet SoundTransform comprend les propriétés de réglage du volume, du déplacement panoramique, ainsi que des haut-parleurs gauche et droit. L’objet SoundTransform utilisé dans cette propriété fournit des paramètres audio finaux qui sont appliqués à la totalité des sons après l’application de paramètres audio individuels. SoundTransform
CameraUI La classe CameraUI permet de capturer une image figée ou vidéo à l’aide de l’application de caméra par défaut d’un périphérique.flash.events:EventDispatcher La classe CameraUI permet de capturer une image figée ou vidéo à l’aide de l’application de caméra par défaut d’un périphérique.

La méthode launch() demande au périphérique d’ouvrir la caméra par défaut de l’application. L’image ou la vidéo capturée est disponible dans l’objet MediaEvent distribué pour l’événement complete. Etant donné que l’application de caméra par défaut peut enregistrer la vidéo ou l’image dans divers formats, il est possible que le moteur d’exécution d’AIR ne puisse pas charger et afficher l’objet multimédia renvoyé.

Sur certaines plates-formes, l’objet multimédia renvoyé par la caméra est accessible en tant que média promis basé sur un fichier. Sur d’autres, le média promis n’est pas basé sur un fichier, et les propriétés file et relativePath de l’objet MediaPromise sont définies sur null. Evitez de recourir à ces propriétés dans le code utilisé sur plusieurs plates-formes.

Sur certaines plates-formes, l’objet multimédia est automatiquement stocké dans la bibliothèque multimédia du périphérique. Sur ces plates-formes (sur lesquelles les images et les vidéos ne sont pas automatiquement stockées par l’application de caméra par défaut), vous pouvez utiliser la fonction addBitmapData() du dossier Pellicule pour stocker l’objet multimédia.

Sur Android, l’application de caméra par défaut ne s’ouvre pas si la carte de stockage externe n’est pas disponible (notamment lorsque l’utilisateur a installé la carte comme périphérique de stockage de masse USB). En outre, l’application AIR qui lance la caméra perd le focus. Si le périphérique dispose de peu de ressources, le système d’exploitation peut fermer l’application AIR avant que la capture de l’objet multimédia ne soit terminée.

Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur les périphériques mobiles, mais ne l’est pas sur les systèmes d’exploitation de bureau ou sur les périphériques AIR pour TV. Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété CameraUI.isSupported. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

L’exemple suivant utilise la classe CameraUI pour lancer l’application de caméra par défaut sur le périphérique. Lorsque l’utilisateur prend une photo, l’exemple place l’image sur la liste d’affichage. package { import flash.desktop.NativeApplication; import flash.display.Loader; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MediaEvent; import flash.media.CameraUI; import flash.media.MediaPromise; import flash.media.MediaType; public class CameraUIStillImage extends MovieClip{ private var deviceCameraApp:CameraUI = new CameraUI(); private var imageLoader:Loader; public function CameraUIStillImage() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraUI.isSupported ) { trace( "Initializing camera..." ); deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured ); deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled ); deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError ); deviceCameraApp.launch( MediaType.IMAGE ); } else { trace( "Camera interface is not supported."); } } private function imageCaptured( event:MediaEvent ):void { trace( "Media captured..." ); var imagePromise:MediaPromise = event.data; if( imagePromise.isAsync ) { trace( "Asynchronous media promise." ); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded ); imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError ); imageLoader.loadFilePromise( imagePromise ); } else { trace( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); showMedia( imageLoader ); } } private function captureCanceled( event:Event ):void { trace( "Media capture canceled." ); NativeApplication.nativeApplication.exit(); } private function asyncImageLoaded( event:Event ):void { trace( "Media loaded in memory." ); showMedia( imageLoader ); } private function showMedia( loader:Loader ):void { this.addChild( loader ); } private function cameraError( error:ErrorEvent ):void { trace( "Error:" + error.text ); NativeApplication.nativeApplication.exit(); } } }
Michael Chaize : Android, AIR et la caméracancel L’événement cancel est distribué lorsque l’utilisateur ferme l’IU de la caméra sans enregistrer d’image ou de vidéo.flash.events.Event.CANCELflash.events.Event L’événement cancel est distribué lorsque l’utilisateur ferme l’IU de la caméra sans enregistrer d’image ou de vidéo. error L’événement error est distribué lorsqu’il s’avère impossible d’ouvrir la caméra par défaut.flash.events.ErrorEvent.ERRORflash.events.ErrorEvent L’événement error est distribué lorsqu’il s’avère impossible d’ouvrir la caméra par défaut. complete L’événement complete est distribué lorsque l’utilisateur capture une image figée ou capture une vidéo dans l’interface utilisateur de la caméra.flash.events.MediaEvent.COMPLETEflash.events.MediaEvent L’événement complete est distribué lorsque l’utilisateur capture une image figée ou capture une vidéo dans l’interface utilisateur de la caméra. CameraUI Crée un objet CameraUI. Crée un objet CameraUI. launch Lance l’application de caméra par défaut sur le périphérique.requestedMediaTypeStringType d’objet multimédia à capturer. Les valeurs valides de ce paramètre sont définies dans la classe MediaType :
  • MediaType.IMAGE
  • MediaType.VIDEO
Lance l’application de caméra par défaut sur le périphérique.

Cette classe permet de capturer soit des images fixes soit de la vidéo. La capture de vidéo utilise le profil de caméra "Low Quality" sur le périphérique.

Lors de l’appel de la méthode launch(), l’application de caméra par défaut est invoquée sur le périphérique. L’application AIR perd le focus et attend que l’utilisateur capture une image fixe ou termine la capture de vidéo. Une fois que l’utilisateur capture l’objet multimédia de son choix, l’application AIR retrouve le focus et cet objet CameraUI distribue un événement complete. Si l’utilisateur annule l’opération, cet objet CameraUI distribue un événement cancel.

Remarque : il est possible que le système d’exploitation d’Android ferme l’application AIR lorsque cette dernière se trouve en arrière-plan et attend que l’utilisateur capture une image ou une vidéo. Le cas échéant, l’utilisateur doit redémarrer l’application. L’application AIR ne distribue pas d’événement multimédia pour la capture d’image précédente.

Vous pouvez accéder aux fichiers multimédias capturés à l’aide de la propriété data de l’objet MediaEvent distribué pour l’événement complete. Cette propriété est une occurrence de la classe MediaPromise, que vous pouvez charger dans votre application à l’aide de la méthode loadFilePromise() de la classe Loader. Notez que la caméra du périphérique peut enregistrer les fichiers multimédias capturés dans divers formats. La vidéo est particulièrement problématique à cet égard. Il peut s’avérer impossible d’afficher l’objet multimédia capturé dans AIR.

MediaTypeMediaPromiseLoader.loadFilePromise()completeflash.events:MediaEventDistribué lors de la capture d’un objet multimédia. Distribué lors de la capture d’un objet multimédia.cancelflash.events:EventDistribué lorsque l’utilisateur quitte la caméra native sans capturer d’objet multimédia. Distribué lorsque l’utilisateur quitte la caméra native sans capturer d’objet multimédia.errorflash.events:ErrorEventDistribué si l’application de caméra par défaut est déjà en cours d’utilisation. Distribué si l’application de caméra par défaut est déjà en cours d’utilisation.errorflash.events:ErrorEventDistribué si l’application AIR se trouve à l’arrière-plan lorsqu’elle appelle cette fonction. Distribué si l’application AIR se trouve à l’arrière-plan lorsqu’elle appelle cette fonction.
isSupported Indique si la classe CameraUI est prise en charge sur le périphérique actuel.Boolean Indique si la classe CameraUI est prise en charge sur le périphérique actuel.
SoundCodec La classe SoundCodec énumère les valeurs constantes utilisées lors de la définition de la propriété codec de la classe Microphone.Object La classe SoundCodec énumère les valeurs constantes utilisées lors de la définition de la propriété codec de la classe Microphone. NELLYMOSER Spécifie que le codec Nellymoser doit être utilisé pour la compression audio.NellyMoserString Spécifie que le codec Nellymoser doit être utilisé pour la compression audio. Cette constante est la valeur par défaut de la propriété Microphone.codec. SPEEX Spécifie que le codec Speex doit être utilisé pour la compression audio.SpeexString Spécifie que le codec Speex doit être utilisé pour la compression audio. CameraRoll La classe CameraRoll permet d’accéder aux données d’image dans la bibliothèque multimédia du système ou dans le dossier Pellicule. Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur les périphériques mobiles, mais ne l’est pas sur les systèmes d’exploitation de bureau ou sur les périphériques AIR pour TV.flash.events:EventDispatcher La classe CameraRoll permet d’accéder aux données d’image dans la bibliothèque multimédia du système ou dans le dossier Pellicule.

Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur les périphériques mobiles, mais ne l’est pas sur les systèmes d’exploitation de bureau ou sur les périphériques AIR pour TV. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

La méthode CameraRoll.addBitmapData() ajoute une image à la bibliothèque multimédia propre au périphérique. Pour savoir si votre application prend en charge la méthode CameraRoll.addBitmapData() à l’exécution, vérifiez la propriété CameraRoll.supportsAddBitmapData.

La méthode CameraRoll.browseForImage() ouvre une boîte de dialogue de sélection d’images qui permet à l’utilisateur de choisir une image dans la bibliothèque multimédia. Lorsque l’utilisateur sélectionne une image, l’objet CameraRoll distribue un événement select. Utilisez l’objet MediaEvent distribué pour cet événement pour accéder à l’image choisie. Pour savoir si votre application prend en charge la méthode CameraRoll.browseForImage() à l’exécution, vérifiez la propriété CameraRoll.supportsBrowseForImage.

cancel Distribué lorsqu’un utilisateur annule une opération de recherche d’image sans sélectionner d’image.flash.events.Event.CANCELflash.events.Event Distribué lorsqu’un utilisateur annule une opération de recherche d’image sans sélectionner d’image. select Distribué lorsqu’un utilisateur sélectionne une image de la bibliothèque multimédia du périphérique.flash.events.MediaEvent.SELECTflash.events.MediaEvent Distribué lorsqu’un utilisateur sélectionne une image de la bibliothèque multimédia du périphérique.

L’objet MediaEvent distribué pour cet événement permet d’accéder au fichier multimédia choisi.

error L’événement error est distribué lorsqu’une erreur se produit.flash.events.ErrorEvent.ERRORflash.events.ErrorEvent L’événement error est distribué lorsqu’une erreur se produit.

Les sources d’erreurs sont les suivantes :

  • Il est impossible d’ouvrir un explorateur d’images.
  • Un explorateur d’images est en cours d’utilisation.
  • L’application AIR tente de rechercher une image alors qu’elle se trouve dans l’arrière-plan.
  • Il est impossible d’ajouter une image à la bibliothèque multimédia.
  • Une méthode est appelée qui n’est pas prise en charge sur le périphérique.
complete Indique qu’une opération addBitmapData() a été correctement effectuée.flash.events.Event.COMPLETEflash.events.Event Indique qu’une opération addBitmapData() a été correctement effectuée. CameraRoll Crée un objet CameraRoll. Crée un objet CameraRoll.

Une seule bibliothèque multimédia est prise en charge par ActionScript. Tous les objets CameraRoll sont enregistrés dans le même référentiel d’images.

addBitmapData Ajoute une image au dossier Pellicule du périphérique.bitmapDataflash.display:BitmapDataObjet BitmapData contenant l’image à envoyer au dossier Pellicule. Ajoute une image au dossier Pellicule du périphérique.

Pour savoir si votre application prend en charge la méthode CameraRoll.addBitmapData() à l’exécution, vérifiez la propriété CameraRoll.supportsAddBitmapData.

browseForImage Ouvre une boîte de dialogue d’explorateur d’images pour que l’utilisateur puisse sélectionner une image existante du dossier Pellicule du périphérique. Ouvre une boîte de dialogue d’explorateur d’images pour que l’utilisateur puisse sélectionner une image existante du dossier Pellicule du périphérique.

Lorsque l’utilisateur sélectionne une image, cette occurrence de CameraRoll distribue un événement select contenant un objet MediaEvent. Utilisez la propriété data de l’objet MediaEvent pour charger l’image. La propriété data est un objet MediaPromise que vous pouvez charger à l’aide de la méthode loadFilePromise() de la classe Loader.

Pour savoir si votre application prend en charge la méthode CameraRoll.browseForImage() à l’exécution, vérifiez la propriété CameraRoll.supportsBrowseForImage.

package flash.media.examples { import flash.media.CameraRoll; import flash.media.MediaPromise; import flash.media.MediaType; import flash.events.MediaEvent; import flash.events.Event; import flash.display.Loader; import flash.display.Sprite; import flash.events.IOErrorEvent; import flash.display.StageAlign; import flash.display.StageScaleMode; public class CameraRollTest extends Sprite{ private var mediaSource:CameraRoll = new CameraRoll(); public function CameraRollTest() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraRoll.supportsBrowseForImage ) { log( "Browsing for image..." ); mediaSource.addEventListener( MediaEvent.SELECT, imageSelected ); mediaSource.addEventListener( Event.CANCEL, browseCanceled ); mediaSource.browseForImage(); } else { log( "Browsing in camera roll is not supported."); } } private var imageLoader:Loader; private function imageSelected( event:MediaEvent ):void { log( "Image selected..." ); var imagePromise:MediaPromise = event.data; imageLoader = new Loader(); if( imagePromise.isAsync ) { log( "Asynchronous media promise." ); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, imageLoaded ); imageLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, imageLoadFailed ); imageLoader.loadFilePromise( imagePromise ); } else { log( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); this.addChild( imageLoader ); } } private function browseCanceled( event:Event ):void { log( "Image browse canceled." ); } private function imageLoaded( event:Event ):void { log( "Image loaded asynchronously." ); this.addChild( imageLoader ); } private function imageLoadFailed( event:Event ):void { log( "Image load failed." ); } private function log( text:String ):void { trace( text ); } } }
MediaEventMediaPromiseLoader.loadFilePromise()selectflash.events:MediaEventDistribué lorsque l’utilisateur choisit une image. Distribué lorsque l’utilisateur choisit une image.cancelflash.events:EventDistribué lorsque l’utilisateur annule l’opération de recherche. Distribué lorsque l’utilisateur annule l’opération de recherche.errorflash.events:ErrorEventDistribué si l’application de l’explorateur d’images par défaut est en cours d’utilisation. Distribué si l’application de l’explorateur d’images par défaut est en cours d’utilisation.errorflash.events:ErrorEventDistribué si l’application AIR se trouve à l’arrière-plan lorsqu’elle appelle cette fonction. Distribué si l’application AIR se trouve à l’arrière-plan lorsqu’elle appelle cette fonction.
supportsAddBitmapData Indique si la méthode CameraRoll.addBitmapData() est prise en charge.Boolean Indique si la méthode CameraRoll.addBitmapData() est prise en charge. Actuellement, cette fonction est uniquement prise en charge dans les applications AIR sur des périphériques mobiles. supportsBrowseForImage Indique si la méthode CameraRoll.browseForImage() est prise en charge.BooleanIndique si la méthode CameraRoll.browseForImage() est prise en charge. Indique si la méthode CameraRoll.browseForImage() est prise en charge. Actuellement, cette fonction est uniquement prise en charge dans les applications AIR sur des périphériques mobiles.
Microphone Utilisez la classe Microphone pour gérer ou capturer un son à partir d’un microphone.flash.events:EventDispatcher Utilisez la classe Microphone pour gérer ou capturer un son à partir d’un microphone.

Pour obtenir une référence à une occurrence de Microphone, utilisez la méthode Microphone.getMicrophone() ou la méthode Microphone.getEnhancedMicrophone(). Une occurrence de Microphone améliorée peut exécuter l’annulation de l’écho acoustique. Utilisez l’annulation de l’écho acoustique pour créer des applications audio/vidéo en temps réel qui n’exigent pas l’utilisation d’un casque.

Création d’une application de dialogue en ligne en temps réel

Pour créer une application de dialogue en ligne en temps réel, capturez des données audio et envoyez-les à Flash Media Server. Utilisez les classes NetConnection et NetStream pour transmettre le flux audio à Flash Media Server. Flash Media Server peut diffuser le son à d’autres clients. Pour créer une application de dialogue en ligne qui n’exige pas l’utilisation d’un casque, utilisez l’annulation de l’écho acoustique. L’annulation de l’écho acoustique empêche la boucle de réaction acoustique (qui se produit lorsque le son pénètre dans un microphone) de sortir des haut-parleurs et d’entrer à nouveau dans le microphone. Pour utiliser l’annulation de l’écho acoustique, appelez la méthode Microphone.getEnhancedMicrophone() afin d’obtenir une référence à une occurrence de Microphone. Définissez Microphone.enhancedOptions sur une occurrence de la classe MicrophoneEnhancedOptions pour configurer les paramètres.

Lecture locale du son du microphone

Appelez la méthode setLoopback() du microphone pour acheminer le son du microphone directement vers la sortie audio de l’ordinateur local ou du périphérique. Une réaction acoustique incontrôlée constitue un danger sous-jacent susceptible de se produire chaque fois que la sortie audio peut être captée par l’entrée du microphone. La méthode setUseEchoSuppression() peut réduire, mais pas éliminer, le risque de réaction acoustique.

Capture du son du microphone pour l’enregistrement ou le traitement local

Pour capturer le son du microphone, écoutez les événements sampleData distribués par une occurrence de Microphone. L’objet SampleDataEvent distribué pour cet événement contient les données audio.

Pour plus d’informations sur la capture vidéo, voir la classe Camera.

Prise en charge du microphone par le moteur d’exécution

La classe Microphone n’est pas prise en charge dans Flash Player s’exécutant dans un navigateur mobile.

Prise en charge du profil AIR : la classe Microphone est prise en charge sur les systèmes d’exploitation de bureau, mais ne l’est pas sur tous les périphériques mobiles. Elle n’est pas prise en charge sur les périphériques AIR pour TV. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

Vous pouvez tester la prise en charge lors de l’exécution à l’aide de la propriété Microphone.isSupported. Notez que pour les périphériques AIR pour TV, Microphone.isSupported est true, mais Microphone.getMicrophone() renvoie toujours null.

Commandes de confidentialité

Flash Player affiche une boîte de dialogue Confidentialité qui permet à l’utilisateur d’autoriser ou de refuser l’accès au microphone. La taille de la fenêtre de votre application doit être d’au moins 215 x 138 pixels, taille minimale requise pour afficher la boîte de dialogue ; dans le cas contraire, l’accès est automatiquement refusé.

Le contenu qui s’exécute dans le sandbox de sécurité de l’application AIR n’a pas besoin d’autorisation pour accéder au microphone et aucune boîte de dialogue ne s’affiche. Le contenu AIR qui s’exécute en dehors du sandbox de l’application nécessite une autorisation et la boîte de dialogue Confidentialité s’affiche.

L’exemple suivant capture le son en utilisant la suppression de l’écho à partir du microphone une fois l’autorisation d’accès à l’ordinateur accordée par l’utilisateur. La méthode Security.showSettings() affiche la boîte de dialogue Flash Player qui demande l’autorisation d’accéder au microphone de l’utilisateur. L’appel à setLoopBack(true) réachemine l’entrée sur le haut-parleur local de sorte que vous pouvez entendre le son tandis que vous exécutez l’exemple.

Deux écouteurs surveillent les événements activity et status. L’événement activity est distribué au début et à la fin (si elle existe) de la session, et il est capturé par la méthode activityHandler() qui assure le suivi des informations sur l’événement. L’événement status est distribué si l’objet microphone joint signale des informations d’état ; sa capture et son suivi sont assurés par le biais de la méthode statusHandler().

Remarque : un microphone doit être branché sur votre ordinateur pour le bon déroulement de cet exemple.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.media.Cameraflash.media.MicrophoneEnhancedModeflash.media.MicrophoneEnhancedOptionsaYo Binitie : mise en œuvre de la fonctionnalité de suppression de l’écho acoustique dans des applications Flash/FlexCristophe Coenraets : Notes vocales pour AndroidMichael Chaize : AIR, Android et le microphonestatus Distribué lorsqu’un microphone publie son état.flash.events.StatusEvent.STATUSflash.events.StatusEvent Distribué lorsqu’un microphone publie son état. Si la valeur de la propriété code est réglée sur "Microphone.Muted", l’utilisateur a interdit au fichier SWF d’accéder au microphone. Si la valeur de la propriété code est réglée sur "Microphone.Unmuted", l’utilisateur a autorisé le fichier SWF à accéder au microphone.

Les événements d’état ne sont pas distribués dans les applications d’Adobe AIR ; il est impossible de modifier dynamiquement l’accès au microphone. Les applications AIR peuvent toujours accéder au microphone sur la plupart des plates-formes. Sur Android, l’application doit spécifier l’autorisation RECORD_AUDIO d’Android dans le descripteur d’application. Dans le cas contraire, Android refuse l’accès au microphone.

Microphone.getMicrophone()
sampleData Distribué lorsque le microphone dispose de données audio dans la mémoire tampon.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Distribué lorsque le microphone dispose de données audio dans la mémoire tampon.

La propriété Microphone.rate détermine le nombre d’échantillons générés par seconde. Le nombre d’échantillons par événement est un facteur du nombre d’échantillons par seconde et représente le temps d’attente entre des appels d’événements.

L’exemple suivant capture 4 secondes d’échantillons audio depuis le microphone par défaut, puis lit l’audio. Assurez-vous qu’un microphone est connecté. micSampleDataHandler() est l’écouteur d’événement de l’événement sampleData de l’objet Microphone. La méthode micSampleDataHandler() obtient les échantillons à mesure qu’ils sont disponibles, puis ajoute leurs valeurs à un objet ByteArray. Un objet Timer est défini pour 4 secondes. L’objet Timer supprime l’événement sampleData de l’écouteur d’événement de l’objet Microphone, crée un objet Sound, puis ajoute un écouteur d’événement sampleData pour l’objet Sound. L’écouteur d’événement sampleData de l’objet Sound, la méthode playbackSampleHandler(), fournit des échantillons audio en vue de la lecture de l’objet Sound. Ces échantillons audio sont extraits de l’objet ByteArray qui a stocké les échantillons Microphone. Les échantillons sont écrits dans l’objet Sound à deux reprises, étant donné que les échantillons Microphone sont enregistrés en son mono et que l’objet Sound sollicite des paires d’échantillons en stéréo. La propriété rate de l’objet Microphone est définie sur 44 pour correspondre au taux d’échantillonnage de 44 kHz utilisé par les objets Sound. const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); var timer:Timer = new Timer(DELAY_LENGTH); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); var soundBytes:ByteArray = new ByteArray(); function micSampleDataHandler(event:SampleDataEvent):void { while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); } } function timerHandler(event:TimerEvent):void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); timer.stop(); soundBytes.position = 0; var sound:Sound = new Sound(); sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler); sound.play(); } function playbackSampleHandler(event:SampleDataEvent):void { for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) { var sample:Number = soundBytes.readFloat(); event.data.writeFloat(sample); event.data.writeFloat(sample); } } L’exemple suivant capture le son en utilisant la suppression de l’écho à partir du microphone une fois l’autorisation d’accès à l’ordinateur accordée par l’utilisateur. La méthode Security.showSettings() affiche la boîte de dialogue Flash Player qui demande l’autorisation d’accéder au microphone de l’utilisateur. L’appel à setLoopBack(true) réachemine l’entrée sur le haut-parleur local de sorte que vous pouvez entendre le son tandis que vous exécutez l’exemple.

Deux écouteurs surveillent les événements activity et status. L’événement activity est distribué au début et à la fin (si elle existe) de la session, et il est capturé par la méthode activityHandler() qui assure le suivi des informations sur l’événement. L’événement status est distribué si l’objet microphone joint signale des informations d’état ; sa capture et son suivi sont assurés par le biais de la méthode statusHandler().

Remarque : un microphone doit être branché sur votre ordinateur pour le bon déroulement de cet exemple.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.events.SampleDataEvent
activity Distribué lorsqu’un microphone commence ou arrête l’enregistrement suite à la détection d’un silence.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Distribué lorsqu’un microphone commence ou arrête l’enregistrement suite à la détection d’un silence.

Pour spécifier la quantité de son requise pour déclencher cet événement avec une propriété activating true ou le délai devant s’écouler sans son pour déclencher cet événement avec une propriété activating false, utilisez Microphone.setSilenceLevel().

Pour qu’un objet Microphone distribue des événements d’activité, l’application doit surveiller l’entrée, soit en appelant setLoopback( true ), soit en écoutant les événements sampleData, soit en associant le microphone à un objet NetStream.

setSilenceLevel()
getEnhancedMicrophone Renvoie une référence à un objet Microphone optimisé capable d’annuler l’écho acoustique.Une référence à un objet Microphone pour capturer des données audio. En cas d’échec d’initialisation de l’amélioration du son, renvoie null. flash.media:Microphoneindexint-1Index du microphone. Renvoie une référence à un objet Microphone optimisé capable d’annuler l’écho acoustique. Utilisez l’annulation de l’écho acoustique pour créer des applications audio/vidéo qui n’exigent pas l’utilisation d’un casque.

Le paramètre index des méthodes Microphone.getEnhancedMicrophone() et Microphone.getMicrophone() fonctionne de la même façon.

Important : vous pouvez, à un moment donné, disposer d’une seule occurrence de microphone amélioré. Toutes les autres occurrences de Microphone cessent de fournir des données audio et reçoivent un événement StatusEvent dont la propriété de code est Microphone.Unavailable. En cas d’échec d’initialisation de l’amélioration du son, les appels à cette méthode renvoient null, la définition d’une valeur pour Microphone.enhancedOptions n’a aucun effet et toutes les occurrences existantes de Microphone fonctionnent comme avant.

Pour configurer un objet Microphone amélioré, définissez la propriété Microphone.enhancedOptions. Le code suivant utilise un objet Microphone amélioré et l’annulation de l’écho acoustique en duplex intégral dans un test local :

	     var mic:Microphone = Microphone.getEnhancedMicrophone();
	     var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
	     options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
	     mic.enhancedOptions = options;
	     mic.setLoopBack(true);
	 

La méthode setUseEchoSuppression() est ignorée lors de l’utilisation de l’annulation de l’écho acoustique.

Lorsqu’un fichier SWF tente d’accéder à l’objet renvoyé par la méthode Microphone.getEnhancedMicrophone(), par exemple lorsque vous appelez NetStream.attachAudio(), Flash Player affiche une boîte de dialogue Confidentialité qui permet à l’utilisateur d’autoriser ou de refuser l’accès au microphone. (assurez-vous que la taille de votre scène est d’au moins 215 x 138 pixels ; il s’agit de la taille minimale requise par Flash Player pour afficher cette boîte de dialogue).

Microphone.getMicrophone()Microphone.enhancedOptionsMicrophone.status
getMicrophone Renvoie une référence à un objet Microphone pour capturer des données audio.Une référence à un objet Microphone pour capturer des données audio. flash.media:Microphoneindexint-1Index du microphone. Renvoie une référence à un objet Microphone pour capturer des données audio. Pour commencer la capture du flux audio, vous devez relier l’objet Microphone à un objet NetStream (voir NetStream.attachAudio()).

Plusieurs appels à Microphone.getMicrophone() font référence au même microphone. Ainsi, si votre code contient les lignes mic1 = Microphone.getMicrophone() et mic2 = Microphone.getMicrophone(), les lignes mic1 et mic2 font référence au même microphone (par défaut).

En général, il est préférable de ne pas transmettre de valeur pour index. Il vous suffit d’appeler la méthode air.Microphone.getMicrophone() pour renvoyer une référence au microphone par défaut. La section Paramètres du microphone du panneau Paramètres Adobe Flash Player permet à l’utilisateur de spécifier le microphone par défaut que l’application doit utiliser. (Pour accéder au panneau Paramètres Adobe Flash Player, l’utilisateur doit cliquer avec le bouton droit de la souris sur le contenu de Flash Player s’exécutant dans un navigateur Web.) Si vous transmettez une valeur pour index, vous pouvez référencer un microphone différent de celui que l’utilisateur a choisi. Vous pouvez utiliser index en de rares occasions, par exemple si votre application capture un flux audio à partir de deux microphones simultanément. Le contenu s’exécutant dans Adobe AIR utilise également le microphone par défaut défini dans Flash Player.

Utilisez la propriété Microphone.index pour obtenir la valeur d’index de l’objet Microphone actif. Vous pouvez ensuite transmettre cette valeur aux autres méthodes de la classe Microphone.

Lorsqu’un fichier SWF tente d’accéder à l’objet renvoyé par la méthode Microphone.getMicrophone(), par exemple lorsque vous appelez NetStream.attachAudio(), Flash Player affiche une boîte de dialogue Confidentialité qui permet à l’utilisateur d’autoriser ou de refuser l’accès au microphone (assurez-vous que la taille de votre scène est d’au moins 215 x 138 pixels ; il s’agit de la taille minimale requise par Flash Player pour afficher cette boîte de dialogue).

Lorsque l’utilisateur répond à cette boîte de dialogue, un événement status indiquant la réponse de l’utilisateur est distribué. Vous pouvez également vérifier la propriété Microphone.muted pour déterminer si l’utilisateur a autorisé ou interdit l’accès au microphone.

Si Microphone.getMicrophone() renvoie la valeur null, cela signifie que le microphone est utilisé par une autre application ou qu’aucun microphone n’est installé sur le système. Pour déterminer si un microphone est installé, utilisez Microphones.names.length. Pour afficher le panneau Paramètres du microphone de Flash Player, qui permet à l’utilisateur de choisir le microphone référencé par Microphone.getMicrophone(), utilisez Security.showSettings().

L’exemple suivant indique comment demander l’accès au microphone de l’utilisateur à l’aide de la méthode statique Microphone.getMicrophone() et en écoutant l’événement status. Exemple fourni par ActionScriptExamples.com. var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(); mic.addEventListener(StatusEvent.STATUS, mic_status); var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "Detecting microphone..."; addChild(tf); function mic_status(evt:StatusEvent):void { tf.text = "Microphone is muted?: " + mic.muted; switch (evt.code) { case "Microphone.Unmuted": tf.appendText("\n" + "Microphone access was allowed."); break; case "Microphone.Muted": tf.appendText("\n" + "Microphone access was denied."); break; } }
Microphone.statusflash.net.NetStream.attachAudio()flash.system.Security.showSettings()statusflash.events:StatusEventDistribué lorsqu’un microphone publie son état. Si la propriété code est réglée sur Microphone.Muted, l’utilisateur a interdit au fichier SWF d’accéder à son microphone. Si la propriété code est réglée sur Microphone.Unmuted, l’utilisateur a autorisé le fichier SWF à accéder à son microphone. Distribué lorsqu’un microphone publie son état.
setLoopBack Dirige le flux audio capturé par un microphone vers les haut-parleurs locaux.stateBooleantrue Dirige le flux audio capturé par un microphone vers les haut-parleurs locaux. setSilenceLevel Définit le niveau d’entrée minimal devant être considéré comme du son et (éventuellement) la durée de silence indiquant le début du silence.silenceLevelNumberVolume sonore requis pour activer le microphone et distribuer l’événement activity. Les valeurs gérées sont comprises entre 0 et 100. timeoutint-1Nombre de millisecondes qui doit s’écouler sans activité avant que Flash Player ou Adobe AIR considère que le son a cessé pour distribuer l’événement dispatch. La valeur par défaut est 2 000 (2 secondes). (Remarque : la valeur par défaut indiquée dans la signature, -1, est une valeur interne qui indique à Flash Player ou Adobe AIR d’utiliser 2 000). Définit le niveau d’entrée minimal devant être considéré comme du son et (éventuellement) la durée de silence indiquant le début du silence.
  • Pour empêcher le microphone de détecter le son, attribuez la valeur 100 au paramètre silenceLevel ; dans ce cas, l’événement activity n’est jamais distribué.
  • Pour déterminer le volume sonore actuellement détecté par le microphone, utilisez Microphone.activityLevel.

Speex inclut la détection d’activité vocale (VAD) et réduit automatiquement la bande passante si aucune voix n’est détectée. Lorsque vous utilisez le codec Speex, Adobe vous conseille de définir le niveau de silence sur 0.

La détection de l’activité est la capacité à détecter les niveaux audio indiquant qu’une personne est en train de parler. Lorsqu’une personne ne parle pas, il est possible d’économiser de la bande passante car il n’est pas nécessaire d’envoyer le flux audio correspondant. Ces informations peuvent également être utilisées à des fins de réponse visuelle afin que les utilisateurs (ou d’autres personnes) sachent qu’ils sont silencieux.

Les valeurs de silence correspondent directement aux valeurs d’activité. La valeur d’activité 0 est associée au silence total. La valeur d’activité 100 est associée à un bruit fort constant (maximum enregistrable selon le paramètre de gain actuel). Une fois le gain ajusté convenablement, votre valeur d’activité est inférieure à votre valeur de silence lorsque vous ne parlez pas. Inversement, lorsque vous parlez, la valeur d’activité dépasse celle du silence.

Cette méthode est similaire à la méthode Camera.setMotionLevel() ; ces deux méthodes sont utilisées pour spécifier à quel moment il convient de distribuer l’événement activity. Toutefois, leur impact sur la publication des flux diffère de manière significative :

  • Camera.setMotionLevel() est conçu pour détecter le mouvement et n’a aucune incidence sur l’utilisation de la bande passante. La vidéo est envoyée peu importe qu’un flux vidéo détecte du mouvement ou non.
  • Microphone.setSilenceLevel() est conçu pour optimiser la bande passante. Lorsqu’un flux audio est considéré comme étant silencieux, aucune donnée audio n’est envoyée. En revanche, un message unique indiquant le début du silence est envoyé.
flash.media.Camera.setMotionLevel()flash.media.Microphone.activityLevelflash.media.Microphone.activityflash.media.Microphone.gainflash.media.Microphone.silenceLevelflash.media.Microphone.silenceTimeout
setUseEchoSuppression Spécifie s’il convient d’utiliser la fonctionnalité de suppression de l’écho du codec audio.useEchoSuppressionBooleanValeur booléenne indiquant s’il est nécessaire d’utiliser la fonctionnalité de suppression de l’écho (true) ou pas (false). Spécifie s’il convient d’utiliser la fonctionnalité de suppression de l’écho du codec audio. La valeur par défaut est false sauf si l’utilisateur sélectionne l’option Réduire l’écho dans le panneau Paramètres du microphone de Flash Player.

La suppression de l’écho vise à réduire les effets de la réaction acoustique créée lorsque le son qui sort du haut-parleur est capté par le microphone sur un même système. (Elle diffère de l’annulation de l’écho acoustique qui supprime entièrement la réaction acoustique. La méthode setUseEchoSuppression() est ignorée lorsque vous appelez la méthode getEnhancedMicrophone() en vue d’utiliser l’annulation de l’écho acoustique.)

En général, il est recommandé de supprimer l’écho lorsque le son capturé est lu via les haut-parleurs, et non via le casque. Si votre fichier SWF autorise les utilisateurs à spécifier le périphérique de sortie audio, il peut être souhaitable d’appeler Microphone.setUseEchoSuppression(true) s’ils précisent qu’ils utilisent les haut-parleurs et qu’ils ont également l’intention d’utiliser le microphone.

Les utilisateurs peuvent également ajuster ces paramètres dans le panneau Paramètres du microphone de Flash Player.

flash.media.Microphone.setUseEchoSuppression()flash.media.Microphone.useEchoSuppression
activityLevel Volume sonore détecté par le microphone.Number Volume sonore détecté par le microphone. Les valeurs gérées sont comprises entre 0 (aucun son n’est détecté) et 100 (un son de grande intensité est détecté). La valeur de cette propriété peut vous aider à déterminer la valeur qu’il convient de transmettre à la méthode Microphone.setSilenceLevel().

Si la propriété muted du microphone est définie sur true, la valeur de cette propriété est toujours -1.

flash.media.Microphone.getMicrophone()flash.media.Microphone.setSilenceLevel()flash.media.Microphone.gain
codec Codec à utiliser pour la compression audio.String Codec à utiliser pour la compression audio. Les codecs disponibles sont Nellymoser (valeur par défaut) et Speex. La classe d’énumération SoundCodec contient les différentes valeurs valides pour la propriété codec.

Si vous utilisez le codec Nellymoser, vous pouvez définir le taux d’échantillonnage à l’aide de la méthode Microphone.rate() . Si vous utilisez le codec Speex, le taux d’échantillonnage est défini sur 16 kHz.

Speex inclut la détection d’activité vocale (VAD) et réduit automatiquement la bande passante si aucune voix n’est détectée. Lorsque vous utilisez le codec Speex, Adobe vous conseille de définir le niveau de silence sur 0. Pour définir le niveau de silence, utilisez la méthode Microphone.setSilenceLevel().

setSilenceLevel()
enableVAD Active la détection de l’activité vocale Speex.Boolean Active la détection de l’activité vocale Speex. encodeQuality Qualité du discours codé lorsque le codec Speex est utilisé.int Qualité du discours codé lorsque le codec Speex est utilisé. Les valeurs possibles sont comprises entre 0 et 10. La valeur par défaut est 6. Les nombres les plus élevés offrent une plus grande qualité mais consomment davantage de bande passante, comme le montre le tableau suivant. Les valeurs de vitesses de transmission énumérées représentent les vitesses de transmission nettes sans la surcharge de la mise en paquets.

Valeur de QualityVitesse de transmission requise (Kbits par seconde)0 3,9515,7527,7539,80412,8516,8620,6723,8827,8934,21042,2

codec
enhancedOptions Contrôle les options du microphone amélioré.flash.media:MicrophoneEnhancedOptions Contrôle les options du microphone amélioré. Pour plus d’informations, voir la classe MicrophoneEnhancedOptions. Cette propriété est ignorée pour les occurrences de Microphone non améliorées. flash.media.MicrophoneEnhancedOptionsframesPerPacket Nombre d’images de discours Speex transmises dans un paquet (message).int Nombre d’images de discours Speex transmises dans un paquet (message). La longueur de chaque image est 20 ms. La valeur par défaut est deux images par paquet.

Plus un message comporte d’images Speex, moins la bande passante requise est élevée, mais plus l’envoi du message est retardé. Moins d’images Speex augmente la bande passante, mais réduit le retard.

gain Valeur selon laquelle le microphone amplifie le signal. Number Valeur selon laquelle le microphone amplifie le signal. Les valeurs valides sont comprises entre 0 et 100. La valeur par défaut est 50. flash.media.Microphone.gainindex Index du microphone, tel qu’indiqué dans le tableau renvoyé par Microphone.names.int Index du microphone, tel qu’indiqué dans le tableau renvoyé par Microphone.names. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesisSupported La propriété isSupported est définie sur true si la classe Microphone est disponible sur la plate-forme actuelle ; dans le cas contraire, elle est définie sur false.Boolean La propriété isSupported est définie sur true si la classe Microphone est disponible sur la plate-forme actuelle ; dans le cas contraire, elle est définie sur false. muted Spécifie si l’utilisateur a refusé (true) ou autorisé (false) l’accès au microphone.Boolean Spécifie si l’utilisateur a refusé (true) ou autorisé (false) l’accès au microphone. Lorsque cette valeur change, un événement status est distribué. Pour plus d’informations, voir Microphone.getMicrophone(). flash.media.Microphone.getMicrophone()flash.media.Microphone.statusname Nom du périphérique de capture audio actuel, tel que renvoyé par le matériel de capture de son.String Nom du périphérique de capture audio actuel, tel que renvoyé par le matériel de capture de son. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesnames Tableau de chaînes contenant les noms de tous les périphériques de capture audio disponibles.Array Tableau de chaînes contenant les noms de tous les périphériques de capture audio disponibles. Les noms sont renvoyés sans qu’il soit nécessaire d’afficher le panneau des paramètres de confidentialité de Flash Player à l’intention de l’utilisateur. Ce tableau indique l’index (commençant à zéro) de chaque périphérique de capture audio, ainsi que le nombre de ces périphériques présents dans le système, par le biais de la propriété Microphone.names.length. Pour plus d’informations, voir l’entrée de la classe Array.

L’appel de la propriété Microphone.names exige un examen minutieux du matériel et plusieurs secondes peuvent être nécessaires pour composer le tableau. Dans la plupart des cas, vous pouvez utiliser le microphone par défaut.

Remarque : pour connaître le nom du microphone actif, utilisez la propriété name.

Arrayflash.media.Microphone.nameflash.media.Microphone.getMicrophone()
noiseSuppressionLevel Atténuation maximale du bruit, en dB (nombre négatif), utilisée pour le codeur Speex.int Atténuation maximale du bruit, en dB (nombre négatif), utilisée pour le codeur Speex. Si elle est activée, la suppression du bruit est appliquée au son capturé via le microphone avant la compression Speex. Sélectionnez 0 pour désactiver la suppression du bruit. La suppression du bruit est activée par défaut avec une l’atténuation maximale de -30 dB. Cette propriété est ignorée lorsque le codec Nellymoser est sélectionné. rate Taux auquel le microphone capture le son, en kHz.int Taux auquel le microphone capture le son, en kHz. Les valeurs possibles sont 5, 8, 11, 22 et 44. La valeur par défaut est 8 kHz si votre périphérique de capture audio prend en charge cette valeur. Dans le cas contraire, la valeur par défaut correspond au niveau de capture supérieur à 8 kHz immédiatement disponible et pouvant être pris en charge par votre périphérique de capture audio, généralement 11 kHz.

Remarque : la vitesse réelle diffère légèrement de la valeur rate, comme indiqué dans le tableau suivant :

Valeur rateFréquence actuelle4444,100 Hz2222,050 Hz1111,025 Hz88,000 Hz55,512 Hz
flash.media.Microphone.rate
silenceLevel Volume sonore requis pour activer le microphone et distribuer l’événement activity.Number Volume sonore requis pour activer le microphone et distribuer l’événement activity. La valeur par défaut est 10. flash.media.Microphone.gainflash.media.Microphone.setSilenceLevel()silenceTimeout Nombre de millisecondes qui s’écoule entre le moment où le microphone arrête la détection du son et le moment où l’événement activity est appelé.int Nombre de millisecondes qui s’écoule entre le moment où le microphone arrête la détection du son et le moment où l’événement activity est distribué. La valeur par défaut est 2 000 (2 secondes).

Pour définir cette valeur, utilisez la méthode Microphone.setSilenceLevel().

flash.media.Microphone.setSilenceLevel()
soundTransform Contrôle le son de cet objet Microphone lorsque le mode loopback est activé.flash.media:SoundTransform Contrôle le son de cet objet Microphone lorsque le mode loopback est activé. useEchoSuppression Définit true si la fonctionnalité de suppression de l’écho est activée ; false dans le cas contraire.Boolean Définit true si la fonctionnalité de suppression de l’écho est activée ; false dans le cas contraire. La valeur par défaut est false sauf si l’utilisateur sélectionne l’option Réduire l’écho dans le panneau Paramètres du microphone de Flash Player. flash.media.Microphone.setUseEchoSuppression()
StageVideo L’objet StageVideo utilise les fonctions d’accélération matérielle du périphérique, si elles sont disponibles, pour afficher des vidéos enregistrées ou en direct dans une application.flash.events:EventDispatcher L’objet StageVideo utilise les fonctions d’accélération matérielle du périphérique, si elles sont disponibles, pour afficher des vidéos enregistrées ou en direct dans une application. La plupart des périphériques disposent de fonctionnalités d’accélération matérielle. L’objet StageVideo prend en charge les mêmes formats vidéo que l’objet Video. Voir la classe flash.net.NetStream pour plus d’informations sur ces formats.

Prise en charge du profil AIR : dans AIR 2.5, cette fonctionnalité est prise en charge uniquement sur les périphériques qui exécutent AIR pour TV. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.

La vidéo affichée par l’objet StageVideo apparaît toujours dans une zone rectangulaire sur la scène, derrière tous les objets d’affichage Flash. L’objet StageVideo profite par conséquent de l’accélération matérielle tout en prenant en charge le cas d’affichage vidéo le plus courant : une zone d’affichage rectangulaire incrustée avec des commandes vidéo.

Il est plus avantageux d’utiliser un objet StageVideo qu’un objet Video, et cela à plusieurs égards :

  • Performances d’affichage vidéo optimales en raison de l’utilisation de l’accélération matérielle.
  • Diminution de l’utilisation des ressources processeur et de la consommation d’énergie.
  • Flexibilité et la créativité pour le développement de contenu, tels que des commandes vidéo, qui apparaît devant le StageVideo objet.

Etant donné que l’objet StageVideo utilise les fonctionnalités matérielles du périphérique, il est soumis aux contraintes suivantes par rapport à un objet Video :

  • La zone d’affichage vidéo ne peut être qu’un rectangle. Il est impossible d’utiliser des zones d’affichage plus avancées, telles que des formes elliptiques ou irrégulières.
  • Vous ne pouvez pas faire pivoter un objet StageVideo.
  • Vous ne pouvez pas mettre un objet StageVideo en cache sous forme de bitmap.
  • Vous ne pouvez pas utiliser BitmapData pour accéder aux données vidéo.
  • Vous ne pouvez pas incorporer la vidéo dans le fichier SWF. Vous pouvez utiliser un objet StageVideo uniquement avec l’objet NetStream.
  • Vous ne pouvez pas appliquer de filtres, de modes de fusion ou de valeurs alpha à un objet StageVideo.
  • Vous ne pouvez pas appliquer de transformations de couleur, de transformations 3D ou de transformations de matrice à un objet StageVideo.
  • Vous ne pouvez pas appliquer un masque ou la propriété scale9Grid à un objet StageVideo.
  • Les modes de fusion que vous appliquez à des objets d’affichage qui se trouvent à l’avant-plan d’un objet StageVideo ne s’appliquent pas à l’objet StageVideo.
  • Vous pouvez positionner un objet StageVideo uniquement sur les limites de pixels pleines.
  • Pour chaque fichier SWF, Flash Player limite à quatre le nombre d’objets StageVideo pouvant simultanément afficher des vidéos. La limite réelle peut néanmoins être inférieure, selon les ressources matérielles du périphérique. Sur les périphériques AIR pour TV, seul un objet StageVideo à la fois peut afficher une vidéo.
  • La durée vidéo n’est pas synchronisée avec la durée du contenu Flash qu’affiche le moteur d’exécution.
  • Bien que la présentation vidéo soit optimisée en fonction du matériel, elle n’est pas exactement identique au niveau des pixels sur tous les périphériques. De légères variations peuvent avoir lieu en raison des différences entre les pilotes et les périphériques.
  • Certains périphériques ne prennent pas en charge tous les espaces colorimétriques requis. Par exemple, certains périphériques ne prennent pas en charge BT.709, la norme H. 264. Dans de tels cas, vous pouvez utiliser BT.601 pour un affichage rapide.
  • Vous ne pouvez pas utiliser la vidéo sur la scène avec les paramètres WMODE normal, opaque et transparent. La vidéo sur la scène prend en charge uniquement WMODE=direct lorsqu’elle n’est pas en mode plein écran. WMODE n’a aucun effet dans Safari 4 ou une version ultérieure, IE 9 ou une version ultérieure, ou AIR pour TV.

Voici un récapitulatif de la méthode d’utilisation d’un objet StageVideo pour lire une vidéo :

  1. Ecoutez l’événement StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY pour savoir quand l’objet vectoriel Stage.stageVideos a changé. (Non pris en charge sur AIR 2.5 pour TV.)
  2. Si l’événement StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY indique que la vidéo sur la scène est disponible, utilisez l’objet vectoriel Stage.stageVideos à l’intérieur du gestionnaire d’événement pour accéder à un objet StageVideo. Dans AIR 2.5 pour TV, accédez à l’objet vectoriel Stage.stageVideos après le rendu de la première image SWF. Remarque : il est impossible de créer un objet StageVideo.
  3. Associez-lui un objet NetStream à l’aide de StageVideo.attachNetStream().
  4. Lisez la vidéo à l’aide de NetStream.play().
  5. Ecoutez l’événement StageVideoEvent.RENDER_STATE sur l’objet StageVideo afin de déterminer l’état de lecture de la vidéo. La réception de cet événement indique également que les propriétés width et height de la vidéo ont été initialisées ou modifiées.
  6. Ecoutez l’événement VideoEvent.RENDER_STATE sur l’objet Video. Cet événement offre les mêmes états que l’événement StageVideoEvent.RENDER_STATE ; vous pouvez donc également l’utiliser pour déterminer si l’accélération matérielle (GPU) est disponible. La réception de cet événement indique également que les propriétés width et height de la vidéo ont été initialisées ou modifiées. (Non pris en charge sur AIR 2.5 pour TV.)

Si un événement StageVideoEvent.RENDER_STATE indique qu’il est impossible de lire la vidéo, vous pouvez faire marche arrière et utiliser un objet Video au lieu d’un objet StageVideo. Cet événement est distribué après que la vidéo a été associée à un objet NetStream et lors de sa lecture. Par ailleurs, selon la plate-forme, tout changement de l’état de lecture peut entraîner la distribution de l’événement. Gérez l’événement StageVideoEvent.RENDER_STATE pour vérifier si l’application lit ou ne lit pas la vidéo.

Si une vidéo en cours d’exécution passe en mode plein écran à partir d’un WMODE qui ne prend pas en charge la vidéo sur la scène, la vidéo sur la scène peut devenir disponible. De même, si l’utilisateur quitte le mode plein écran, la vidéo sur la scène peut devenir indisponible. Dans ces cas, l’objet vectoriel Stage.stageVideos change. Pour recevoir une notification de ce changement, écoutez l’événement StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABITY. REMARQUE : cette notification n’est pas disponible dans AIR 2.5 pour TV.

flash.events.StageVideoEventflash.events.StageVideoAvailabilityEventflash.events.VideoEventflash.display.Stage.stageVideosflash.media.Videoflash.net.NetStreamUtilisation de la classe StageVideo pour le rendu par accélération matériellerenderState Distribué par l’objet StageVideo lorsque l’état du rendu de l’objet StageVideo change.flash.events.StageVideoEvent.RENDER_STATEflash.events.StageVideoEvent Distribué par l’objet StageVideo lorsque l’état du rendu de l’objet StageVideo change. attachNetStream Spécifie un flux vidéo à afficher dans le cadre de l’objet StageVideo dans l’application.netStreamflash.net:NetStreamObjet NetStream. Pour annuler la connexion à l’objet StageVideo, transmettez null. Spécifie un flux vidéo à afficher dans le cadre de l’objet StageVideo dans l’application. Le flux vidéo est soit un fichier vidéo lu avec NetStream.play(), soit null. Il est possible de stocker un fichier vidéo sur le système de fichiers local ou sur le serveur Flash Media Server. Si la valeur de l’argument netStream correspond à null, la vidéo n’est plus lue dans l’objet StageVideo.

Avant d’appeler attachNetStream() une deuxième fois, appelez la méthode close() de l’objet NetStream actuellement associé. L’appel de la méthode close() libère toutes les ressources, y compris les décodeurs matériels, ayant contribué à la lecture de la vidéo. Vous pouvez ensuite appeler la méthode attachNetStream() avec un autre objet NetStream ou avec null.

Il n’est pas nécessaire d’utiliser cette méthode si un fichier vidéo contient uniquement des données audio ; la partie audio d’un fichier vidéo est automatiquement lue lors de l’appel de la méthode NetStream.play(). Pour contrôler les données audio associées à un fichier vidéo, utilisez la propriété soundTransform de l’objet NetStream qui lit le fichier vidéo.

colorSpaces Renvoie les noms des espaces colorimétriques disponibles pour cette surface vidéo. Renvoie les noms des espaces colorimétriques disponibles pour cette surface vidéo. En règle générale, cette liste inclut "BT.601" et "BT.709". Sur certaines configurations, seul "BT.601" est pris en charge, ce qui signifie qu’une vidéo n’est peut-être pas rendue dans l’espace colorimétrique approprié.

Remarque : sur les périphériques AIR pour TV, une valeur de "BT.601" indique une lecture logicielle et une valeur de "BT.709" une lecture matérielle.

depth Niveau de profondeur d’un objet StageVideo par rapport à d’autres objets StageVideo.intProfondeur d’un objet StageVideo par rapport à d’autres objets StageVideo. Niveau de profondeur d’un objet StageVideo par rapport à d’autres objets StageVideo.

Les objets StageVideo s’affichent toujours derrière d’autres objets sur la scène. Si une plate-forme prend en charge plusieurs objets StageVideo, la propriété depth indique le niveau de profondeur d’un objet StageVideo. La propriété depth de l’objet StageVideo inférieur a la plus petite valeur. Si le même paramètre de profondeur est défini sur plusieurs objets StageVideo, l’ordre d’affichage de ces objets dans l’objet vectoriel Stage.stageVideos détermine leur profondeur relative.

Remarque : les périphériques AIR pour TV ne prennent en charge qu’un seul objet StageVideo. Par conséquent, cette propriété n’est pas applicable à ces périphériques. Il s’agit d’un espace réservé pour la prise en charge future sur d’autres périphériques.

flash.display.Stage.stageVideos
pan Réglage panoramique pour afficher la vidéo, spécifié en tant qu’objet Point.flash.geom:PointLa valeur Point n’est pas valide. RangeErrorRangeErrorDétermine quel rectangle d’une vidéo ayant fait l’objet d’un zoom s’affiche. Réglage panoramique pour afficher la vidéo, spécifié en tant qu’objet Point.

Par défaut, la valeur pan est de (0,0). Cette valeur par défaut centre la vidéo dans le rectangle spécifié par StageVideo.viewPort.

La valeur pan est significative uniquement lorsque la valeur de la propriété zoom n’est pas la valeur par défaut (1.0, 1.0). Lorsqu’une vidéo s’affiche dans le rectangle StageVideo.viewPort avec la valeur zoom par défaut, la plate-forme dimensionne la vidéo pour la faire tenir exactement dans le rectangle. L’intégralité de la vidéo est donc visible. Toutefois, si un facteur de zoom est spécifié, la vidéo n’est pas visible dans son intégralité. Dans ce cas, vous pouvez définir la valeur pan pour indiquer le sous-rectangle de la vidéo à afficher dans le rectangle StageVideo.viewPort.

Les valeurs valides de la propriété pan sont comprises entre (-1.0, -1.0) et (1.0, 1.0). Plus précisément :

  • Une valeur pan de (-1.0, -1.0) place le pixel supérieur gauche de la vidéo dans le coin supérieur gauche du rectangle StageVideo.viewPort.
  • Une valeur pan de (1.0, 1.0) place le pixel inférieur droit de la vidéo dans le coin inférieur droit du rectangle StageVideo.viewPort.
  • Une valeur pan de (1.0, -1.0) place le pixel supérieur droit de la vidéo dans le coin supérieur droit du rectangle StageVideo.viewPort.
  • Une valeur pan de (-1.0, 1.0) place le pixel inférieur gauche de la vidéo dans le coin inférieur gauche du rectangle StageVideo.viewPort.

Valeurs de panoramique comprises entre -1.0 et 1.0 selon l’échelle.

Si vous définissez la propriété pan sur une valeur en dehors de la plage valide, une exception RangeError est renvoyée. Le moteur d’exécution rétablit la dernière valeur valide.

En outre, n’oubliez pas que pour utiliser un objet StageVideo, vous devez affecter un élément de l’objet vectoriel Stage.stageVideos à une variable StageVideo. Lorsque vous définissez la propriété pan de la variable StageVideo, l’élément vectoriel Stage.stageVideos sous-jacent est également modifié. Si, par la suite, vous affectez cet élément à une autre variable StageVideo pour lire une autre vidéo, réinitialisez la propriété pan.

zoom
videoHeight Nombre entier spécifiant la hauteur en pixels du flux vidéo.int Nombre entier spécifiant la hauteur en pixels du flux vidéo.

Vous pouvez utiliser cette propriété, notamment pour garantir que l’utilisateur regarde la vidéo à la même hauteur que celle à laquelle elle a été capturée, quel que soit le format du rectangle StageVideo.viewPort.

videoWidth Nombre entier spécifiant la largeur en pixels du flux vidéo.int Nombre entier spécifiant la largeur en pixels du flux vidéo.

Vous pouvez utiliser cette propriété, notamment pour garantir que l’utilisateur regarde la vidéo à la même largeur que celle à laquelle elle a été capturée, quel que soit le format du rectangle StageVideo.viewPort.

viewPort Position absolue et dimension de la surface vidéo, en pixels.flash.geom:RectangleLa valeur Rectangle n’est pas valide. RangeErrorRangeError Position absolue et dimension de la surface vidéo, en pixels.

La position de la vidéo est calculée par rapport au coin supérieur gauche de la scène.

Les valeurs valides des propriétés x et y de l’objet Rectangle viewPort sont comprises entre -8192 et 8191. Par conséquent, vous pouvez positionner la vidéo entièrement ou partiellement hors de la scène. Vous pouvez également faire en sorte que la vidéo soit plus grande que la scène en définissant les propriétés width et height de l’objet viewPort sur des valeurs supérieures à celles de la scène.

zoom Paramètre de zoom de la vidéo, spécifié en tant qu’objet Point.flash.geom:PointLa valeur Point n’est pas valide. RangeErrorRangeErrorParamètre de zoom de la vidéo. Paramètre de zoom de la vidéo, spécifié en tant qu’objet Point.

Le point de zoom est un facteur d’échelle. Par défaut, la valeur zoom est de (1.0, 1.0). Cette valeur par défaut affiche l’intégralité de la vidéo dans le rectangle StageVideo.viewPort.

Les valeurs valides de la propriété zoom sont comprises entre (1.0, 1.0) et (16.0, 16.0). La propriété x de l’objet Point de type zoom spécifie la valeur de zoom des pixels horizontaux, et la propriété y la valeur de zoom des pixels verticaux.

Par exemple, une valeur zoom de (2.0, 2.0) affiche uniquement la moitié des pixels horizontaux et la moitié des pixels verticaux dans le rectangle StageVideo.viewPort. En d’autres termes, la vidéo remplit occupe encore le rectangle StageVideo.viewPort, mais seule la moitié de la vidéo est visible, ce qui crée un effet de zoom x2. De même, une valeur zoom de (16.0, 16.0) affiche uniquement 1/16 des pixels horizontaux et 1/16 des pixels verticaux dans le rectangle StageVideo.viewPort, ce qui permet d’effectuer un zoom avant sur la valeur maximale x16.

Lorsque vous définissez la propriété zoom, définissez la propriété pan de sorte que le rectangle StageVideo.viewPort affiche le sous-rectangle approprié de la vidéo.

Envisagez la situation suivante, où il est utile de définir une valeur différente pour les propriétés x et y de l’objet Point de type zoom. Notez tout d’abord que lorsqu’une vidéo s’affiche dans le rectangle StageVideo.viewPort avec la valeur zoom par défaut, la plate-forme dimensionne la vidéo pour la faire tenir exactement dans le rectangle. Si le rectangle de la vidéo n’est pas mis à l’échelle uniformément dans le rectangle StageVideo.viewPort, il est possible que l’affichage vidéo soit déformé. En d’autres termes, les formats de la vidéo et le rectangle StageVideo.viewPort ne sont pas égaux. Ce cas de figure peut se présenter si, par exemple, la largeur de la vidéo est différente de la hauteur alors que la propriété StageVideo.viewPort spécifie un carré. Pour corriger la déformation, définissez différentes valeurs pour les propriétés x et y de l’objet Point de type zoom. Définissez ensuite la propriété pan pour vous assurer que le rectangle StageVideo.viewPort affiche le sous-rectangle approprié de la vidéo.

Si vous définissez la propriété zoom sur une valeur en dehors de la plage valide, une exceptionRangeError est renvoyée. Le moteur d’exécution rétablit la dernière valeur valide.

En outre, n’oubliez pas que pour utiliser un objet StageVideo, vous devez affecter un élément de l’objet vectoriel Stage.stageVideos à une variable StageVideo. Lorsque vous définissez la propriété zoom de la variable StageVideo, l’élément vectoriel Stage.stageVideos sous-jacent est également modifié. Si, par la suite, vous affectez cet élément à une autre variable StageVideo pour lire une autre vidéo, réinitialisez la propriété zoom.

pan
MicrophoneEnhancedOptions La classe MicrophoneEnhancedOptions fournit des options de configuration pour une amélioration du son (annulation de l’écho acoustique).Object La classe MicrophoneEnhancedOptions fournit des options de configuration pour une amélioration du son (annulation de l’écho acoustique). L’annulation de l’écho acoustique permet à plusieurs parties de communiquer dans une application de dialogue en ligne audio/vidéo sans utiliser de casque.

Pour utiliser l’annulation de l’écho acoustique, appelez Microphone.getEnhancedMicrophone() afin d’obtenir une référence à un objet Microphone amélioré. Définissez la propriété Microphone.enhancedOptions sur une occurrence de la classe MicrophoneEnhancedOptions.

flash.media.Microphone.enhancedOptionsflash.media.Microphone.getEnhancedMicrophone()autoGain Active le contrôle automatique du gain.Boolean Active le contrôle automatique du gain. Un algorithme de contrôle automatique du gain du domaine temporel est utilisé avec la régulation du bruit. La valeur par défaut est « désactivé ». echoPath Spécifie le chemin de l’écho (en millisecondes) utilisé pour l’annulation de l’écho acoustique.int Spécifie le chemin de l’écho (en millisecondes) utilisé pour l’annulation de l’écho acoustique. Un chemin de l’écho plus long se traduit par une amélioration de l’annulation de l’écho. Un chemin de l’écho plus long provoque également un délai supérieur et exige une plus grande complexité de calcul. La valeur par défaut est 128 (recommandée). L’autre valeur possible est 256. isVoiceDetected Indique si l’entrée du microphone a détecté une voix.int Indique si l’entrée du microphone a détecté une voix.

Les valeurs possibles sont les suivantes : -1, non activée ; 0 , aucune voix n’est détectée ; 1 , une voix est détectée.

mode Contrôle le mode du microphone amélioré.String Contrôle le mode du microphone amélioré. La valeur par défaut est FULL_DUPLEX pour tous les microphones non USB. La valeur par défaut pour les microphones USB est HALF_DUPLEX. Voir la section MicrophoneEnhancedMode pour les valeurs possibles et les descriptions. flash.media.MicrophoneEnhancedModenonLinearProcessing Active le traitement non linéaire.Boolean Active le traitement non linéaire. Le traitement non linéaire supprime l’écho résiduel lorsqu’une personne est en train de parler. La technique de traitement non linéaire du domaine temporel est utilisée. Désactivez l’option de traitement non linéaire pour les sources de musique. La valeur par défaut est true (active le traitement non linéaire).
Sound La classe Sound vous permet de contrôler le son dans une application.flash.events:EventDispatcher La classe Sound vous permet de contrôler le son dans une application. Elle vous permet de créer un objet Sound, de charger et de lire un fichier MP3 externe dans cet objet, de fermer le flux audio et d’accéder aux données relatives au son (nombre d’octets que contient le flux, informations sur les métadonnées ID3, etc.). Un contrôle plus précis du son est possible via sa source (objet SoundChannel ou Microphone correspondant) et des propriétés de la classe SoundTransform qui contrôle l’émission du son par les haut-parleurs de l’ordinateur.

Dans Flash Player 10 et les versions ultérieures, ainsi que dans AIR 1.5 et les versions ultérieures, vous pouvez également utiliser cette classe pour gérer le son généré dynamiquement. Dans ce cas, l’objet Sound utilise la fonction que vous affectez à un gestionnaire d’événement sampleData pour interroger les données audio. Le son est lu au fur et à mesure que les données sont récupérées dans un objet ByteArray que vous renseignez avec les données audio. Vous pouvez utiliser la méthode Sound.extract() pour extraire les données audio d’un objet Sound, après quoi vous pouvez les manipuler avant de les réécrire dans le flux pour la lecture.

Pour contrôler des sons imbriqués dans un fichier SWF, utilisez les propriétés de la classe SoundMixer.

Remarque : l’API son d’ActionScript 3.0 est différente de celle d’ActionScript 2.0. Dans ActionScript 3.0, il est impossible de prendre des objets son et de les classer selon un ordre hiérarchique pour contrôler leurs propriétés.

Lorsque vous employez cette classe, tenez compte du modèle de sécurité suivant :

  • Le chargement et la lecture d’un son ne sont pas autorisés si le fichier appelant se trouve sur un sandbox réseau et que le fichier à charger est local.
  • Par défaut, le chargement et la lecture d’un son sont interdits si le fichier appelant est local et tente de charger et de lire un son distant. Pour permettre ce type d’accès, un utilisateur doit accorder une autorisation explicite.
  • Des restrictions s’appliquent à certaines opérations concernant le son. Les données d’un son chargé ne sont pas accessibles par un fichier appartenant à un autre domaine, sauf si vous mettez en place un fichier de régulation interdomaines. Les propriétés Sound.id3, SoundMixer.computeSpectrum(), SoundMixer.bufferTime et la classe SoundTransform comptent parmi les API liées au son qui sont soumises à cette restriction.

Néanmoins, dans Adobe AIR, le contenu du sandbox de sécurité application (contenu installé avec l’application AIR) n’est pas soumis à ces restrictions de sécurité.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

L’exemple suivant affiche des informations concernant les événements sonores qui se produisent à l’ouverture et à la lecture d’un fichier MP3. Pour exécuter l’exemple, placez un fichier intitulé MySound.mp3 dans le même répertoire que votre fichier SWF. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; public class SoundExample extends Sprite { private var url:String = "MySound.mp3"; private var song:SoundChannel; public function SoundExample() { var request:URLRequest = new URLRequest(url); var soundFactory:Sound = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); song = soundFactory.play(); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } } }
flash.net.NetStreamMicrophoneSoundChannelSoundMixerSoundTransformprogress Distribué lors de la réception de données, au fur et à mesure d’un chargement.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Distribué lors de la réception de données, au fur et à mesure d’un chargement. load()open Distribué lors du démarrage d’une opération de chargement.flash.events.Event.OPENflash.events.Event Distribué lors du démarrage d’une opération de chargement. load()ioError Distribué lorsqu’il se produit une erreur d’entrée/sortie entraînant l’échec d’un chargement.flash.events.IOErrorEvent.IO_ERRORflash.events.IOErrorEvent Distribué lorsqu’il se produit une erreur d’entrée/sortie entraînant l’échec d’un chargement. load()id3 Distribué par un objet Sound lorsque des données ID3 sont disponibles pour un son MP3.flash.events.Event.ID3flash.events.Event Distribué par un objet Sound lorsque des données ID3 sont disponibles pour un son MP3. Sound.id3complete Distribué lorsque le chargement de données a abouti.flash.events.Event.COMPLETEflash.events.Event Distribué lorsque le chargement de données a abouti. load()sampleData Distribué lorsque le moteur d’exécution sollicite de nouvelles données audio.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Distribué lorsque le moteur d’exécution sollicite de nouvelles données audio. L’exemple suivant lit une onde sinusoïdale simple. var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play(); extract()play()flash.events.SampleDataEventSound Crée un objet Sound.streamflash.net:URLRequestnull URL pointant vers un fichier MP3 externe. contextflash.media:SoundLoaderContextnull Un objet de contexte SoundLoader en option, qui peut définir la durée de mise en mémoire tampon (le nombre minimum de millisecondes de données MP3 à conserver dans la mémoire tampon de l’objet Sound) et peut spécifier si l’application doit rechercher un fichier de régulation interdomaines avant de charger le son. Crée un objet Sound. Si vous transmettez un objet URLRequest valide au constructeur Sound, celui-ci appelle automatiquement la fonction load() pour l’objet Sound. Si vous ne transmettez pas un objet URLRequest valide au constructeur Sound, vous devez appeler la fonction load() pour l’objet Sound, sans quoi le flux ne sera pas chargé.

Une fois la fonction load() appelée pour un objet Sound, vous ne pouvez plus charger de fichier audio dans l’objet. Pour ce faire, créez un autre objet Sound.

Dans Flash Player 10 et les versions ultérieures, ainsi que dans AIR 1.5 et les versions ultérieures, au lieu d’utiliser load(), vous pouvez utiliser le gestionnaire d’événement sampleData pour charger dynamiquement le son dans l’objet Sound.
close Ferme le flux, ce qui entraîne l’arrêt du téléchargement des données.La fermeture du flux continu s’est révélée impossible ou ce flux n’a pas été ouvert. IOErrorflash.errors:IOError Ferme le flux, ce qui entraîne l’arrêt du téléchargement des données. Une fois la méthode close() appelée, aucune donnée ne peut être lue dans le flux. Dans l’exemple suivant, lorsque l’utilisateur clique sur le bouton Stop, la méthode Sound.close() est appelée et la diffusion du son s’arrête.

Dans le constructeur, un champ de texte est créé pour les boutons Start et Stop. Lorsque l’utilisateur clique sur le champ de texte, la méthode clickHandler() est invoquée. Elle gère le démarrage et l’arrêt du fichier audio. Notez que, selon la connexion réseau ou le moment où l’utilisateur clique sur le bouton Stop, une grande partie du fichier peut déjà avoir été chargée et l’arrêt de la lecture peut demander un certain temps. Un bloc try...catch est utilisé pour capturer toute erreur d’E/S pouvant survenir lors de la fermeture du flux. Par exemple, si le son est chargé depuis un répertoire local et n’est pas diffusé en continu, l’erreur 2029 est capturée et indique « Cet objet URLStream ne possède pas de flux ouvert ».

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.errors.IOError; import flash.events.IOErrorEvent; public class Sound_closeExample extends Sprite { private var snd:Sound = new Sound(); private var button:TextField = new TextField(); private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); public function Sound_closeExample() { button.x = 10; button.y = 10; button.text = "START"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.LEFT; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { if(button.text == "START") { snd.load(req); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); button.text = "STOP"; } else if(button.text == "STOP") { try { snd.close(); button.text = "Wait for loaded stream to finish."; } catch (error:IOError) { button.text = "Couldn't close stream " + error.message; } } } private function errorHandler(event:IOErrorEvent):void { button.text = "Couldn't load the file " + event.text; } } }
extract Extrait les données audio brutes d’un objet Sound.Nombre d’échantillons écrits dans l’objet ByteArray spécifié dans le paramètre target. Numbertargetflash.utils:ByteArrayObjet ByteArray qui contient les échantillons audio extraits. lengthNumberNombre d’échantillons audio à extraire. Un échantillon contient à la fois les canaux gauche et droit, c’est-à-dire deux valeurs 32 bits en virgule flottante. startPositionNumber-1Echantillon au niveau duquel l’extraction commence. Si vous ne spécifiez pas de valeur, le premier appel à Sound.extract() démarre au début du son ; les appels suivants sans valeur pour startPosition continuent en séquence tout au long du fichier. Extrait les données audio brutes d’un objet Sound.

Cette méthode doit être employée lorsque vous gérez un son généré dynamiquement, à l’aide d’une fonction que vous affectez à l’événement sampleData pour un autre objet Sound. En d’autres termes, vous pouvez utiliser cette méthode pour extraire les données audio d’un objet Sound. Vous pouvez ensuite écrire les données dans le tableau d’octets utilisé par un autre objet Sound pour diffuser en continu les données audio dynamiques.

Les données audio sont placées dans le tableau d’octets cible, à partir de la position actuelle du tableau d’octets. Les données audio sont toujours exposées au format 44100 Hz stéréo. Le type d’échantillon est une valeur 32 bits en virgule flottante qui peut être convertie en nombre par la méthode ByteArray.readFloat().

L’exemple suivant charge un fichier mp3 et utilise la méthode extract() de la classe Sound pour accéder aux données audio.

Les données mp3 sont chargées dans l’objet Sound sourceSnd. Lorsque l’application charge les données mp3, elle appelle la fonction loaded() (le gestionnaire d’événement pour l’événement complete de l’objet sourceSnd). Un deuxième objet Sound, outputSound, est utilisé pour lire les données audio modifiées. L’objet outputSound possède un écouteur d’événement sampleData ; par conséquent, l’objet distribue régulièrement des événements sampleData lorsque vous appelez la méthode play() de l’objet. La méthode upOctave() renvoie un tableau d’octets des données audio modifiées en fonction des données audio source. Elle renvoie les sons plus hauts d’un octave en ignorant les échantillons audio dans les données source. Le gestionnaire d’événement de l’événement sampleData écrit le tableau d’octets renvoyé dans la propriété data de l’objet outputSound. Le tableau d’octets data est ajouté aux données audio de sortie de l’objet outputSound.

Pour tester cet exemple, ajoutez un fichier test.mp3 au même répertoire que le fichier SWF.

var sourceSnd:Sound = new Sound(); var outputSnd:Sound = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); sourceSnd.load(urlReq); sourceSnd.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); outputSnd.play(); } function processSound(event:SampleDataEvent):void { var bytes:ByteArray = new ByteArray(); sourceSnd.extract(bytes, 4096); event.data.writeBytes(upOctave(bytes)); } function upOctave(bytes:ByteArray):ByteArray { var returnBytes:ByteArray = new ByteArray(); bytes.position = 0; while(bytes.bytesAvailable > 0) { returnBytes.writeFloat(bytes.readFloat()); returnBytes.writeFloat(bytes.readFloat()); if (bytes.bytesAvailable > 0) { bytes.position += 8; } } return returnBytes; }
play()sampleData
load Lance le chargement d’un fichier MP3 externe à partir de l’URL spécifiée.Une erreur réseau a entraîné l’échec du chargement. IOErrorflash.errors:IOErrorLes fichiers non approuvés au niveau local ne peuvent pas communiquer avec Internet. Pour contourner ce problème, reclassifiez le fichier en tant qu’approuvé ou en tant que fichier local avec accès au réseau. SecurityErrorSecurityErrorVous ne pouvez pas vous connecter aux ports généralement réservés. Pour obtenir une liste complète des ports bloqués, voir la rubrique « Restriction des API de réseau » dans le Guide du développeur d’ActionScript 3.0. SecurityErrorSecurityErrorLa propriété digest de l’objet stream n’est pas définie sur null. Vous devez définir la propriété digest d’un objet URLRequest uniquement lorsque vous appelez la méthode URLLoader.load() en vue de charger un fichier SWZ (un composant de la plateforme Adobe). IOErrorflash.errors:IOErrorstreamflash.net:URLRequest URL pointant vers un fichier MP3 externe. contextflash.media:SoundLoaderContextnull Un objet de contexte SoundLoader en option, qui peut définir la durée de mise en mémoire tampon (le nombre minimum de millisecondes de données MP3 à conserver dans la mémoire tampon de l’objet Sound) et peut spécifier si l’application doit rechercher un fichier de régulation interdomaines avant de charger le son. Lance le chargement d’un fichier MP3 externe à partir de l’URL spécifiée. Le constructeur Sound appelle automatiquement Sound.load() si vous lui fournissez un objet URLRequest valide. Vous ne devez appeler Sound.load() manuellement que si vous ne fournissez aucun objet URLRequest valide au constructeur Sound, ou si vous lui transmettez la valeur null.

Une fois la fonction load() appelée pour un objet Sound, vous ne pouvez plus charger de fichier audio dans l’objet. Pour ce faire, créez un autre objet Sound.

Lorsque vous employez cette méthode, tenez compte du modèle de sécurité suivant :

  • L’appel de Sound.load() n’est pas autorisé si le fichier appelant se trouve dans le sandbox local avec système de fichiers et que le son se trouve sur un sandbox réseau.
  • Un accès à partir du sandbox approuvé local ou du sandbox local avec accès au réseau exige l’autorisation du site Web via un fichier de régulation d’URL.
  • Vous ne pouvez pas vous connecter aux ports généralement réservés. Pour obtenir une liste complète des ports bloqués, voir la rubrique « Restriction des API de réseau » dans le Guide du développeur d’ActionScript 3.0.
  • Vous pouvez éviter qu’un fichier SWF utilise cette méthode en définissant le paramètre allowNetworking des balises object et embed dans la page HTML qui héberge le contenu SWF.

Dans Flash Player versions 10 et ultérieures, si vous utilisez un Content-Type en plusieurs parties (par exemple « multipart/form-data ») qui contient un chargement (indiqué par un paramètre « filename » dans un en-tête « content-disposition » au sein du corps POST), l’opération POST est soumise aux règles de sécurité appliquées aux chargements :

  • L’opération POST doit être effectuée en réponse à l’action d’un utilisateur, comme un clic de souris ou la pression d’une touche.
  • Si l’opération POST se fait entre plusieurs domaines (la cible POST ne se trouve pas sur le même serveur que le fichier SWF qui envoie la demande POST), le serveur cible doit fournir un fichier de régulation d’URL qui permette l’accès interdomaines.

Par ailleurs, la syntaxe de tous les Content-Type en plusieurs parties doit être correcte (selon la norme RFC2046). Si la syntaxe s’avère incorrecte, l’opération POST est soumise aux règles de sécurité appliquées aux chargements.

Dans Adobe AIR, le contenu du sandbox de sécurité de l’application (contenu installé avec l’application AIR) n’est pas restreint par ces limites de sécurité.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

L’exemple suivant présente la progression du chargement d’un fichier audio.

Dans le constructeur, un objet URLRequest est créé pour identifier l’emplacement du fichier audio, qui correspond à un podcast d’Adobe. Le fichier est chargé dans un bloc try...catch pour capturer toute erreur pouvant survenir pendant son chargement. En cas d’erreur d’E/S, la méthode errorHandler() est également invoquée et le message d’erreur s’inscrit dans le champ de texte réservé au rapport de progression. Pendant la progression d’une opération de chargement, un événement ProgressEvent.PROGRESS est envoyé et la méthode progressHandler() est appelée. Ici, un événement ProgressEvent.PROGRESS est utilisé comme minuteur pour calculer la progression du chargement.

La méthode progressHandler() divise la valeur bytesLoaded transmise avec l’objet ProgressEvent par la valeur bytesTotal pour arriver au pourcentage de données audio chargées. Elle affiche ensuite ces valeurs dans le champ de texte (notez que si le fichier est petit, mis en cache ou dans le répertoire local, la progression peut ne pas être perceptible).

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; public class Sound_loadExample extends Sprite { private var snd:Sound = new Sound(); private var statusTextField:TextField = new TextField(); public function Sound_loadExample(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(ProgressEvent.PROGRESS, progressHandler); this.addChild(statusTextField); } private function progressHandler(event:ProgressEvent):void { var loadTime:Number = event.bytesLoaded / event.bytesTotal; var LoadPercent:uint = Math.round(100 * loadTime); statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" + "Bytes being loaded: " + event.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + LoadPercent + "%.\n"; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
play Crée un objet SoundChannel pour lire le son.Objet SoundChannel permettant de contrôler le son. Cette méthode renvoie null si vous n’êtes pas équipé d’une carte son ou si aucun canal audio n’est disponible. Le nombre maximal de canaux audio disponibles simultanément est 32. flash.media:SoundChannelstartTimeNumber0Position initiale du début de la lecture, en millisecondes. loopsint0Définit le nombre de boucles décrit par un son sur la valeur startTime avant que le canal audio arrête la lecture. sndTransformflash.media:SoundTransformnullObjet SoundTransform d’origine affecté au canal audio. Crée un objet SoundChannel pour lire le son. Cette méthode renvoie un objet SoundChannel, auquel vous accédez pour arrêter le son et régler le volume (pour contrôler le volume, la balance horizontale et la balance, accédez à l’objet SoundTransform affecté au canal audio). Dans l’exemple suivant, une fois le fichier chargé, l’utilisateur peut sélectionner la position de départ (heure de démarrage) du fichier audio à l’aide d’une barre graphique.

Le constructeur appelle la méthode Sound.load() pour commencer à charger les données audio. Il appelle ensuite la méthode Sound.play() qui commencera à lire le fichier dès que suffisamment de données seront chargées. La méthode Sound.play() renvoie un objet SoundChannel qui peut être utilisé pour contrôler la lecture du fichier. Le champ de texte affiche les instructions. Pour être sûr que le contenu où l’utilisateur souhaite que le fichier audio commence ait déjà été chargé, un objet Sprite bar est créé et affiché à la fin du chargement du fichier. Un événement Event.COMPLETE est envoyé lorsque le chargement du fichier s’est terminé avec succès, ce qui déclenche la méthode completeHandler(). La méthode completeHandler() crée ensuite la barre et l’ajoute dans la liste d’affichage (un objet sprite est utilisé au lieu d’un objet shape pour assurer l’interactivité). Lorsque l’utilisateur clique sur la barre, la méthode clickHandler() est déclenchée.

Dans la méthode clickHandler(), la position de la coordonnée x du clic de l’utilisateur, event.localX, est utilisée pour déterminer l’emplacement où l’utilisateur souhaite que le fichier démarre. Comme la barre fait 100 pixels et commence à la coordonnée x 100 pixels, il est facile de déterminer le pourcentage de la position. De même, comme le fichier est chargé, la propriété length du fichier audio aura la longueur du fichier terminé, en millisecondes. La position de démarrage du fichier audio est déterminée par la longueur de ce fichier et sa position dans la ligne. Après arrêt de la lecture, le fichier audio redémarre à la position de démarrage sélectionnée, transmise sous forme de paramètre startTime à la méthode play().

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.MouseEvent; import flash.media.Sound;; import flash.net.URLRequest; import flash.media.SoundChannel; import flash.events.ProgressEvent; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.IOErrorEvent; public class Sound_playExample1 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var infoTextField:TextField = new TextField(); public function Sound_playExample1() { var req:URLRequest = new URLRequest("MySound.mp3"); infoTextField.autoSize = TextFieldAutoSize.LEFT; infoTextField.text = "Please wait for the file to be loaded.\n" + "Then select from the bar to decide where the file should start."; snd.load(req); channel = snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(Event.COMPLETE, completeHandler); this.addChild(infoTextField); } private function completeHandler(event:Event):void { infoTextField.text = "File is ready."; var bar:Sprite = new Sprite(); bar.graphics.lineStyle(5, 0xFF0000); bar.graphics.moveTo(100, 100); bar.graphics.lineTo(200, 100); bar.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(bar); } private function clickHandler(event:MouseEvent):void { var position:uint = event.localX; var percent:uint = Math.round(position) - 100; var cue:uint = (percent / 100) * snd.length; channel.stop(); channel = snd.play(cue); } private function errorHandler(errorEvent:IOErrorEvent):void { infoTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
Dans l’exemple suivant, le fichier audio est diffusé une ou deux fois, selon si l’utilisateur clique une fois ou deux sur un bouton.

Dans le constructeur, le son est chargé et un simple objet sprite rectangle button est créé (un objet sprite est utilisé au lieu d’un objet shape pour assurer l’interactivité). Ici, le fichier audio est supposé être dans le même répertoire que le fichier SWF (il n’existe pas de code de gestion d’erreur pour cet exemple).

Deux écouteurs d’événement sont configurés pour répondre aux simples clics et aux doubles clics de souris. Si l’utilisateur utilise un simple clic, la méthode clickHandler() est invoquée et la lecture du son commence. Si l’utilisateur double-clique sur le bouton, la méthode doubleClickHandler() est invoquée et le fichier audio est diffusé à deux reprises. Le second argument de la méthode play() est défini sur 1, ce qui signifie que le fichier audio reviendra à l’heure de démarrage du fichier et sera diffusé à nouveau. L’heure de démarrage, premier argument, est définie sur 0, ce qui signifie que la lecture du fichier doit commencer au début.

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Sound; import flash.net.URLRequest; public class Sound_playExample2 extends Sprite { private var button:Sprite = new Sprite(); private var snd:Sound = new Sound(); public function Sound_playExample2() { var req:URLRequest = new URLRequest("click.mp3"); snd.load(req); button.graphics.beginFill(0x00FF00); button.graphics.drawRect(10, 10, 50, 30); button.graphics.endFill(); button.addEventListener(MouseEvent.CLICK, clickHandler); button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); this.addChild(button); } private function clickHandler(event:MouseEvent):void { snd.play(); } private function doubleClickHandler(event:MouseEvent):void { snd.play(0, 2); } } }
L’exemple suivant présente la progression du chargement et de la lecture d’un fichier audio.

Dans le constructeur, le fichier est chargé dans un bloc try...catch pour capturer toute erreur pouvant survenir pendant le chargement de fichier. Un écouteur est ajouté dans l’objet audio et répondra à un événement IOErrorEvent par un appel à la méthode errorHandler(). Un autre écouteur est ajouté pour l’application principale et répondra à un événement Event.ENTER_FRAME, utilisé comme mécanisme de minuterie pour l’affichage de la progression de la lecture. Enfin, un troisième écouteur est ajouté pour le canal audio et répondra à un événement Event.SOUND_COMPLETE (à la fin de la lecture) par un appel à la méthode soundCompleteHandler(). La méthode soundCompleteHandler() supprime également l’écouteur de l’événement Event.ENTER_FRAME.

La méthode enterFrameHandler() divise la valeur bytesLoaded transmise avec l’objet ProgressEvent par la valeur bytesTotal pour arriver au pourcentage de données audio chargées. Le pourcentage de données audio lues peut être déterminé en divisant la valeur de la propriété position du canal audio par la longueur des données audio. Toutefois, si les données audio ne sont pas entièrement chargées, la propriété length de l’objet audio ne présente que la taille des données audio déjà chargées. Une estimation de la taille définitive du fichier audio complet est calculée en divisant la valeur de la propriété length de l’objet audio en cours par la valeur de la propriété bytesLoaded divisée par la valeur de la propriété bytesTotal.

Notez que si le fichier est petit, mis en cache ou dans le répertoire local, la progression du chargement peut ne pas être perceptible. De même, le délai qui sépare le démarrage du chargement des données audio et celui du démarrage de la lecture des données chargées est déterminé par la valeur de la propriété SoundLoaderContext.buffertime, qui correspond par défaut à 1 000 millisecondes et peut être réinitialisé.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; import flash.events.IOErrorEvent; public class Sound_playExample3 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel; private var statusTextField:TextField = new TextField(); public function Sound_playExample3(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); channel = snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); this.addChild(statusTextField); } private function enterFrameHandler(event:Event):void { var loadTime:Number = snd.bytesLoaded / snd.bytesTotal; var loadPercent:uint = Math.round(100 * loadTime); var estimatedLength:int = Math.ceil(snd.length / (loadTime)); var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength)); statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" + "Bytes being loaded: " + snd.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + loadPercent + "%.\n" + "Sound playback is " + playbackPercent + "% complete."; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } private function soundCompleteHandler(event:Event):void { statusTextField.text = "The sound has finished playing."; removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } }
SoundChannel.stop()SoundMixer.stopAll()
bytesLoaded Renvoie le nombre d’octets actuellement disponibles dans cet objet Sound.uint Renvoie le nombre d’octets actuellement disponibles dans cet objet Sound. Cette propriété n’est généralement utile que pour les fichiers chargés en externe. bytesTotal Renvoie le nombre total d’octets que contient l’objet Sound.int Renvoie le nombre total d’octets que contient l’objet Sound. id3 Donne accès aux métadonnées faisant partie d’un fichier MP3.flash.media:ID3Info Donne accès aux métadonnées faisant partie d’un fichier MP3.

Les fichiers son MP3 peuvent contenir des balises ID3 qui fournissent des métadonnées sur le fichier. Si le son MP3 que vous chargez à l’aide de la méthode Sound.load() contient des balises ID3, vous pouvez interroger ces propriétés. Seules les balises ID3 qui utilisent le jeu de caractères UTF-8 sont prises en charge.

Flash Player 9 (et les versions ultérieures) et AIR prennent en charge les balises ID3 2.0, plus particulièrement 2.3 et 2.4. Les tableaux suivants répertorient les balises ID3 2.0 standard et le type de contenu que les balises représentent. La propriété Sound.id3 permet d’accéder à ces balises par le biais du format my_sound.id3.COMM, my_sound.id3.TIME, etc. Le premier tableau décrit les balises auxquelles il est possible d’accéder par le biais du nom de propriété ID3 2.0 ou le nom de propriété ActionScript. Le second tableau décrit les balises ID3 qui sont prises en charge, mais ne possèdent pas de propriétés prédéfinies dans ActionScript.

Balise ID3 2.0Propriété de la classe Sound correspondanteCOMMSound.id3.commentTALBSound.id3.album TCONSound.id3.genreTIT2Sound.id3.songname TPE1Sound.id3.artistTRCKSound.id3.track TYERSound.id3.year

Le tableau suivant décrit les balises ID3 qui sont prises en charge, mais ne possèdent pas de propriétés prédéfinies dans la classe Sound. Pour y accéder, appelez mySound.id3.TFLT, mySound.id3.TIME, etc. REMARQUE : aucune de ces balises n’est prise en charge dans Flash Lite 4.

PropriétéDescriptionTFLTType de fichierTIMEDuréeTIT1Description du groupe de contenusTIT2Titre/nom du morceau/description du contenuTIT3Sous-titre/description plus préciseTKEYTouche initialeTLANLanguesTLENDuréeTMEDType de médiaTOALTitre de l’album/du film/du spectacle d’origineTOFNNom du fichier d’origineTOLYParoliers/auteurs d’origineTOPEInterprètes/musiciens d’origineTORYAnnée de parution d’origineTOWNPropriétaire du fichier/détenteur de licenceTPE1Interprètes principaux/solistesTPE2Groupe/orchestre/accompagnementTPE3Chef d’orchestre/description plus détaillée des musiciensTPE4Interprété, remixé ou modifié parTPOSElément d’un ensembleTPUBEditeurTRCKNuméro de piste/position dans l’ensembleTRDADates d’enregistrementTRSNNom de la station radio InternetTRSOPropriétaire de la station radio InternetTSIZTailleTSRCISRC (international standard recording code - code standard et international d’enregistrement)TSSELogiciel/matériel et paramètres utilisés pour le codageTYERAnnéeWXXXStructure de lien URL

Pour utiliser cette propriété, tenez compte du modèle de sécurité de Flash Player :

  • La propriété id3 d’un objet Sound est toujours autorisée pour les fichiers SWF qui se trouvent sur le même sandbox de sécurité que le fichier audio. Des contrôles de sécurité sont nécessaires pour les fichiers se trouvant sur d’autres sandbox.
  • Lorsque vous chargez le son à l’aide de la méthode load() de la classe Sound, vous pouvez spécifier un paramètre context qui est un objet SoundLoaderContext. Si vous définissez la propriété checkPolicyFile de l’objet SoundLoaderContext sur true, Flash Player recherche un fichier de régulation d’URL sur le serveur à partir duquel le son est chargé. S’il existe un fichier de régulation qui autorise un accès à partir du domaine du fichier SWF effectuant le chargement, le fichier peut alors accéder à la propriété id3 de l’objet Sound ; dans le cas contraire, l’accès lui est interdit.

Néanmoins, dans Adobe AIR, le contenu du sandbox de sécurité application (contenu installé avec l’application AIR) n’est pas soumis à ces restrictions de sécurité.

Pour plus d’informations concernant la sécurité, voir la rubrique du Pôle de développement Flash Player : Sécurité (disponible en anglais uniquement).

L’exemple suivant lit les informations d’ID3 dans un fichier audio et les affiche dans un champ de texte.

Dans le constructeur, le fichier audio est chargé mais n’est pas défini sur lecture. Ici, le fichier est supposé être dans le répertoire SWF. Le système doit être autorisé à lire les balises ID3 d’un fichier audio chargé. Si le fichier contient des informations ID3 alors que le programme n’est pas autorisé à les lire, un événement Event.ID3 est déclenché et la propriété id3 du fichier audio est renseignée. La propriété id3 contient un objet ID3Info renfermant toutes les informations ID3.

Dans la méthode id3Handler(), les balises ID3 du fichier sont stockées dans id3, un objet de la classe ID3Info. Un champ de texte est instancié pour afficher la liste des balises ID3. La boucle for fait une itération à travers toutes les balises ID3 2.0 et ajoute le nom et la valeur au contenu du champ de texte. L’artiste, le titre de la chanson et le nom de l’album sont également ajoutés via les propriétés (ID3Info) des informations ID3. ActionScript 3.0 et Flash Player 9 et versions ultérieures prennent en charge les balises ID3 2.0, et en particulier 2.3 et 2.4. Si vous faites une itération des propriétés comme dans la boucle for, seules les balises ID3 2.0 apparaissent. Toutefois, les données des versions précédentes sont également stockées dans la propriété id3 de la chanson et sont accessibles via les propriétés de la classe ID3Info. Les balises ID3 1.0 se situent à la fin du fichier alors que les balises ID3 2.0 sont placées au début du fichier (il arrive parfois que les balises des versions antérieures et ultérieures soient au même endroit dans le fichier). Lorsqu’un fichier est encodé avec des balises 1.0 et 2.0 au début et à la fin du fichier, la méthode id3Handler() doit être invoquée deux fois. Elle lit d’abord la version 2.0, puis la version 1.0. Si seule une balise ID3 1.0 est disponible, les informations sont alors accessibles via les propriétés d’informations ID3, telles que id3.songname. Pour ID3 2.0, la propriété id3.TITS récupère le titre de la chanson à l’aide de la nouvelle balise (TITS).

Notez que aucune gestion d’erreur n’est écrite pour cet exemple et que si le contenu ID3 est long, le résultat peut dépasser la zone visible.

package { import flash.display.Sprite; import flash.media.Sound; import flash.net.URLRequest; import flash.media.ID3Info; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; public class Sound_id3Example extends Sprite { private var snd:Sound = new Sound(); private var myTextField:TextField = new TextField(); public function Sound_id3Example() { snd.addEventListener(Event.ID3, id3Handler); snd.load(new URLRequest("mySound.mp3")); } private function id3Handler(event:Event):void { var id3:ID3Info = snd.id3; myTextField.autoSize = TextFieldAutoSize.LEFT; myTextField.border = true; myTextField.appendText("Received ID3 Info: \n"); for (var propName:String in id3) { myTextField.appendText(propName + " = " + id3[propName] + "\n"); } myTextField.appendText("\n" + "Artist: " + id3.artist + "\n"); myTextField.appendText("Song name: " + id3.songName + "\n"); myTextField.appendText("Album: " + id3.album + "\n\n"); this.addChild(myTextField); } } }
SoundLoaderContext.checkPolicyFile
isBuffering Renvoie l’état de mise en mémoire tampon des fichiers MP3 externes.Boolean Renvoie l’état de mise en mémoire tampon des fichiers MP3 externes. Si la valeur correspond à true, la lecture éventuelle est interrompue pendant que l’objet attend des données supplémentaires. isURLInaccessible Indique si la propriété Sound.url a été tronquée.Boolean Indique si la propriété Sound.url a été tronquée. Lorsque la valeur isURLInaccessible est définie sur true, la valeur Sound.url correspond uniquement au domaine de l’URL finale à partir de laquelle le son a été chargé. Par exemple, la propriété est tronquée si le son est chargé depuis http://www.adobe.com/assets/hello.mp3, et la propriété Sound.url a la valeur http://www.adobe.com. La valeur isURLInaccessible est définie sur true uniquement lorsque toutes les affirmations suivantes sont également vraies :
  • Une redirection HTTP s’est produite lors du chargement du fichier audio.
  • Le fichier SWF qui appelle Sound.load() provient d’un domaine différent de celui de l’URL finale du fichier audio.
  • Le fichier SWF qui appelle Sound.load() n’est pas autorisé à accéder au fichier audio. L’autorisation d’accéder au fichier audio s’obtient de la même façon que l’autorisation d’accéder à la propriété Sound.id3 : créez un fichier de régulation et utilisez la propriété SoundLoaderContext.checkPolicyFile.

Remarque : la propriété isURLInaccessible a été ajoutée à Flash Player 10.1 et AIR 2.0. Toutefois, cette propriété est disponible pour les fichiers SWF de toutes les versions lorsque le moteur d’exécution de Flash la prend en charge. Ainsi, l’utilisation de certains outils de création en « mode strict » entraîne une erreur de compilation. Pour contourner cette erreur, utilisez la syntaxe indirecte mySound["isURLInaccessible"] ou désactivez le mode strict. Si vous utilisez Flash Professional CS5 ou le kit SDK Flex version 4.1, vous pouvez utiliser et compiler cette API pour les moteurs d’exécution publiés avant Flash Player 10.1 et AIR 2.

Pour le contenu de l’application dans AIR, la valeur de cette propriété est toujours false.

urlid3flash.media.SoundLoaderContext.checkPolicyFile
length Durée du son actuel, en millisecondes.Number Durée du son actuel, en millisecondes. url URL à partir de laquelle le son a été chargé.String URL à partir de laquelle le son a été chargé. Cette propriété s’applique uniquement aux objets Sound chargés à l’aide de la méthode Sound.load(). Pour les objets Sound associés à un actif son de la bibliothèque d’un fichier SWF, la valeur de la propriété url correspond à null.

La première fois que vous appelez Sound.load(), la valeur de la propriété url est d’abord définie null car l’URL finale n’est pas encore connue. La propriété url a une autre valeur dès qu’un événement open est distribué à partir de l’objet Sound.

La propriété url contient l’URL absolue finale à partir de laquelle un son a été chargé. En règle générale, la valeur de la propriété url est identique à la valeur transmise au paramètre stream de Sound.load(). Si vous transmettez une URL relative à Sound.load(), la valeur de la propriété url représente l’URL absolue. En outre, si la requête d’URL d’origine est redirigée par un serveur HTTP, la valeur de la propriété url reflète l’URL finale à partir de laquelle le fichier audio a réellement été téléchargé. La publication d’une URL finale absolue est équivalente au comportement de LoaderInfo.url.

Dans certains cas, la valeur de la propriété url est tronquée. Voir la propriété isURLInaccessible pour plus d’informations.

load()flash.display.LoaderInfo.urlisURLInaccessible
MicrophoneEnhancedMode La classe MicrophoneEnhancedMode est une énumération des valeurs constantes utilisées pour définir la propriété mode de la classe MicrophoneEnhancedOptions.Object La classe MicrophoneEnhancedMode est une énumération des valeurs constantes utilisées lors de la définition de la propriété mode de la classe MicrophoneEnhancedOptions. flash.media.MicrophoneEnhancedOptionsFULL_DUPLEX Utilisez ce mode pour permettre aux deux parties de parler en même temps.fullDuplexString Utilisez ce mode pour permettre aux deux parties de parler en même temps. L’annulation de l’écho acoustique fonctionne en mode duplex intégral. Le mode duplex intégral correspond à la meilleure qualité d’annulation de l’écho. Ce mode exige des microphones et des haut-parleurs de grande qualité, ainsi qu’une grande puissance de calcul. N’utilisez pas ce mode avec un microphone USB. HALF_DUPLEX Utilisez ce mode pour les haut-parleurs et les microphones de qualité inférieure.halfDuplexString Utilisez ce mode pour les haut-parleurs et les microphones de qualité inférieure. L’annulation de l’écho acoustique fonctionne en mode semi-duplex. En mode semi-duplex, une seule partie à la fois peut parler. Le mode semi-duplex nécessite un traitement plus simple que mode duplex intégral. Le mode semi-duplex est le mode par défaut des microphones USB.

Si l’application utilise le paramètre par défaut enhancedOptions et un microphone USB, Flash Player bascule automatiquement sur le mode halfDuplex. Si l’application utilise le paramètre par défaut enhancedOptions et le microphone intégré, Flash Player fait appel au mode fullDuplex.

HEADSET Utilisez ce mode lorsque les deux parties utilisent un casque.headsetString Utilisez ce mode lorsque les deux parties utilisent un casque. L’annulation de l’écho acoustique fonctionne en mode faible écho. Ce mode est le mode qui requiert le moins de puissance de calcul. OFF Toutes les fonctionnalités d’amélioration du son sont désactivées.offString Toutes les fonctionnalités d’amélioration du son sont désactivées. SPEAKER_MUTE Utilisez ce mode lorsque le son du haut-parleur est coupé.speakerMuteString Utilisez ce mode lorsque le son du haut-parleur est coupé. L’annulation de l’écho acoustique est désactivée. L’amélioration du son supprime le bruit ou effectue le contrôle automatique du gain (s’il est activé). flash.media.MicrophoneEnhancedOptions.autoGain
Video La classe Video affiche une vidéo en direct ou enregistrée dans une application sans l’intégrer dans votre fichier SWF.flash.display:DisplayObject La classe Video affiche une vidéo en direct ou enregistrée dans une application sans l’intégrer dans votre fichier SWF. Cette classe crée un objet Video qui lit l’un des types de fichiers vidéo suivants : fichiers vidéo enregistrés sur un serveur ou localement, ou vidéo en direct capturée par l’utilisateur. Un objet Video est un objet d’affichage de la liste d’affichage de l’application et représente l’espace visuel au sein duquel la vidéo s’exécute dans une interface utilisateur.

Utilisé avec Flash Media Server, l’objet Video permet d’envoyer une vidéo en direct capturée par l’utilisateur vers le serveur, puis de la diffuser du serveur vers d’autres utilisateurs. Grâce à ses fonctionnalités, vous pouvez développer des applications multimédias telles qu’un lecteur vidéo simple, un lecteur vidéo avec publication multipoint d’un serveur à un autre ou une application de partage vidéo pour une communauté d’utilisateurs.

Flash Player 9 et les versions ultérieures gèrent la publication et la lecture des fichiers FLV codés avec le codec Sorenson ou On2 VP6, et prennent également en charge un canal alpha. Le codec vidéo On2 VP6 utilise moins de largeur de bande que les technologies plus anciennes et offre des filtres supplémentaires de dégroupage et de deringing. Voir la classe flash.net.NetStream pour plus d’informations sur la lecture vidéo et les formats pris en charge.

Flash Player 9.0.115.0 et les versions ultérieures prennent en charge le mip-mapping pour optimiser les performances et la qualité du rendu au moment de l’exécution. Pour la lecture vidéo, Flash Player utilise l’optimisation mip-mapping si vous définissez la propriété smoothing de l’objet Video sur true.

Comme pour les autres objets d’affichage de la liste d’affichage, vous pouvez contrôler différentes propriétés des objets Video. Par exemple, vous pouvez déplacer l’objet Video sur la scène à l’aide de ses propriétés x et y, modifier sa taille à l’aide de ses propriétés height et width, etc.

Pour lire un flux vidéo, utilisez attachCamera() ou attachNetStream() pour associer la vidéo à l’objet Video. Ajoutez ensuite l’objet Video à la liste d’affichage à l’aide de addChild().

Si vous utilisez Flash Professional, vous pouvez également placer l’objet Video sur la scène au lieu de l’ajouter à l’aide de la méthode addChild(), comme suit :

  1. Si le panneau Bibliothèque n’est pas visible, sélectionnez Fenêtre > Bibliothèque pour l’afficher.
  2. Ajoutez un objet Video imbriqué à la bibliothèque en cliquant sur le menu Options à droite de la barre de titre du panneau bibliothèque et en sélectionnant Nouvelle Vidéo.
  3. Dans la boîte de dialogue des propriétés de la vidéo, nommez l’objet Video intégré à utiliser dans la bibliothèque et cliquez sur OK.
  4. Faites glisser l’objet Video sur la scène et utilisez l’inspecteur des propriétés pour lui donner un nom d’occurrence unique, par ex. ma_video (ne l’appelez pas Video).

Dans les applications AIR sur le poste de travail, la lecture d’une vidéo en mode plein écran désactive les fonctions d’économie d’énergie et d’écran de veille (lorsque celles-ci sont autorisées par le système d’exploitation).

Remarque : la classe Video n’étant pas une sous-classe de la classe InteractiveObject, elle ne peut pas distribuer d’événements de souris. Vous pouvez cependant appeler la méthode addEventListener() sur le conteneur d’objet d’affichage qui contient l’objet Video.

L’exemple suivant utilise un objet Video avec les classes NetConnection et NetStream pour charger et lire un fichier FLV. Pour exécuter cet exemple, vous avez besoin d’un fichier FLV dont le nom et l’emplacement correspondent à la variable transmise à videoURL, en l’occurrence un fichier FLV appelé Video.flv qui se trouve dans le même répertoire que le fichier SWF.

Dans cet exemple, le code qui crée les objets Video et NetStream, et appelle Video.attachNetStream() et NetStream.play(), est placé dans une fonction de gestionnaire. Le gestionnaire est appelé uniquement si la tentative de connexion à l’objet NetConnection a réussi, ce qui est le cas lorsque l’événement netStatus renvoie un objet info doté d’une propriété code signalant la réussite de l’opération. Il est recommandé d’attendre l’établissement d’une connexion avant d’appeler NetStream.play().

package { import flash.display.Sprite; import flash.events.*; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class VideoExample extends Sprite { private var videoURL:String = "Video.flv"; private var connection:NetConnection; private var stream:NetStream; public function VideoExample() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Unable to locate video: " + videoURL); break; } } private function connectStream():void { stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); var video:Video = new Video(); video.attachNetStream(stream); stream.play(videoURL); addChild(video); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function asyncErrorHandler(event:AsyncErrorEvent):void { // ignore AsyncErrorEvent events. } } }
attachCamera()attachNetStream()flash.media.Camera.getCamera()flash.net.NetConnectionflash.net.NetStreamflash.display.DisplayObjectContainer.addChild()flash.display.Stage.addChild()Utilisation de la vidéoVideo Crée une occurrence de Video.widthint320Largeur de la vidéo, en pixels. heightint240Hauteur de la vidéo, en pixels. Crée une occurrence de Video. Si la valeur des paramètres width et height n’est pas définie, les valeurs par défaut sont utilisées. Vous pouvez aussi définir les propriétés de largeur et de hauteur de l’objet Video après sa construction initiale à l’aide des propriétés Video.width et Video.height. Lors de la création d’un objet Video, il est interdit de définir une largeur et une hauteur nulles. Si vous transmettez la valeur zéro, les valeurs par défaut sont appliquées.

Une fois l’objet Video créé, appelez la méthode DisplayObjectContainer.addChild() ou DisplayObjectContainer.addChildAt() pour l’ajouter à un objet DisplayObjectContainer parent.

L’exemple suivant indique comment charger un fichier FLV externe : var MyVideo:Video = new Video(); addChild(MyVideo); var MyNC:NetConnection = new NetConnection(); MyNC.connect(null); var MyNS:NetStream = new NetStream(MyNC); MyNS.play("http://www.helpexamples.com/flash/video/clouds.flv"); MyVideo.attachNetStream(MyNS); //the clouds.flv video has metadata we're not using, so create //an error handler to ignore the message generated by the runtime //about the metadata MyNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); function asyncErrorHandler(event:AsyncErrorEvent):void { //ignore metadata error message }
attachCamera Spécifie un flux vidéo provenant d’une caméra à afficher dans le cadre de l’objet Video de l’application. cameraflash.media:CameraObjet Camera qui capture des données vidéo. Pour annuler la connexion à l’objet Video, transmettez null. Spécifie un flux vidéo provenant d’une caméra à afficher dans le cadre de l’objet Video de l’application.

Utilisez cette méthode pour associer une vidéo en direct capturée par l’utilisateur à l’objet Video. Vous pouvez diffuser la vidéo en direct localement sur l’ordinateur ou le périphérique sur lequel elle a été capturée, ou l’envoyer à Flash Media Server et utiliser ce serveur pour envoyer le flux aux autres utilisateurs.

Remarque : dans une application AIR for iOS, il est impossible d’afficher la caméra vidéo lorsque l’application a recours au mode de rendu sur GPU.

Pour une illustration de l’utilisation de cette méthode, voir l’exemple de la méthode Camera.getCamera().
Video.attachNetStream()flash.media.Camera
attachNetStream Spécifie un flux vidéo à afficher dans le cadre de l’objet Video dans l’application. netStreamflash.net:NetStreamObjet NetStream. Pour annuler la connexion à l’objet Video, transmettez null. Spécifie un flux vidéo à afficher dans le cadre de l’objet Video dans l’application. Le flux vidéo est soit un fichier vidéo lu avec NetStream.play(), soit un objet Camera, soit null. Si vous utilisez un fichier vidéo, vous pouvez le stocker dans le système de fichiers local ou sur le serveur Flash Media Server. Si la valeur de l’argument netStream correspond à null, la vidéo n’est plus lue dans l’objet Video.

Il n’est pas nécessaire d’utiliser cette méthode si un fichier vidéo contient uniquement des données audio ; la partie audio des fichiers vidéo est automatiquement lue lors de l’appel de la méthode NetStream.play(). Pour contrôler les données audio associées à un fichier vidéo, utilisez la propriété soundTransform de l’objet NetStream qui lit le fichier vidéo.

Pour une illustration de l’utilisation de cette méthode, voir l’exemple présenté à la fin de cette classe.
Video.attachCamera()flash.net.NetStream.soundTransformflash.net.NetStream.play()SoundTransform
clear Efface l’image actuellement affichée dans l’objet Video (pas le flux vidéo). Efface l’image actuellement affichée dans l’objet Video (pas le flux vidéo). Cette méthode est très utile pour gérer l’image en cours. Par exemple, vous pouvez effacer la dernière image ou afficher des informations en attente sans masquer l’objet Video. Video.attachCamera()deblocking Indique le type de filtre appliqué aux vidéos décodées dans le cadre du posttraitement.int Indique le type de filtre appliqué aux vidéos décodées dans le cadre du posttraitement. La valeur par défaut, 0, autorise le compresseur vidéo à appliquer le filtre de dégroupage si nécessaire.

La compression de la vidéo peut engendrer des artefacts indésirables. Vous pouvez utiliser la propriété deblocking pour définir des filtres de dégroupage et, pour la vidéo compressée utilisant le codex On2, ringing.

Blocking désigne les défauts visibles entre les limites des blocs qui composent chaque image vidéo. Ringing fait référence aux déformations observées au niveau des bords des éléments dans une image vidéo.

Deux filtres de dégroupage sont disponibles : l’un dans le codec Sorenson, l’autre dans le codec On2 VP6. Un filtre de deringing est également disponible lorsque vous utilisez le codec On2 VP6. Pour définir un filtre, utilisez une des valeurs suivantes :

  • 0 — Autorise le compresseur vidéo à appliquer le filtre de dégroupage si nécessaire.
  • 1 — N’utilise pas de filtre de dégroupage.
  • 2 — Utilise le filtre de dégroupage Sorenson.
  • 3 — Pour la vidéo On2 seulement, utilise le filtre de dégroupage On2, mais pas de filtre de deringing.
  • 4 — Pour la vidéo On2 seulement, utilise le filtre de dégroupage et le filtre de deringing On2.
  • 5 — Pour la vidéo On2 seulement, utilise le filtre de dégroupage On2 et un filtre de deringing On2 optimisé.

Si une valeur supérieure à 2 est sélectionnée pour la vidéo alors que vous utilisez le codec Sorenson, le décodeur Sorenson applique par défaut la valeur 2.

Le filtre de dégroupage a un effet sur les performances globales de lecture et il n’est généralement pas nécessaire pour la vidéo à large bande passante. Si le système d’un utilisateur n’est pas assez puissant, il lui sera peut-être difficile de lire la vidéo avec un tel filtre activé.

smoothing Indique si la vidéo doit être lissée (interpolée) lors de son redimensionnement.Boolean Indique si la vidéo doit être lissée (interpolée) lors de son redimensionnement. Pour faciliter le lissage, le moteur d’exécution doit être en mode haute qualité (paramètre par défaut). La valeur par défaut est false (pas de lissage).

Pour une lecture vidéo avec Flash Player 9.0.115.0 et versions ultérieures, définissez cette propriété sur true pour tirer parti de l’optimisation d’image mip-mapping.

videoHeight Nombre entier spécifiant la hauteur en pixels du flux vidéo.int Nombre entier spécifiant la hauteur en pixels du flux vidéo. Pour les flux vidéo en direct, cette valeur est identique à la propriété Camera.height de l’objet Camera qui capture le flux vidéo. Pour les fichiers vidéo enregistrés, cette valeur correspond à la hauteur de la vidéo.

Vous pouvez utiliser cette propriété, par exemple, pour garantir que l’utilisateur regarde la vidéo au même format que celui auquel elle a été capturée, quel que soit le format réel de l’objet Video sur la scène.

flash.media.Camera.height
videoWidth Nombre entier spécifiant la largeur en pixels du flux vidéo.int Nombre entier spécifiant la largeur en pixels du flux vidéo. Pour les flux vidéo en direct, cette valeur est identique à la propriété Camera.width de l’objet Camera qui capture le flux vidéo. Pour les fichiers vidéo enregistrés, cette valeur correspond à la largeur de la vidéo.

Vous pouvez utiliser cette propriété, par exemple, pour garantir que l’utilisateur regarde la vidéo au même format que celui auquel elle a été capturée, quel que soit le format réel de l’objet Video sur la scène.

flash.media.Camera.width