C言語のゲームで効果音を鳴らす

(1) 方法1 : サウンド再生コマンド

Linux ならpaplay、Mac なら afplay という コマンドがプレインストールされています。

Linux man page: paplay

Apple macOS command line: afplay

これを system 関数を使って実行する。
C言語の標準環境で実装できるので、お手軽です。

C言語 標準ライブラリのリファレンス: system

サウンドファイルもプレインストールされているものを使います。
Linux では
/usr/share/sounds/freedesktop/stereo/
Mac では
/System/Library/Sounds/

サンプルコードを Github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/sound

(2) 方法2 : SDL_mixer

クロスプラットフォームのマルチメディアライブラリです。

wiki: SDL

ライブラリのインストールが必要ですが、
効果音を鳴らすためのプログラムは割と簡単です。

qiita: C/C++でcross-platformでの音楽再生にはSDL_mixerが便利

サンプルコードを github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/SDL2_mixer

Mac で oga 形式を使う

Linux では、下記のディレクトリに
多くの効果音ファイルが oga 形式で格納されている。 /usr/share/sounds/freedesktop/stereo/

Mac にて、これらのファイルを利用したい。

ファイルは下記で公開されている。
freedesktop.org: sound-theme-freedesktop

しかし、afplay は oga 形式に対応していない。
そこで、下記のような方法をとる。

wikipedia: Ogg

(1) 方法1 : paplay

paplay は PulseAudio のライブラリに内包されている。 brew コマンドでインストールする。 なお、mp3 には対応していない。

Homebrew Formulae: pulseaudio

(2) 方法2 : SDL_mixer

SDL_mixer は、oga, mp3 に対応している。

sdlplay という実行ファイルを作り、下記に置いておくと、
サウンド再生コマンドとして使えて、便利です。

/usr/local/bin

(3) 方法3 : VLC

クロスプラットフォームで動作するメディアプレーヤーです。
oga, mp3 に対応している。

wikipedia: VLCメディアプレーヤー

下記からダウンロードする。
https://www.videolan.org/vlc/

または、brew コマンドでインストールする。

Homebrew Formulae: vlc

(4) 補足: QuickTime アプリ と Music アプリ では再生できなかった

Apple Support: QuickTime Player

Apple Support: Apple Music

oga 形式を wav 形式に変換する

wav 形式ならば、
全ての サウンド再生コマンド と サウンド再生ライブラリ が対応しているので、悩みはなくなる。

(1) 方法1 : sox コマンド

さまざまな形式のオーディオファイルを他の形式に変換できます。

こんな風に使う。
sox -t ogg sample.oga -t wav sample.wav

ossnews: オープンソースのSoXとは

Homebrew Formulae: sox

(2) l方法2 : libogg libvorbis

oga 形式のファイルを扱うための 低レベルAPI のライブラリです。
これを使って変換プログラムを自作する。

wikipedia: Ogg

wikipedia: Vorbis

Homebrew Formulae: libogg

Homebrew Formulae: libvorbis

単一のファイルの変換ならば、sox コマンドで十分です。
ディレクトリのあるファイルを一括で変換できるようにする。

サンプルコードを github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/libvorbis