日本語English

公開メソッド仕様

go-fmml をアプリケーションから利用する際に呼び出す公開関数・メソッドの一覧です。

通常のBGM再生用途では「①ファイル入力 → ②fmcore.NewEngineでエンジンを生成 → ③再生制御」の3系統だけで完結します。④FM/PCM音源コア 低レベルAPI は、MMLを使わず単音 を直接鳴らしたい場合や、独自のシーケンサを組みたい場合のためのAPIです。

① ファイル入力 package fileio

fileio.LoadFMVoiceFile(path string) error

FM音色

指定した絶対パスのFM音色パラメータYAMLファイルを読み込み・解析し、メモリに登録します。軽微な 解析エラーはログに警告出力した上で処理を継続し、致命的なエラー(YAML自体が不正等)の場合のみ errorを返します。

fileio.LoadFMVoiceFileFS(fsys embed.FS, path string) error

FM音色 / embed

LoadFMVoiceFileembed.FS版。go:embedでゲーム本体に埋め 込んだFM音色ファイルを読み込みます。

fileio.LoadPCMVoiceFile(path string) error

PCM音色

指定した絶対パスのPCM音色パラメータYAMLファイルを読み込み、参照されている全てのWAVファイルも 併せて読み込んでメモリに登録します。各voiceSettingfileNameがファイル 名のみ(パス無し)の場合はYAMLファイルと同一フォルダを探索します。WAV読み込みに失敗した場合も errorを返します。

fileio.LoadPCMVoiceFileFS(fsys embed.FS, path string) error

PCM音色 / embed

LoadPCMVoiceFileembed.FS版。fileNameのパス解決は fsysのルートを基準に行います。

fileio.LoadMMLFile(path string) error

MML

指定した絶対パスの.mmlシーケンスファイルを読み込み・解析し、 [global]sequenceIDをキーとしてメモリに登録します。

fileio.LoadMMLFileFS(fsys embed.FS, path string) error

MML / embed

LoadMMLFileembed.FS版。

fileio.SetMMLTextData(data string) error

MML / 文字列

MMLファイルと同じ書式のテキストを、ファイルではなくGoの文字列(バッククォート複数行リテラル 等)として直接渡して読み込みます(Phase 7)。以降の処理はLoadMMLFileと同一です。

fileio.SetFMVoiceData(data string) error

FM音色 / 文字列

FM音色パラメータYAMLと同じ書式のテキストを文字列として直接渡して読み込みます(Phase 7)。

fileio.SetPCMVoiceData(data string) error

PCM音色 / 文字列

PCM音色パラメータYAMLと同じ書式のテキストを文字列として直接渡して読み込みます(Phase 7)。 参照WAVファイルの相対パスはプロセスのカレントディレクトリを基準に解決されます。

WAV読み込みの効率化(Phase 7):LoadPCMVoiceFile / LoadPCMVoiceFileFS / SetPCMVoiceData はいずれも、解決済みファイルパスが既にメモリ上にキャッシュ済みの場合は 再デコードせずキャッシュを再利用します。

② メモリ管理 package memory

memory.ClearVoices()

FM音色

登録済みの全FM音色をメモリから削除します。

memory.ClearPCMVoices()

PCM音色

登録済みの全PCM音色をメモリから削除します(波形キャッシュ自体は消えません)。

memory.ClearPCMWaveCache()

PCM波形 / Phase 7

デコード済みWAV波形のキャッシュを全て削除し、メモリを解放します。音色定義(ClearPCMVoices が扱う対象)とは別物です。

memory.ClearSequences()

シーケンス

読み込み済みの全シーケンスデータ(MML解析結果)をメモリから削除します。

③ 再生制御 package player

player.Play(engine Engine, sequenceID string, onComplete func()) error

再生

読み込み済みのシーケンスを非同期で再生開始します(呼び出し元はブロックされません)。既に何か 再生中であれば先に停止します。ループしない曲が最後まで再生し終えたタイミングでonComplete が(非nilなら)バックグラウンドgoroutineから1回だけ呼ばれます。[global]startOffsetが設定されている場合は、その位置から再生を開始します。

player.SkipPlay(engine Engine, sequenceID string, seekSeconds float64, onComplete func()) error

再生

Playと同様ですが、曲の先頭ではなくseekSeconds秒の位置から再生を開始 します。ノートの途中に位置する場合はそのノートの先頭まで巻き戻ります。

player.FadeInPlay(engine Engine, sequenceID string, fadeSeconds float64, onComplete func()) error

再生 / フェード

音量0から開始し、fadeSeconds秒かけて[global]のvolumeまで滑らかに フェードインしながら再生します。

player.FadeOutPlay(engine Engine, sequenceID string, fadeSeconds float64, onComplete func()) error

再生 / フェード

曲の終わりのfadeSeconds秒前からフェードアウトを開始し、曲の終端でちょうど音量0に なるように再生します。loop: trueの曲では自動フェードアウトは行われません (Playと同じ動作)。

