質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

1795閲覧

[macOS] アプリケーション内のみミュートする

MasakiHori

総合スコア3384

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

1クリップ

投稿2017/04/25 07:11

編集2017/05/20 06:09
  • 対象環境: macOS Sierra, El Capitan
  • 使用言語: Swift 3.x(最新のもの)(Objective-C / C言語でも大丈夫です)
  • やりたいこと:SafariのようにOSの設定を無視して(1つのViewのみ)ミュートする。

WebViewを使用し外部Flashコンテンツを表示するアプリケーションを作っています。

Flashから再生される音声をミュートしたいのですが、どこから検索すればいいのかさえ分からない状況です。
1つのViewのみと書きましたが、OSの設定を無視できればアプリケーション全体をミュートでも構いません。

SafariのようにというのはOSの設定を変更することなく、自アプリ内のみミュートするということです。

外部FlashコンテンツのためFlashを書き換えてFlash自体で任意のタイミングでミュート可能にすることはできません。

作っているものはこれです。
OSDNのページ

  • 追記

情報へのポインタでも構いません。
よろしくお願いします。


  • 追記 2017.04.27

CoreAudioにあたりをつけて以下のテストコードを試してみました。(Swiftに慣れてないのでobjcです)

ここに動かないソースコードがありました

結果はミュートされない、です。

何か情報がありましたらよろしくお願いします。


  • 追記 2017.05.16

OSSの方のWebKitにてアタリを引きました。
現在詳細を調査中です。
まとまりましたら回答いたします。

回答を頂いた方、この質問に興味を示された方々ありがとうございました


  • 追記 2017.05.17

いろいろ試した結果上記方法はプロセスごとのミュートでした
そのため別プロセスで動くFlashでは機能しないことが分かりました
現在WebKitによって起動された別プロセスへのアクセス、そのプロセス上での処理が可能かを調査中です

リンクを忘れていたのでリンクしておきます
WebKitでの該当部分


  • 追記 2017.05.20

WKWebKitを用いることにより希望どおりの動作 - WKWebViewごとにミュートする - を実現できました。

ただ、WKWebKitへのハックを行なっているためここに回答として記載して良いか分かりませんので、回答は控えさせていただきます。

acevif👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

私なら、以下のような感じでトライしてみます。

・flash プレイヤーをJavascript等から制御する方法を調査する。
スピーカーをオフにするとか
・flashコンテンツに音声停止ボタンなどがあるのであれば、javascriptなどから、flashコンテンツに直接ボタン押下イベントを押せるか否かを調査する
・以下のコンポーネントを利用して制御できるか試してみる
http://qiita.com/ienaga/items/c9f04d6cd9874d4ec1a7

・標準Flashを処理させずに、独自プラグインを作成し、音声を再生できないようなプレイヤを作成できるか調査する
http://stackoverflow.com/questions/4885513/prevent-flash-in-cocoa-webview

もっとあるかもしれませんが、とりあえずこんなところです。

投稿2017/05/10 07:08

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiHori

2017/05/11 07:47

FlashをJavascriptから制御する方法があるのですね。知りませんでした。 ただ、残念なことにFlashコンテンツの利用規約により、 1. リバースエンジニアリングの禁止 2. 外部ツール等による操作の禁止 などが謳われておりFlashへのアプローチ、および非公式Flashプレイヤの利用は出来かねます 内容自体は知らないことが数々列挙されており大変勉強になりました ありがとうございます
t_obara

2017/05/11 10:26

上記利用規約から鑑みるに、ユーザーの操作なしに音声再生をオフにすることも抵触するあるいはコンテンツを勝手に変更して欲しくないという意図に反することになるのではないでしょうか。 なぜ音声再生をオフにしたいのか分かり兼ねますが、ユーザーに音声が流れることに対して注意を促すことが良いのではないでしょうか?
MasakiHori

2017/05/11 23:55

「ユーザーの操作なしに」とは考えておりません。Safariと同じようにユーザーの能動的操作によるミュート機能の実現方法を探しています 利用規約に関しましては、推奨ブラウザであるSafariがミュート機能を備えていることから問題なくクリアされると判断しています Safariでタブ単位でのミュートが可能となったことからユーザーからの要望が多く入るようになったため実現の方法を探しています
MasakiHori

2017/05/12 00:41

大変申し訳ございません `flash プレイヤーをJavascript等から制御する` をflashコンテンツ自体への働きかけと勘違いしておりました Javascriptによる制御を精査します
MasakiHori

2017/05/16 14:24

残念ながらJavascriptによるFlash Playerのミュートの方法は見つかりませんでした 色々な情報ありがとうざいました
guest

0

自己解決

WKWebViewを用い、WKWebKitをハックすることにより可能。

投稿2017/05/20 06:11

MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私自身は最近はiOS用のプログラミングしかしていないのですが、
こちらのStackOverflowの質問の回答 How to play youtube video in UIWebView muted?にあるように、イベントを拾ってオブジェクトのボリュームを設定することはmacOSではできないでしょうか?

投稿2017/05/04 10:11

acevif

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiHori

2017/05/06 16:20

macOSではFlashがプラグインとして動いていて、Flashが音声を再生していますのでそのような高レベルのイベントは発生しないと思われます。 しいていえば、forkした子プロセスの出力を親プロセスから制御する方法を探している、という感じのものだと思います
acevif

2017/05/09 09:19

そうですか。。。 お役に立てずご免なさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問