Home English

Kuina-chan

くいなちゃんDec 15, 2017


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

sndライブラリ

音声を再生するライブラリ「snd.kn」とそれに付随するライブラリを解説します。
sndライブラリは、コンパイルオプションの実行環境が「wnd(ウインドウアプリ)」のときのみ使用可能です。
sndライブラリとそれに付随するライブラリに用意されているものはsndライブラリの通りです。
sndライブラリ
名前 説明
ogg@init oggライブラリを初期化する関数
snd@getMainVolume 全体の音量を取得する関数
snd@makeSnd サウンドクラスのインスタンスをファイルから生成する関数
snd@setMainVolume 全体の音量を設定する関数
snd@Snd サウンドクラス

ogg@init

「ogg@init」はoggライブラリを読み込む関数です(ogg@init関数の定義)。
ogg@init関数の定義

 func init()

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

snd@getMainVolume

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

 func getMainVolume(): float

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

snd@makeSnd

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

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

path サウンドのファイルパス(.wav、.ogg)
streaming ストリーミング再生する場合はtrue、音声データをすべて読み込む場合はfalse
戻り値 サウンドクラスのインスタンス
ストリーミング再生では、2秒間ずつ音声データを読み込みながら再生します。 ストリーミング再生を行うには、音声データは最低でも1秒間以上なければなりません。 このほか、ストリーミング再生と非ストリーミング再生にはいくつかの違いがあります(ストリーミング再生と非ストリーミング再生)。
「.ogg」形式のファイルを読み込む場合、事前にogg@init関数を呼ぶ必要があります。
ストリーミング再生と非ストリーミング再生
項目 ストリーミング再生 非ストリーミング再生
読み込み方法 2秒間ずつ読み込みながら再生 あらかじめ音声データをすべて読み込み
音声データの長さ 1秒間以上 制約なし
ループ再生 任意の位置からループ可能 必ず先頭からループ
再生位置の取得 取得不可能 取得可能
再生位置の設定 設定不可能 設定可能
「snd@makeSnd」が生成する例外はsnd@makeSnd関数の例外の通りです。
snd@makeSnd関数の例外
発生条件 ビルド 例外コード
(16進数)
ファイルの拡張子が「.wav、.ogg」以外 dbgのみ E9170006
長さが1秒未満の音声に対して、streamingにtrueを指定 dbgのみ E9170006
ファイルが存在しない dbg、rls E9170007
サウンドの生成に失敗 dbg、rls E9170009

snd@setMainVolume

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

 func setMainVolume(value: float)

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

snd@Snd

「snd@Snd」は音声データを扱うクラスで、定義はsnd@Sndクラスの定義の通りです。
snd@Sndクラスの定義
名前 説明
snd@Snd.freq サウンドの周波数を設定する
snd@Snd.getPos サウンドの再生位置を取得する
snd@Snd.len サウンドの長さを取得する
snd@Snd.pan サウンドのパンを設定する
snd@Snd.play サウンドを1回だけ再生する
snd@Snd.playing サウンドが再生中かどうかを取得する
snd@Snd.playLoop サウンドをループ再生する
snd@Snd.setPos サウンドの再生位置を設定する
snd@Snd.stop サウンドを停止する
snd@Snd.volume サウンドの音量を設定する

snd@Snd.freq

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

 func freq(value: float)

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

snd@Snd.getPos

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

 func getPos(): float

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

snd@Snd.len

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

 func len(): float

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

snd@Snd.pan

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

 func pan(value: float)

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

snd@Snd.play

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

 func play()

snd@Snd.playing

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

 func playing(): bool

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

snd@Snd.playLoop

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

 func playLoop(loopPos: float)

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

snd@Snd.setPos

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

 func setPos(value: float)

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

snd@Snd.stop

「snd@Snd.stop」はサウンドを停止するメソッドです(snd@Snd.stopメソッドの定義)。
snd@Snd.stopメソッドの定義

 func stop()

snd@Snd.volume

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

 func volume(value: float)

value 音量(0.0以上、1.0以下)
「snd@Snd.volume」が生成する例外はsnd@Snd.volumeメソッドの例外の通りです。
snd@Snd.volumeメソッドの例外
例外コード
(16進数)
ビルド 発生条件
valueが0.0以上1.0以下の範囲外 dbg E9170006
1513347187ja