Kuina-chan

くいなちゃん2018年12月11日


プログラミング言語Kuin」の言語仕様303、「sndライブラリ」についてです。

1ogg、sndライブラリ

音声を再生するライブラリ「snd.kn」とそれに付随するライブラリを解説します。
sndライブラリは、コンパイルオプションの実行環境が「wnd(ウインドウアプリ)」のときのみ使用可能です。
名前 説明
ogg@init oggライブラリを初期化する関数
snd@Snd サウンドクラス
snd@Snd.freq サウンドの周波数を設定するメソッド
snd@Snd.getPos サウンドの再生位置を取得するメソッド
snd@Snd.len サウンドの長さを取得するメソッド
snd@Snd.pan サウンドのパンを設定するメソッド
snd@Snd.play サウンドを1回だけ再生するメソッド
snd@Snd.playLoop サウンドをループ再生するメソッド
snd@Snd.playing サウンドが再生中かどうかを取得するメソッド
snd@Snd.setPos サウンドの再生位置を設定するメソッド
snd@Snd.stop サウンドを停止するメソッド
snd@Snd.volume サウンドの音量を設定するメソッド
snd@getMainVolume 全体の音量を取得する関数
snd@makeSnd サウンドクラスのインスタンスをファイルから生成する関数
snd@setMainVolume 全体の音量を設定する関数

2ogg@init

「ogg@init」は、oggライブラリを初期化する関数です。

func init()

oggライブラリとは、「.ogg」ファイルを読み込むために必要なライブラリです。 oggライブラリは内部でオープンソースライブラリ「libogg」「libvorbis」を用いており、ogg@init関数を利用するとこれらのライブラリとライセンスファイルが「data」フォルダ内に生成されます。

3snd@Snd

「snd@Snd」は、サウンドクラスです。

3.1snd@Snd.freq



「snd@Snd.freq」は、サウンドの周波数を設定するメソッドです。

func freq(value: float)

value 本来の周波数からの倍率(0.1以上、2.0以下)
valueを0.5に設定すると本来の半分の速度で再生され、2.0に設定すると本来の倍速で再生されます。
表3-1: snd@Snd.freqの例外
発生条件 ビルド 例外コード
(16進数)
valueが0.1以上2.0以下の範囲外 dbg E9170006

3.2snd@Snd.getPos



「snd@Snd.getPos」は、サウンドの再生位置を取得するメソッドです。

func getPos(): float

戻り値 再生位置[秒]
このメソッドはストリーミング再生では使用できません。
表3-2: snd@Snd.getPosの例外
発生条件 ビルド 例外コード
(16進数)
ストリーミング再生でこのメソッドを呼び出した dbg E917000A

3.3snd@Snd.len



「snd@Snd.len」は、サウンドの長さを取得するメソッドです。

func len(): float

戻り値 サウンドの長さ[秒]

3.4snd@Snd.pan



「snd@Snd.pan」は、サウンドのパンを設定するメソッドです。

func pan(value: float)

value パン(-1.0以上、1.0以下)
valueを-1.0に設定すると左のチャンネルからのみ音が鳴り、1.0に設定すると右のチャンネルからのみ音が鳴ります。 初期値は0.0で、ちょうど中央から音が鳴ります。
表3-3: snd@Snd.panの例外
発生条件 ビルド 例外コード
(16進数)
valueが-1.0以上1.0以下の範囲外 dbg E9170006

3.5snd@Snd.play



「snd@Snd.play」は、サウンドを1回だけ再生するメソッドです。

func play()

3.6snd@Snd.playLoop



「snd@Snd.playLoop」は、サウンドをループ再生するメソッドです。

func playLoop(loopPos: float)

loopPos 終端まで再生したときに戻す再生位置[秒]
イントロの終わりの位置をloopPosに設定すると、イントロを除いた部分をループするようになります。
非ストリーミング再生の場合は、loopPosは0.0に設定しなければなりません。
表3-4: snd@Snd.playLoopの例外
発生条件 ビルド 例外コード
(16進数)
非ストリーミング再生でloopPosが0.0以外 dbg E9170006
valueが0.0未満もしくはサウンドの長さ以上 dbg E9170006

3.7snd@Snd.playing



「snd@Snd.playing」は、サウンドが再生中かどうかを取得するメソッドです。

func playing(): bool

戻り値 再生中ならtrue、停止中ならfalse
ストリーミング再生の場合、サウンドが終端まで再生し終わっても約3秒間、このメソッドはtrueを返し続けます。 非ストリーミング再生の場合や、snd@Snd.stopメソッドで停止した場合は直ちにfalseを返します。

3.8snd@Snd.setPos



「snd@Snd.setPos」は、サウンドの再生位置を設定するメソッドです。

func setPos(value: float)

value 再生位置[秒]
このメソッドはストリーミング再生では使用できません。
表3-5: snd@Snd.setPosの例外
発生条件 ビルド 例外コード
(16進数)
valueが0.0未満もしくはサウンドの長さ以上 dbg E9170006
ストリーミング再生でこのメソッドを呼び出した dbg E917000A

3.9snd@Snd.stop



「snd@Snd.stop」は、サウンドを停止するメソッドです。

func stop()

3.10snd@Snd.volume



「snd@Snd.volume」は、サウンドの音量を設定するメソッドです。

func volume(value: float)

value 音量(0.0以上、1.0以下)
表3-6: snd@Snd.volumeの例外
発生条件 ビルド 例外コード
(16進数)
valueが0.0以上1.0以下の範囲外 dbg E9170006

4snd@getMainVolume

「snd@getMainVolume」は、全体の音量を取得する関数です。

func getMainVolume(): float

戻り値 全体の音量(0.0以上、1.0以下)

5snd@makeSnd

「snd@makeSnd」は、サウンドクラスのインスタンスをファイルから生成する関数です。

func makeSnd(path: []char, streaming: bool): snd@Snd

path サウンドのファイルパス(.wav、.ogg)
streaming ストリーミング再生する場合はtrue、音声データをすべて読み込む場合はfalse
戻り値 サウンドクラスのインスタンス
「.ogg」形式のファイルを読み込む場合、事前にogg@init関数を呼ぶ必要があります。
表5-1: snd@makeSndの例外
発生条件 ビルド 例外コード
(16進数)
ファイルの拡張子が「.wav、.ogg」以外 dbgのみ E9170006
長さが1秒未満の音声に対して、streamingにtrueを指定 dbgのみ E9170006
ファイルが存在しない dbg、rls E9170007
サウンドの生成に失敗 dbg、rls E9170009

6snd@setMainVolume

「snd@setMainVolume」は、全体の音量を設定する関数です。

func setMainVolume(value: float)

value 全体の音量(0.0以上、1.0以下)
各サウンドの最終的な音量は、各サウンドに設定された音量と全体の音量の積で決定されます。
全体の音量はアプリ起動時には1.0に設定されています。
表6-1: snd@setMainVolumeの例外
発生条件 ビルド 例外コード
(16進数)
valueが0.0以上1.0以下の範囲外 dbg E9170006
1544534779jaf