【Swift】システムサウンドの再生方法!AudioServicesPlaySystemSoundの使い方

この記事からわかること

  • Swiftシステムサウンド再生方法
  • Audio Toolboxフレームワークとは?
  • AudioServicesPlaySystemSoundメソッド使い方
  • バイブレーション実装方法
  • システムサウンドファイル一覧

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

公式リファレンス:System Sounds

Swiftで音を鳴らすにはサウンドファイルを用意し、AVAudioPlayerクラスを使用して再生する方法と既存のシステムサウンドを鳴らす方法があります。今回は既存のシステムサウンドを鳴らす方法をまとめていきます。

システムサウンドとは?

iOSのシステムサウンドとは、デバイスがユーザーに対してフィードバックを提供するための音声エフェクトとしてデフォルトで用意されている機能のことです。着信音や通知音だけでなく、カメラのシャッター音、操作音などiOSデバイスを使用するにあたって基本的なサウンドのことを指します。

これらのサウンドファイルはデバイスの/System/Library/Audio/UISounds/内に任意のファイル名(と識別子:SystemSoundID)がつけて保存されており、iOSアプリ開発者はAudio Toolboxフレームワークを使用することでシステムサウンドを呼び出せるようになっています。

Audio Toolboxフレームワークとは?

公式リファレンス:Audio Toolbox Framework

Audio Toolboxフレークワークオーディオの録音または再生、フォーマットの変換、オーディオストリームの解析、およびオーディオセッションの構成を行うためのAPIを提供するフレームワークです。

要するにサウンドやバイブレーションなどを操作できるフレームワークであり、その中にシステムサウンドを再生するためのメソッドが用意されています。

AVFoundationとの違いと使い分け

Swiftでは似たようなフレームワークにAVFoundationフレームワークがあります。

おすすめ記事:【SwiftUI】AVAudioPlayerで音(サウンド)を鳴らす方法!

Audio ToolboxとAVFoundationは両方とも音声関連のAPIを提供するフレームワークです。

役割と違い

Audio Toolbox

低レベルのオーディオデータの処理や、オーディオエフェクトの実装、オーディオ信号の加工・変換など、音声関連の機能を提供。しかし、音声関連以外の機能は提供されていない。

AVFoundation

音声・動画の再生、録音・録画、ストリーミング再生、メディアファイルの編集など、多彩な機能を提供。音声・動画の再生アプリや、動画編集アプリなどに最適。

AudioServicesPlaySystemSoundメソッド

公式リファレンス:AudioServicesPlaySystemSound method

func AudioServicesPlaySystemSound(_ inSystemSoundID: SystemSoundID)

AudioServicesPlaySystemSoundメソッドがシステムサウンドを再生するための関数です。引数には鳴らしたいサウンドのSystemSoundIDを渡す必要があります。

AudioServicesPlaySystemSoundメソッドの仕様

システムサウンドの再生方法

とりあえずiOSアプリからシステムサウンドを再生する実装方法を見てみます。import AudioToolboxを忘れないように記述します。

import SwiftUI
import AudioToolbox

struct AudioPlayerView: View {
    
    var body: some View {
        Button {
            let soundIdBell:SystemSoundID = 1000
            AudioServicesPlaySystemSound(soundIdBell)
        } label: {
            Text("再生")
        }
        
    }
}

鳴らす方法は簡単で上記のように鳴らしたいサウンドID(最後に一覧を載せておきました)を準備してAudioServicesPlaySystemSoundメソッドを呼び出すだけです。

この方法の場合は任意のサウンドファイルのサウンドとバイブレーションが再生されます。デバイスのサウンド設定によって変化するので色々試してみてください。ちなみにシミュレーターではバイブレーションの確認はできませんでした。

SystemSoundID型

引数として渡すSystemSoundID型はUInt32型のタイプエイリアスなのでそのまま数値で渡せばOKです。

typealias SystemSoundID = UInt32

おすすめ記事:【Swift UI】typealias(タイプエイリアス)の使い方とメリット

バイブレーションのみを鳴らす

公式リファレンス:Alert Sound Identifiers

バイブレーションのみを呼び出したい場合は引数にkSystemSoundID_Vibrateを渡します。デバイスの設定にもよりますが確認したい場合は実機にビルドしてサイレントモードに切り替えて試してみてください。

おすすめ記事:【Xcode】実機のiPhoneに自作アプリをビルドする方法!

Button {
    AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
} label: {
    Text("バイブレーション")
}

サウンドのみ鳴らす

バイブレーションは鳴らさずサウンドのみを鳴らしたい場合AudioServicesCreateSystemSoundIDメソッドを使用します。鳴らしたいサウンドのファイルパスを明示的に指定し、引数に渡せばシステムサウンドオブジェクトを生成してくれます。

Button {
    var soundIdBell:SystemSoundID = 0
    let soundUrl = NSURL(fileURLWithPath :" /System/Library/Audio/UISounds/new-mail.caf")
    AudioServicesCreateSystemSoundID(soundUrl, &soundIdBell)
    AudioServicesPlaySystemSound(soundIdBell)
    print(soundIdBell)
} label: {
    Text("サウンドのみ")
}

iOSシステムサウンド一覧

指定できるサウンドシステムファイルのSound IDやファイル名は以下の通りです。ファイル名とカテゴリーからではどのような音か識別できない部分も多いので実際に鳴らして試してみてください。例えば1000はベルのような音が流れます。

