トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     音量の取得方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.10591
投稿日時: 2004-9-5 23:25
音量の取得方法
お世話になります。erikoです。
閲覧者が音量をミュートしていないかどうかを調べたいと思っています。
flashで直接ミュートされているかを調べる方法は出来なさそうだったので(そういうことも出来ます?)、サウンドの音量で調べようと思いActionScript辞典を参考に以下のscriptを記述しました。

メインタイムライン1フレーム目
//サウンドオブジェクトsoundobjへ識別子mySound割り当て
soundObj = new Sound();
soundObj.attachSound("mySound");

//サウンド再生
soundObj.start(0, 100);

2フレーム目
//サウンドの音量取得
test = soundObj.getVolume();
trace(test);

stop();

この再生結果、サウンドは流れるのですが、音量を増減してもミュートにしても全てtraceは100となってしまいます。

これはいったい・・?
何か記述方法、設定方法に間違いがあるのでしょうか?

サンプルflaファイルはこちら(解決!削除☆)です。

初歩的な質問ですがよろしくお願いします。
ゲスト
Åê¹ÆNo.10594
投稿日時: 2004-9-6 0:37
Re: 音量の取得方法
どうもこんにちは。

結論から言うとtraceがすべて100になるのは正しい動作です。
getVolume();はあくまでそれぞれのサウンドオブジェクトの再生音量を調べるものであって、クライアントのPCの音量を調べるものではないからです。soundObj.start(0, 100);でサウンドオブジェクトの音量を100に設定しているため、traceしても100しか返ってきません。

ミュートされているかどうかは各PCのOSまたはハードに依存するものですから、質問にも書かれているように調べる方法は無いと思います。
ゲスト
Åê¹ÆNo.10597
投稿日時: 2004-9-6 11:53
Re: 音量の取得方法
keitaさん、お返事いただきありがとうございました。
getVolume();はあくまでそれぞれのサウンドオブジェクトの再生音量を調べるものであって、クライアントのPCの音量を調べるものではないからです。

