LoginSignup
0
1

ローカル通知音をカスタム音源で MacOS/OSX

Last updated at Posted at 2024-01-08

MAC用プログラムでカスタム通知音ができるのか?

環境  Intel iMac macOS Ventura

 自分が確認した結果であります。テストの方法の問題や確認ミスでうまくできなかった可能性もあります。参考程度で見ていただければ幸いです。

iosでカスタム通知音ができたので Macでもできるんではないかと挑んでみたが、
見事につまづきましたので覚書します。

iosの場合、<app_container>/Library/Sounds に 30秒以下の音源を設置して、
UNNotificationSound の

  • soundNamed: Objective-c
  • init(named:) Swift

で音源名を指定すれば通知で音が鳴りました。
(音源は、AIFFファイル テストは,Objective-c)

Macの場合もマニュアルではできそうに見えるのだが......

試練1 プログラムで音源設置

iosの場合,<app_container>/Libraryに Soundsのディレクトリがなかったのでディレクトリ作成して音源ファイルを設置した記憶があるのだが、Mac(iMac)の場合は、すでにありました。 「GoodでAppleさん」と感心していた。

まずプログラムで <app_container>/Library/Sounds に プログラムで 音源を置いてみたら
permissionエラーになって書き込みができない。 「は〜?」
SnadBOX内であろうと自由に触っていいわけでわないらしい

Finderで同じディレクトリに音源を書き込むと書き込めるのにね。エラーを調べると権限がないようである。 これは困りました。とても困りました。
がよくよくマニュアルを確認すると・・・・・

APPLEのマニュアルには、もう一つの方法が記載されてるのを見落としていた。

The /Library/Sounds directory, where is one of the app’s shared group container directories. For information about how to configure group containers for your app, see Configure app groups.

つまり APP Group 作ったら APP Groupのディレクトリでもできるよ...と
APP Group下では iosと同じでSoundsディレクトリがなかった。iosの時と同様にディレクトリを作成して音源を置いてみたら 音源は置けましたが・・・・

試練1の結果

<app_container>/Library/Soundsでは

☞ プログラムで設置するには権限を変える必要がある 

この方は、コピーしたら解決したかのように言ってますが、ダメでした。権限なしは最強どす。勝てません

<group_container>/Library/Soundsでは

☞ プログラムで設置することはできた。 

試練2 音でない

試練1をクリアできたとして次の試練です。
試練1でのAPPグループ下でテストしていたが全く音が出ません。

  • <app_container>/Library/Sounds
  • <group_container>/Library/Sounds
  • XcodeでbundleResources

全部に音源設置しても音でません。 心折れるぐらい調べて確認したけど全くダメでしたが、

の方法

システム > サウンド > ユーザーエフェクトのサウンドエフェクトを再生
をOFFにして Mac再起動する。
起動してからプログラムを動作させてから ONにしたら、あら?音でました・・・・が、デフォルトの トゥルルンです。

※ユーザーエフェクトのサウンドエフェクト

ゴミ箱を空にしたりMAC上でアクションした時の効果音みたいです。

試練2の結果 

☞ 音が出るには出たが デフォルトの トゥルルンです。

試練3 デフォルトの トゥルルン

3つの場所にファイルを置いているのだが トゥルルン音

  • <app_container>/Library/Sounds
  • <group_container>/Library/Sounds
  • XcodeでbundleResources

音源変えたり、ファイル名を変えたりして試行錯誤していたら音でました。

  • ファイル名に@が含まれたら トゥルルン音になる。
  • IMA4 audio in a CAF でも  トゥルルン音だった。(記憶がちょい怪しい)
  • AIFF 及び AIFF in a CAF で うまく再生してくれた。
  • ユーザーエフェクトのサウンドエフェクトを再生 をOFFにしてると  無音になります。(カスタム音はエフェクト扱い)

試練3の結果

☞  音は、ファイル名と音源フォーマットと関連があるので  トゥルルン音が出ればチャンス

音源はマニュアルでさらっと説明している IMA4 audio in a CAF なのですが、

気になるが音出たのでよし。

試練4 音源をどこにおけば良いのか

同じファイルを3つの場所の1つに置いてみる
(権限もありますので Macでファイルを書き込みました)

  • <app_container>/Library/Sounds
  • <group_container>/Library/Sounds
  • XcodeでbundleResources

消去法での確認です。

結果 場所  備考   
<app_container>/Library/Sounds やっぱここですか
X <group_container>/Library/Sounds  ※参照
X Xcode bundle Resources 方法はありそうなのだが深追いしてない

※ 調べてみたらどうもiosだけ?

まとめ

1. /Library/Soundsに権限を与える。(プログラムで音源設置する場合)
2. システム > サウンド > ユーザーエフェクトのサウンドエフェクトを再生 はONにする
3. 音源ファイルはAIFFを使用

で音が鳴らせました。

が、注意がいりますね。
/Library/Soundsに音源設置したらシステム>サウンド>通知音の一覧に音源が表示される。
-> 多くなるとじゃま
2. ユーザーエフェクトのサウンドエフェクト止めると と カスタム通知音も止まる
3. 他の音源使う場合は、確認必要

Appendix

試練1 クリア方法

/Library/Soundsの権限は

  1. Signing & Capabilities で User Selected File で Write権限を与える。
  2. NSOpenPanelで ユーザーに <app_container>/Library/Sounds ディレクトリを選択してもらう。
    これで書き込みできました。

Soundsを間違っても削除して作成しないようにしてくださいね。Library/Soundにリンクを貼ってるようです。

他の方法があれば教えて欲しいです。

独り言

 SandBox内の Sounds ディレクトリに権限がないって そりゃないよぅ。
 システムのサウンドエフェクトで音がでないなら、マニュアルに書いておいてよぅ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1