Sound ID ファイル名(iPhone) カテゴリー
1000 new-mail.caf メール受信
1001 mail-sent.caf メール送信
1002 Voicemail.caf 音声メール受信
1003 ReceivedMessage.caf SMS受信
1004 SentMessage.caf SMS送信
1005 alarm.caf カレンダーアラート
1006 low_power.caf LowPower
1007 sms-received1.caf SMS受信音
1008 sms-received2.caf SMS受信音
1009 sms-received3.caf SMS受信音
1010 sms-received4.caf SMS受信音
1011 - SMS受信バイブレート
1012 sms-received1.caf SMS受信音
1013 sms-received5.caf SMS受信音
1014 sms-received6.caf SMS受信音
1015 Voicemail.caf -
1016 tweet_sent.caf SMSSent
1020 Anticipate.caf SMS受信音
1021 Bloom.caf SMS受信音
1022 Calypso.caf SMS受信音
1023 Choo_Choo.caf SMS受信音
1024 Descent.caf SMS受信音
1025 Fanfare.caf SMS受信音
1026 Ladder.caf SMS受信音
1027 Minuet.caf SMS受信音
1028 News_Flash.caf SMS受信音
1029 Noir.caf SMS受信音
1030 Sherwood_Forest.caf SMS受信音
1031 Spell.caf SMS受信音
1032 Suspense.caf SMS受信音
1033 Telegraph.caf SMS受信音
1034 Tiptoes.caf SMS受信音
1035 Typewriters.caf SMS受信音
1036 Update.caf SMS受信音
1050 ussd.caf USSDAlert
1051 SIMToolkitCallDropped.caf SIMToolkitTone
1052 SIMToolkitGeneralBeep.caf SIMToolkitTone
1053 SIMToolkitNegativeACK.caf SIMToolkitTone
1054 SIMToolkitPositiveACK.caf SIMToolkitTone
1055 SIMToolkitSMS.caf SIMToolkitTone
1057 Tink.caf PINキー操作
1070 ct-busy.caf AudioToneBusy
1071 ct-congestion.caf AudioToneCongestion
1072 ct-path-ack.caf AudioTonePathAcknowledge
1073 ct-error.caf AudioToneError
1074 ct-call-waiting.caf AudioToneCallWaiting
1075 ct-keytone2.caf AudioToneKey2
1100 lock.caf ScreenLocked
1101 unlock.caf ScreenUnlocked
1102 - FailedUnlock
1103 Tink.caf キー操作
1104 Tock.caf キー操作
1105 Tock.caf キー操作
1106 beep-beep.caf ConnectedToPower
1107 RingerChanged.caf RingerSwitchIndication
1108 photoShutter.caf シャッター音
1109 shake.caf シェイク音
1110 jbl_begin.caf JBL_Begin
1111 jbl_confirm.caf JBL_Confirm
1112 jbl_cancel.caf JBL_Cancel
1113 begin_record.caf 録音開始
1114 end_record.caf 録音終了
1115 jbl_ambiguous.caf JBL_Ambiguous
1116 jbl_no_match.caf JBL_NoMatch
1117 begin_video_record.caf ビデオ録画開始
1118 end_video_record.caf ビデオ録画終了
1150 vc~invitation-accepted.caf VCInvitationAccepted
1151 vc~ringing.caf VCRinging
1152 vc~ended.caf VCEnded
1153 ct-call-waiting.caf VCCallWaiting
1154 vc~ringing.caf VCCallUpgrade
1200 dtmf-0.caf TouchTone
1201 dtmf-1.caf TouchTone
1202 dtmf-2.caf TouchTone
1203 dtmf-3.caf TouchTone
1204 dtmf-4.caf TouchTone
1205 dtmf-5.caf TouchTone
1206 dtmf-6.caf TouchTone
1207 dtmf-7.caf TouchTone
1208 dtmf-8.caf TouchTone
1209 dtmf-9.caf TouchTone
1210 dtmf-star.caf TouchTone
1211 dtmf-pound.caf TouchTone
1254 long_low_short_high.caf Headset_StartCall
1255 short_double_high.caf Headset_Redial
1256 short_low_high.caf Headset_AnswerCall
1257 short_double_low.caf Headset_EndCall
1258 short_double_low.caf Headset_CallWaitingActions
1259 middle_9_short_double_low.caf Headset_TransitionEnd
1300 Voicemail.caf SystemSoundPreview
1301 ReceivedMessage.caf SystemSoundPreview
1302 new-mail.caf SystemSoundPreview
1303 mail-sent.caf SystemSoundPreview
1304 alarm.caf SystemSoundPreview
1305 lock.caf SystemSoundPreview
1306 Tock.caf KeyPressClickPreview
1307 sms-received1.caf SMS受信選択
1308 sms-received2.caf SMS受信選択
1309 sms-received3.caf SMS受信選択
1310 sms-received4.caf SMS受信選択
1311 - SMS受信バイブレート
1312 sms-received1.caf SMS受信選択
1313 sms-received5.caf SMS受信選択
1314 sms-received6.caf SMS受信選択
1315 Voicemail.caf SystemSoundPreview
1320 Anticipate.caf SMS受信選択
1321 Bloom.caf SMS受信選択
1322 Calypso.caf SMS受信選択
1323 Choo_Choo.caf SMS受信選択
1324 Descent.caf SMS受信選択
1325 Fanfare.caf SMS受信選択
1326 Ladder.caf SMS受信選択
1327 Minuet.caf SMS受信選択
1328 News_Flash.caf SMS受信選択
1329 Noir.caf SMS受信選択
1330 Sherwood_Forest.caf SMS受信選択
1331 Spell.caf SMS受信選択
1332 Suspense.caf SMS受信選択
1333 Telegraph.caf SMS受信選択
1334 Tiptoes.caf SMS受信選択
1335 Typewriters.caf SMS受信選択
1336 Update.caf SMS受信選択
1350 - RingerVibeChanged
1351 - SilentVibeChanged
4095 - Vibrate

参考文献: AudioServices-Predefined sounds

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index