Pakiet | flash.media |
Klasa | public final class SoundMixer |
Dziedziczenie | SoundMixer Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
sampleData
).
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
audioPlaybackMode : String [statyczny]
Określa tryb odtwarzania dźwięku dla wszystkich obiektów Sound. | SoundMixer | ||
bufferTime : int [statyczny]
Czas (w sekundach) wstępnego załadowania osadzonego dźwięku do bufora przed rozpoczęciem generowania strumienia dźwiękowego. | SoundMixer | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
soundTransform : flash.media:SoundTransform [statyczny]
Obiekt SoundTransform, który kontroluje globalne właściwości dźwięku. | SoundMixer | ||
useSpeakerphoneForVoice : Boolean [statyczny]
Włącza lub wyłącza funkcję telefonu głośnomówiącego, gdy urządzenie znajduje się w trybie głosowym. | SoundMixer |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
[statyczny]
Wskazuje, czy ze względów bezpieczeństwa pewne dźwięki są niedostępne. | SoundMixer | ||
[statyczny]
Pozwala zarejestrować bieżącą falę dźwiękową i umieścić ją w określonym obiekcie ByteArray. | SoundMixer | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
[statyczny]
Powoduje zatrzymanie odtwarzania wszystkich aktualnych dźwięków. | SoundMixer | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
audioPlaybackMode | właściwość |
audioPlaybackMode:String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 3 |
Określa tryb odtwarzania dźwięku dla wszystkich obiektów Sound. Na urządzeniach przenośnych ta właściwość powoduje ustawienie priorytetów i wartości domyślnych dotyczących dźwięku zgodnie z wartościami właściwymi dla danej platformy. Na komputerach i urządzeniach telewizyjnych nie ma różnicy między trybami odtwarzania dźwięku.
Poprawne wartości dla tej właściwości są zdefiniowane w klasie AudioPlaybackMode.
Uwaga: W systemie iOS jeśli aplikacja ustawi tryb audioPlaybackMode=AudioPlaybackMode.VOICE
, inne aplikacje nie mogą zmienić trybu AudioPlaybackMode.MEDIA
.
W celu umożliwienia innym aplikacjom odtwarzania w trybie multimediów należy jak najkrócej używać trybu AudioPlaybackMode.VOICE
i przełączać aplikację do trybu AudioPlaybackMode.MEDIA
zaraz po zakończeniu połączenia głosowego.
Zmiana trybu odtwarzania dźwięków w systemie iOS powoduje chwilowe wstrzymanie odtwarzania muzyki w aplikacjach natywnych.
Wartością domyślną jest AudioPlaybackMode.MEDIA.
Implementacja
public static function get audioPlaybackMode():String
public static function set audioPlaybackMode(value:String):void
Zgłasza
ArgumentError — kInvalidParameterError
|
Powiązane elementy interfejsu API
bufferTime | właściwość |
bufferTime:int
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Czas (w sekundach) wstępnego załadowania osadzonego dźwięku do bufora przed rozpoczęciem generowania strumienia dźwiękowego. Plik, który znajduje się w innej domenie nie może uzyskać dostępu do danych w ładowanym dźwięku (łącznie z jego czasem buforowania), chyba że zostanie zaimplementowany międzydomenowy plik reguł. Więcej informacji o zabezpieczeniach i dźwięku zawiera opis klasy Sound. Kod pliku, który znajduje się w innej domenie nie może uzyskać dostępu do danych w ładowanym dźwięku (łącznie z jego czasem buforowania), chyba że zostanie zaimplementowany międzydomenowy plik reguł. Jednak w obszarze izolowanym aplikacji AIR kod może mieć dostęp do danych plików dźwiękowych z dowolnego źródła. Więcej informacji o zabezpieczeniach i dźwięku zawiera opis klasy Sound.
Właściwość SoundMixer.bufferTime
wpływa jedynie na czas buforowania strumieni dźwiękowych osadzonych w pliku SWF i jest niezależna od dynamicznie tworzonych obiektów klasy Sound (tj. obiektów klasy Sound tworzonych w języku ActionScript). Wartość właściwości SoundMixer.bufferTime
nie może nadpisywać lub ustawiać wartości domyślnej czasu buforowania określonego w obiekcie SoundLoaderContext, który przekazywany jest do metodySound.load()
.
Implementacja
public static function get bufferTime():int
public static function set bufferTime(value:int):void
Powiązane elementy interfejsu API
soundTransform | właściwość |
soundTransform:flash.media:SoundTransform
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Obiekt SoundTransform, który kontroluje globalne właściwości dźwięku. Obiekt SoundTransform zawiera właściwości umożliwiające ustawianie głośności, przesunięcia oraz przypisywanie lewego i prawego głośnika. Użycie obiektu SoundTransform w tej właściwości umożliwia zastosowanie ostatecznych ustawień dźwięku dla wszystkich dźwięków po zastosowaniu indywidualnych ustawień dla każdego z nich.
Implementacja
public static function get soundTransform():flash.media:SoundTransform
public static function set soundTransform(value:flash.media:SoundTransform):void
Powiązane elementy interfejsu API
useSpeakerphoneForVoice | właściwość |
useSpeakerphoneForVoice:Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 3 |
Włącza lub wyłącza funkcję telefonu głośnomówiącego, gdy urządzenie znajduje się w trybie głosowym. Smartfony domyślnie używają słuchawki telefonu jako wyjścia dźwięku, kiedy właściwość SoundMixer.audioPlaybackMode
jest ustawiona na AudioPlaybackMode.VOICE
. Właściwość useSpeakerphoneForVoice
umożliwia nadpisanie domyślnego wyjścia, dzięki czemu można zaimplementować przycisk telefonu głośnomówiącego w aplikacji na telefonie. Ta właściwość nie ma żadnego znaczenia w przypadku trybów innych niż AudioPlaybackMode.VOICE
. Na komputerach i urządzeniach telewizyjnych ta właściwość nie ma żadnego znaczenia.
Uwaga: W systemie iOS jeśli aplikacja ustawiła tryb audioPlaybackMode=VOICE
i inna aplikacja również odtwarza w trybie głosowym, nie można ustawić trybu useSpeakerphoneForVoice=true
.
Uwaga: Aby ta wartość była uwzględniana w systemie Android, należy ustawić parametr android.permission.MODIFY_AUDIO_SETTINGS
deskryptora aplikacji AIR. To ustawienie obowiązuje globalnie na urządzeniu. Inne aplikacje działające na urządzeniu mogą w każdej chwili zmienić to ustawienie.
Wartością domyślną jest false.
Implementacja
public static function get useSpeakerphoneForVoice():Boolean
public static function set useSpeakerphoneForVoice(value:Boolean):void
Powiązane elementy interfejsu API
areSoundsInaccessible | () | metoda |
public static function areSoundsInaccessible():Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Wskazuje, czy ze względów bezpieczeństwa pewne dźwięki są niedostępne. Przykład: dźwięk ładowany z domeny innej, niż domena zawierająca treść, która wywołuje tę metodę, jest niedostępny, jeśli serwer tego dźwięku nie posiada pliku reguł URL, który przyznaje dostęp do domeny dla tej domeny. Dźwięk można nadal załadować i odtworzyć, lecz operacje niskiego poziomu takie, jak pobieranie metadanych ID3, nie będą wykonywane na niedostępnych dźwiękach.
Dla treści aplikacji AIR w obszarze izolowanym aplikacji wywołanie tej metody zawsze powoduje zwrócenie wartości false
. Wszystkie dźwięki, łącznie z tymi załadowanymi z innych domen, są dostępne dla treści w obszarze izolowanym aplikacji.
Boolean — Ciąg znaków reprezentujący wartość logiczną (Boolean).
|
Powiązane elementy interfejsu API
computeSpectrum | () | metoda |
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Pozwala zarejestrować bieżącą falę dźwiękową i umieścić ją w określonym obiekcie ByteArray. Wartości są formatowane do postaci znormalizowanych wartości zmiennoprzecinkowych z zakresu od -1,0 do 1,0. Obiekt ByteArray przekazany do parametru outputArray
jest nadpisywany nowymi wartościami. Rozmiar utworzonego obiektu ByteArray jest stały i wynosi 512 wartości zmiennoprzecinkowych, z których pierwsze 256 wartości reprezentuje lewy kanał, a kolejne 256 kanał prawy.
Uwaga: Metoda podlega ograniczeniom wynikającym z zabezpieczeń plików lokalnych oraz ograniczeń ładowania międzydomenowego. Pracując z lokalnymi plikami lub dźwiękami ładowanymi z serwera z innej domeny, niż ta z której są wywoływane, użytkownik może być zmuszony do rozwiązania kwestii ograniczeń obszaru izolowanego za pomocą międzydomenowego pliku reguł. Aby uzyskać więcej informacji na ten temat, należy zapoznać się z opisem klasy Sound. Ponadto ta metoda nie może zostać użyta do wyodrębnienia danych ze strumieni RTMP, nawet jeśli zostanie wywołana przez treść, która znajduje się w tej samej domenie co serwer RTMP.
Ta metoda jest obsługiwana przez protokół RTMP w programie Flash Player 9.0.115.0 i nowszych wersjach oraz w środowisku Adobe AIR. Istnieje możliwość sterowania dostępem do strumieni na serwerze z oprogramowaniem Flash Media Server za pomocą skryptu po stronie serwera. Aby uzyskać·więcej informacji na ten temat, należy zapoznać się z właściwościami Client.audioSampleAccess
oraz Client.videoSampleAccess
znajdującymi się w publikacji Server-Side ActionScript Language Reference for Adobe Flash Media Server.
Parametry
outputArray:ByteArray — Obiekt ByteArray przechowuje wartości skojarzone z dźwiękiem. Jeśli ze względu na zabezpieczenia dźwięki nie są dostępne (areSoundsInaccessible == true ), obiekt outputArray nie ulegnie zmianie. Jeśli wszystkie dźwięki zostaną zatrzymane, obiekt outputArray zostanie wypełniony zerami.
| |
FFTMode:Boolean (default = false ) — Wartość logiczna (Boolean) wskazuje, czy na danych dźwiękowych wykonywana jest najpierw transformacja Fouriera. Ustawienie tego parametru na wartość true spowoduje, że metoda zwróci widmo częstotliwości, zamiast nieprzetworzonej fali dźwiękowej. W widmie niskie częstotliwości znajdują się po lewej stronie, a wysokie częstotliwości po prawej.
| |
stretchFactor:int (default = 0 ) — Częstotliwość próbkowania dźwięku. Jeśli parametrowi stretchFactor przypisana zostanie wartość 0, dane będą próbkowane z częstotliwością 44,1 kHz; dla wartości 1, dane będą próbkowane z częstotliwością 22,05 kHz; dla wartości 2, dane będą próbkowane z częstotliwością 11,025 kHz itd.
|
Powiązane elementy interfejsu API
flash.utils.ByteArray
flash.media.Sound
flash.media.SoundLoaderContext.checkPolicyFile
Przykład ( Sposób korzystania z tego przykładu )
computeSpectrum()
została użyta w celu utworzenia graficznej reprezentacji danych fali dźwiękowej.
W konstruktorze ładowany jest plik dźwiękowy i ustawiany w stan odtwarzania. (W tym przykładzie nie zapewniono obsługi błędu i założono, że plik znajduje się w tym samym katalogu, co plik SWF). W przykładzie w czasie odtwarzania dźwięku nasłuchiwane jest zdarzenie Event.ENTER_FRAME
i wielokrotnie wywoływana jest metodaonEnterFrame()
, której zadaniem jest rysowanie wykresu na podstawie wartości danych dźwięku. W momencie zakończenia odtwarzania dźwięku metodaonPlaybackComplete()
kończy proces rysowania usuwając detektor zdarzenia Event.ENTER_FRAME
.
W metodzie onEnterFrame()
metoda computeSpectrum()
zapisuje nieprzetworzony dźwięk w obiekcie bytes
będącym tablicą bajtów. Dane są próbkowane częstotliwością 44,1 kHz. Tablica bajtów zwiera 512 bajtów danych, z których każdy zawiera wartość zmiennoprzecinkową z zakresu od -1 do 1. Pierwsze 256 wartości reprezentuje kanał lewy, a kolejne 256 wartości reprezentuje kanał prawy W pierwszej pętli odczytane zostaną pierwsze 256 wartości danych (lewy kanał stereo) i narysowana zostanie linia pomiędzy kolejnymi punktami za pomocą metody Graphics.lineTo()
. (Graficzne wyświetlanie wektora fali dźwiękowej zostało bezpośrednio umieszczone w obiekcie klasy Sprite). Bajty dźwięku są odczytywane jako 32-bitowe liczby zmiennoprzecinkowe ze strumienia bajtów i przemnażane przez wartość wysokości wykresu w celu dopasowania wartości do obszaru wykresu. Właściwości width przypisywana jest dwukrotność szerokości kanału. W drugiej pętli odczytane zostaną kolejne 256 wartości (prawy kanał stereo) i linie zostaną wykreślone w odwrotnej kolejności. Metody g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
oraz g.lineTo(0, PLOT_HEIGHT);
rysują linie bazowe dla fal. Wynikowy wykres kształtu fali utworzy efekt lustrzanego odbicia.
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); } } }
stopAll | () | metoda |
public static function stopAll():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Powoduje zatrzymanie odtwarzania wszystkich aktualnych dźwięków.
>W programie Flash Professional ta metoda nie powoduje zatrzymania głowicy odtwarzania. Odtwarzanie dźwięków umieszczonych w strumieniu zostanie wznowione, gdy głowica odtwarzania przesunie się do klatek, w których są umieszczone.
Korzystając z tej właściwości, należy wziąć pod uwagę następujący model zabezpieczeń:
- Domyślnie wywołanie metody
SoundMixer.stopAll()
zatrzymuje odtwarzanie dźwięków jedynie w tym samym obszarze izolowanym, co obiekt wywołujący metodę. Dźwięki, których odtwarzanie nie zostało rozpoczęte z tego samego obszaru izolowanego, co obiekt, nie zostaną zatrzymane. - Wczytując dźwięk za pomocą metody
load()
klasy Sound, można określić parametrcontext
, który jest obiektem SoundLoaderContext. Jeśli właściwościcheckPolicyFile
obiektu SoundLoaderContext zostanie przypisana wartośćtrue
, program Flash Player lub środowisko AIR sprawdzi istnienie międzydomenowego pliku reguł na serwerze, z którego jest ładowany dźwięk. Jeśli na serwerze znajduje się międzydomenowy plik reguł i plik zezwala na dostęp domenie zawierającej treść wywołującą, wtedy plik może zatrzymać ładowany dźwięk za pomocą metodySoundMixer.stopAll()
; w innym przypadku nie może.
Jednak w aplikacji Adobe AIR zawartość obszaru izolowanego application
(zawartość instalowana razem z aplikacją AIR) nie jest ograniczana przez te reguły zabezpieczeń.
Więcej informacji na temat zabezpieczeń zawiera odpowiedni temat w Centrum programistów programu Flash Player w kategorii Bezpieczeństwo.
Przykład ( Sposób korzystania z tego przykładu )
stopAll()
została użyta w celu wyciszenia dwóch jednocześnie odtwarzanych dźwięków.
W konstruktorze ładowane są dwa różne dźwięki i ustawiane na odtwarzanie. Pierwszy dźwięk jest ładowany lokalnie i przypisywany do kanału dźwiękowego. (Założono, że plik znajduje się w tym samym katalogu, co plik SWF). Kolejny plik jest ładowany i strumieniowany ze strony internetowej Adobe. Aby skorzystać z metody SoundMixer.stopAll()
wszystkie dźwięki muszą być dostępne. (Obiekt SoundLoaderContext może być użyty w celu sprawdzenia pliku reguł międzydomenowych). Każdy dźwięk posiada również detektor zdarzeń, który wywoływany jest, gdy w momencie ładowania pliku dźwiękowego pojawi się błąd wejścia/wyjścia. Tworzone jest również pole tekstowe muteButton
. Nasłuchuje zdarzenia kliknięcia myszą, które wywoła metodę muteButtonClickHandler()
.
Jeśli w metodzie muteButtonClickHandler()
pole tekstowe ma wartość „MUTE” metoda areSoundsInaccessible()
sprawdzi, czy mikser dźwięków ma dostęp do plików. Jeśli pliki są dostępne, metoda stopAll()
zatrzymuje dźwięki. Ponowne kliknięcie pola tekstowego rozpocznie odtwarzanie pierwszego dźwięku, a zawartość pola tekstowego zmieni się ponownie na „MUTE” Tym razem metoda stopAll()
wycisza jeden odtwarzany dźwięk. Należy zauważyć, że metoda stop()
kanału dźwiękowego może być użyta w celu zatrzymania konkretnego dźwięku przypisanego do kanału. (Aby funkcjonalnie korzystać z kanału, dźwięk należy ponownie przypisać do kanału, za każdym razem kiedy wywoływana jest metoda 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); } } }
Tue Jun 12 2018, 12:06 PM Z