player.FadeInOutPlay(engine Engine, sequenceID string, fadeSeconds float64, onComplete func()) error

再生 / フェード

FadeInPlayFadeOutPlayを組み合わせた再生です。

player.FadeOut(fadeSeconds float64) error

フェード

現在再生中のシーケンスを、任意のタイミングからfadeSeconds秒かけてフェードアウトし、 音量0に達した時点で再生を停止します。loop: trueの曲にも適用されます(自動フェードとは 異なり明示的にいつでも呼び出せます)。

player.SetMasterVolume(engine Engine, volume float64)

音量

[global]のvolumeと同じ0-127スケールの実値でマスターボリュームを上書きします。曲の 再生中に呼んだ場合は約0.3秒かけて滑らかに変化し、再生中でなければ即座に反映されます。

player.SetMasterVolumePercent(engine Engine, percent float64)

音量

直近に読み込んだシーケンスの[global]volume値を100%として、パーセント指定でマスタ ーボリュームを設定します(50なら半分の音量)。再生中の滑らかな変化挙動はSetMasterVolume と同じです。

player.Pause() error

再生制御

再生中のシーケンスをその場で一時停止します(短いフェードアウトで途切れを防止)。何も再生して いない場合はエラーを返します。

player.Resume() error

再生制御

Pauseで一時停止したシーケンスの再生を再開します。ノートの途中で一時停止していた 場合はそのノートの先頭まで巻き戻して再開します。

player.Stop() error

再生制御

再生中(または一時停止中)のシーケンスを完全に停止します。

player.IsPlaying() bool

状態取得

現在アクティブに再生中かどうかを返します(一時停止中や未再生時はfalse)。

player.Rewind() error

再生制御

再生位置を曲の先頭(tick 0)に巻き戻します。再生中であれば即座に先頭から再生し直し、一時停止中 であれば次のResume時に先頭から再生されます。

④ FM/PCM音源コア 低レベルAPI package fmcore

MMLを介さず、音色登録から発音までを直接コードで制御したい 場合に使用します。fmcore.EngineがFM・PCM両方の音源コアを内包しています。

fmcore.NewEngine(sampleRate int) (*Engine, error)

初期化

音声出力デバイスを開き(内部でoto/v3のコンテキストを初期化)、指定サンプルレート でエンジンを生成します。

fmcore.NewEngineWithoutOutput(sampleRate int) *Engine

初期化

音声デバイスを開かずにエンジンを生成します。*Engine自体がio.Readerを 実装しているため、アプリ側が既に持っているoto.Contextにプレイヤーとして登録できます。

(*Engine) RegisterVoice(id VoiceID, voice Voice)

音色登録

FM音色パラメータ(オペレータ、エンベロープ、アルゴリズム)をIDを付けてメモリに登録します。

(*Engine) SetPart(id PartID, voice VoiceID, volume, pan float64) error

パート設定

指定した発音パートに、鳴らす音色ID・音量・パン定位を設定します。

(*Engine) NoteOnRow(partID PartID, noteNumber uint8, durationMs int, velocity uint8) (NoteID, error)

発音

ノート番号・発音長(ms)・ベロシティを数値で直接指定して発音します。発音IDを即座に返し、実際の 発音処理は非同期に継続します。

(*Engine) NoteOn(partID PartID, noteName string, noteType string, sustain int, velocity uint8) (NoteID, error)

発音

"C#5"のようなノート名、"NOTE4"のような音符種別、サスティン(%)、 ベロシティを指定して発音する抽象化版です。内部でノート番号・発音長msに変換されます。

(*Engine) RegisterPCMVoice(id pcmcore.VoiceID, voice pcmcore.Voice)

PCM音色登録

PCM音色(oneShot/long)を登録します。

(*Engine) SetPCMPart(id pcmcore.PartID, voice pcmcore.VoiceID, volume, pan float64) error

PCMパート設定

PCM発音パート('A'〜'P')に音色・音量・パンを設定します。

(*Engine) SetMasterVolume(volume float64) / SetMasterVolumeSmooth(target, rampSeconds float64)

音量

エンジン全体のマスターボリューム(0.0-1.0)を即時または滑らかに設定します。player パッケージの音量APIはこれらのラッパーです。

(*Engine) SetReverb(enabled bool, kind string, timeSeconds, level float64) / SetPartReverbSend(id PartID, send float64)

リバーブ

マスターリバーブの有効化・種類("simple"=Schroeder型 / "normal"=FDN型) ・リバーブタイム・レベルを設定し、パート単位のセンドレベルを設定します。

(*Engine) Close() error

終了処理

音声出力デバイスを閉じます(NewEngineで開いた場合)。

上記はアプリケーションから直接呼ぶことを想定した主要メソッドの抜粋です。 Schedule*系メソッド(ScheduleNoteOn等、サンプル単位で発音タイミングを予約 する低レベルAPI)は主にplayerパッケージの内部実装が使用するものですが、独自シーケンサ を組む場合にも利用できます。詳細はソースコードのコメントを参照してください。