え?え?そうなんですか??てっきりクライアント側で流れている音量を調べてそのボリュームの設定etcをできると思っていました。
ミュートされている時は0またはundefinedが返ってきてそれを判別すればいいのかなぁ・・と。(^^;;

soundObj.start(0, 100);でサウンドオブジェクトの音量を100に設定しているため、traceしても100しか返ってきません。

えっと、この100はループ回数の指定ですよね?0秒目から最後まで再生し100回繰り返す。
でも、そのサウンドオブジェクトはめいいっぱい再生されてますよ?で、traceすると100が返ってくるということだったのですよね・・

ミュートされているかどうかは各PCのOSまたはハードに依存するものですから、質問にも書かれているように調べる方法は無いと思います。

そうなんですか、どうにか他に調べる方法ってないものでしょうか・・ 知りたいところですよねぇ?
野中文雄
Åê¹ÆNo.10599
投稿日時: 2004-9-6 14:10
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 音量の取得方法
Soundインスタンスは、タイムラインをターゲットとして、MovieClip単位でサウンドをコントロールします。

つまり、システムの音量を直接制御するものではありえません。その場合には、すべてのサウンドが、一括で変更されてしまうはずです。すると、サウンドごとの調整は、不可能になります。
引用:
erikoさんは書きました:
え?え?そうなんですか??てっきりクライアント側で流れている音量を調べてそのボリュームの設定etcをできると思っていました。
ミュートされている時は0またはundefinedが返ってきてそれを判別すればいいのかなぁ・・と。(^^;;

Soundインスタンスは、ユーザーがシステムで設定した音量を100%として、そのなかでボリュームをコントロールします。そのおかげで、音量を絞ったユーザーのマシンで、いきなり大音量のサウンドを鳴らすといった不作法をせずに済む訳です。
引用:
でも、そのサウンドオブジェクトはめいいっぱい再生されてますよ?で、traceすると100が返ってくるということだったのですよね・・

DirectorではsoundChannelObjRef.volumeプロパティが、マシンの音量をベースに0?255までの範囲でボリュームをコントロールします。

他方、_sound.soundLevelというプロパティは、システムの音量を制御します。これに相当するプロパティ/メソッドは、Flashには存在しません。システムの設定に直接アクセスすることは、Flashの場合意図的に避けている可能性があります。
引用:
引用:
Keitaさんは書きました:
ミュートされているかどうかは各PCのOSまたはハードに依存するものですから、質問にも書かれているように調べる方法は無いと思います。

そうなんですか、どうにか他に調べる方法ってないものでしょうか・・ 知りたいところですよねぇ?


----------------
 

HapHands
Åê¹ÆNo.10604
投稿日時: 2004-9-6 15:27
半人前
居住地: 東京都新宿区
投稿: 47
使用環境:
Flash:
 (6.0.25.1)
 Pro(7.2.0.581)
OS:
 XP Pro Sp2
 (10.2.8)
CPU:
 Pentium M 1.70GHz
RAM:
 1.0GB
Re: 音量の取得方法
便乗かつFlashから離れていってしまいますが疑問が発生しました。

引用:

野中文雄さんは書きました:
DirectorではsoundChannelObjRef.volumeプロパティが、マシンの音量をベースに0?255までの範囲でボリュームをコントロールします。

他方、_sound.soundLevelというプロパティは、システムの音量を制御します。これに相当するプロパティ/メソッドは、Flashには存在しません。システムの設定に直接アクセスすることは、Flashの場合意図的に避けている可能性があります。


私もDirectorを使うので、DirectorのsoudLevelと組み合わせてFlashにシステムの音量設定を渡せないかな?と考えました(実用性はともかく)。
そこでDirectorMXのthe soundLevelやDirectorMX2004の_sound.soundLevelを試してみたのですが...(WinXPのみ)。

私は[コントロールパネル]?[サウンドとオーディオデバイス]の設定(でアクセスできる設定)にアクセスできるものと思っていたのですが、そうではないのでしょうか
コンパネで音量を0(ミュートのチェック無し)にしてもsoundLevelは7を返したり、soundLevelを変更してもコンパネの設定は変化しません。
ミュートのチェックを入れたからといってsoundLevelが0を返すこともないようです。
soundLevelってWinではどの設定にアクセスしているんでしょう??
#Directorの話でスミマセン?


----------------
HapHands/http://www.haphands.com/

野中文雄
Åê¹ÆNo.10607
投稿日時: 2004-9-6 16:50
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 音量の取得方法
本来は、システムのサウンドにアクセスでき、その結果が[コントロールパネル]に反映されるべきでしょうね。Director MX/Windows XP (SP1)で試したところ(まだMX 2004はインストールしていないので)、beep音も変わりませんでした。_sound.soundDeviceプロパティを"MacroMix"に変えたら、音量は変化しました([コントロールパネル]は変わらず)。

結論として、「Windowsではプロジェクタからのボリュームコントロールはしない」方がよさそうです。_sound.soundLevelは使わないということですね。

Macintoshでは、コントロール可能で、[システム環境設定]にも反映されます。しかし、Mac OS X.3.5で、0はミュートにはなるものの、7が最大にならず、最大時の値として10が返ります(もちろん、10はプロパティに設定できません)。Macも怪しいというべきでしょう。
引用:
はやし たくやさんは書きました:
そこでDirectorMXのthe soundLevelやDirectorMX2004の_sound.soundLevelを試してみたのですが...(WinXPのみ)。

私は[コントロールパネル]?[サウンドとオーディオデバイス]の設定(でアクセスできる設定)にアクセスできるものと思っていたのですが、そうではないのでしょうか
コンパネで音量を0(ミュートのチェック無し)にしてもsoundLevelは7を返したり、soundLevelを変更してもコンパネの設定は変化しません。
ミュートのチェックを入れたからといってsoundLevelが0を返すこともないようです。

どうしてもシステムのサウンドをコントロールする必要があるときは、Buddy APIbaSetVolume()メソッドを使うのが一番です。[コントロールパネル]にも、反映されました。


----------------
 

HapHands
Åê¹ÆNo.10608
投稿日時: 2004-9-6 17:02
半人前
居住地: 東京都新宿区
投稿: 47
使用環境:
Flash:
 (6.0.25.1)
 Pro(7.2.0.581)
OS:
 XP Pro Sp2
 (10.2.8)
CPU:
 Pentium M 1.70GHz
RAM:
 1.0GB
Re: 音量の取得方法
検証ありがとうございます?。

引用:

野中文雄さんは書きました:
結論として、「Windowsではプロジェクタからのボリュームコントロールはしない」方がよさそうです。_sound.soundLevelは使わないということですね。

なるほど?。設定はまだしも、取得はできて欲しいですね。

引用:

どうしてもシステムのサウンドをコントロールする必要があるときは、Buddy APIbaSetVolume()メソッドを使うのが一番です。[コントロールパネル]にも、反映されました。

あらためてお礼申し上げます。ありがとうございました。


----------------
HapHands/http://www.haphands.com/

ゲスト
Åê¹ÆNo.10614
投稿日時: 2004-9-6 20:06
Re: 音量の取得方法
野中さん、はやしさん、情報をありがとうございます。とても参考になりました。

なるほど?。設定はまだしも、取得はできて欲しいですね。

そうそう。システムボリュームをコントロールしたいわけではないのですよ。ミュートしてるかどうかだけが知りたかったのだけどなぁ
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops