v1.0.0.0 使い方ガイド

mruvorbis.dll

ALC Software Laboratory  |  User Guide & API Reference

クイックスタート

1
DLL を配置する
mruvorbis.dll を呼び出し元 EXE と同じフォルダに配置します。 Visual C++ 再頒布可能パッケージ (vcredist) が未インストールの場合はインストールしてください。
2
DLL を動的ロードする
LoadLibraryW(L"mruvorbis.dll") で DLL をロードします。 スタティックリンクやインポートライブラリは不要です。
3
関数ポインタを取得する
GetProcAddress() で必要な関数ポインタを取得します。 VorbisDllExports.h に全 API のシグネチャが記載されています。
4
初期化して再生する
Vorbis_InternalInit()VorbisPlayer_Create()VorbisPlayer_LoadFile()VorbisPlayer_Play() の順に呼び出します。 終了時は VorbisPlayer_Destroy()Vorbis_FinalizeAll()FreeLibrary()

API 早見表

初期化 / 終了
Vorbis_InternalInit()DLL 初期化(起動直後に 1 度呼ぶ)
Vorbis_FinalizeAll()DLL 終了処理(FreeLibrary 前に呼ぶ)
Vorbis_GetVersionString()バージョン文字列取得(wchar_t*)— __stdcall
Vorbis_GetBuildInfo()ビルド情報取得(SIMD レベル等)— __stdcall
Vorbis_GetLastError()最後のエラーメッセージ取得(char*)
再生 (VorbisPlayer) — 基本操作
VorbisPlayer_Create()プレイヤーハンドル作成
VorbisPlayer_Destroy(h)プレイヤー破棄
VorbisPlayer_LoadFile(h, path)ファイルロード(wchar_t* パス)
VorbisPlayer_LoadFromMemory(h, data, sz)メモリバッファからロード
VorbisPlayer_Play(h)再生開始
VorbisPlayer_Stop(h)再生停止
VorbisPlayer_Pause(h, BOOL)一時停止 / 再開
VorbisPlayer_SeekMs(h, ms)ミリ秒シーク
VorbisPlayer_IsPlaying(h)再生中判定
VorbisPlayer_IsPaused(h)一時停止中判定
再生 (VorbisPlayer) — 音量 / パン / フェード
VorbisPlayer_SetVolume(h, vol)音量設定(0.0〜1.0)
VorbisPlayer_GetVolume(h)音量取得
VorbisPlayer_SetMute(h, BOOL)ミュート設定
VorbisPlayer_IsMuted(h)ミュート状態取得
VorbisPlayer_SetPan(h, pan)パン設定(-1.0=左 / 0.0=中央 / 1.0=右)
VorbisPlayer_GetPan(h)パン取得
VorbisPlayer_StartFadeIn(h, ms)フェードイン開始
VorbisPlayer_StartFadeOut(h, ms)フェードアウト開始
再生 (VorbisPlayer) — ループ / 情報取得
VorbisPlayer_SetLoop(h, BOOL)ループ設定
VorbisPlayer_GetPositionMs(h)現在位置取得(ms)
VorbisPlayer_GetTotalMs(h)総時間取得(ms)
VorbisPlayer_GetTotalSamples(h)総サンプル数取得
VorbisPlayer_GetSampleRate(h)サンプルレート取得(ファイルに依存)
VorbisPlayer_GetChannels(h)チャンネル数取得
VorbisPlayer_GetBitrate(h)ビットレート取得
VorbisPlayer_DumpState(h)デバッグ状態文字列取得(char*)
クロスフェード (VorbisCrossfade)
VorbisCrossfade_Create()クロスフェードマネージャー作成
VorbisCrossfade_Destroy(h)マネージャー破棄
VorbisCrossfade_Play(h, path, loop)再生開始
VorbisCrossfade_CrossfadeTo(h, path, ms, loop)クロスフェード切り替え(ms でフェード時間指定)
VorbisCrossfade_Stop(h, fadeMs)停止(フェードアウト付き)
VorbisCrossfade_Pause(h, BOOL)一時停止 / 再開
VorbisCrossfade_SetVolume(h, vol)マスター音量設定
VorbisCrossfade_IsPlaying(h)再生中判定
VorbisCrossfade_IsCrossfading(h)クロスフェード中判定
VorbisCrossfade_GetPositionMs(h)現在再生位置取得(ms)
効果音プール (VorbisSePool)
VorbisSePool_Init(voices)プール初期化(最大ボイス数指定)
VorbisSePool_Finalize()プール破棄
VorbisSePool_Play(path, vol)SE 再生(ボイスハンドル返却)
VorbisSePool_Stop(handle)指定 SE 停止
VorbisSePool_StopAll()全 SE 停止
VorbisSePool_SetVolume(h, vol)ボイス音量設定
VorbisSePool_GetVolume(h)ボイス音量取得
VorbisSePool_GetActiveCount()再生中ボイス数取得
エンコード (VorbisEncoder)
VorbisEncoder_Create(ch, sr, quality)エンコーダ作成(quality: -0.1〜1.0)
VorbisEncoder_GetHeaders(enc, ...)Vorbis ヘッダパケット取得
VorbisEncoder_EncodeFrame(enc, pcm, ...)フレームエンコード(float PCM → Vorbis パケット)
VorbisEncoder_PollPacket(enc, ...)エンコード済みパケット取り出し
VorbisEncoder_Flush(enc, ...)残留パケットをフラッシュ
VorbisEncoder_Finish(enc, totalSamples, cb)EOS 通知・最終パケット生成
VorbisEncoder_FreeBuffer(buf)バッファ解放
VorbisEncoder_Destroy(enc)エンコーダ破棄
Vorbis_WriteOggFileFromPacketsW(...)パケット列から Ogg ファイル書き出し

mruvorbis_sample の実行方法

mruvorbis_sample.cpp は LoadLibrary を使った動的ロードのサンプルソースです。コマンドライン引数でファイルを指定する仕様のため、バッチファイル経由の起動が最も手軽です。

ビルド方法

Visual Studio 2022 でソリューションを開いてビルドします。

sample\project\VC2022\mruvorbis_sample.sln
ℹ️
ビルド後、mruvorbis.dll はポストビルドイベントにより出力先(x64\Release\ 等)へ自動コピーされます。
コマンドラインでビルドする場合は Developer Command Prompt を開き、sample\project\VC2022\ フォルダで以下を実行します。

cl ..\..\src\mruvorbis_sample.cpp /std:c++20 /W3 /EHsc /Fe:mruvorbis_sample.exe
その後、bin\mruvorbis.dll を実行ファイルと同じフォルダにコピーしてください。

実行方法 (1) — コマンドプロンプトから直接実行

bin\ フォルダ内で実行します。

REM BGM のみ再生 mruvorbis_sample.exe bgm.ogg REM BGM + SE(S キーで SE を再生) mruvorbis_sample.exe bgm.ogg se.ogg

実行方法 (2) — バッチファイルを使用(推奨)

run_sample.bat
@echo off cd /d "%~dp0" mruvorbis_sample.exe bgm.ogg se.ogg pause

実行方法 (3) — ドラッグ&ドロップ起動バッチ

音声ファイルをバッチアイコンにドラッグ&ドロップするだけで再生できます。

drop_play.bat
@echo off cd /d "%~dp0" if "%~1"=="" ( echo ファイルをこのバッチにドラッグ&ドロップしてください。 pause exit /b 1 ) mruvorbis_sample.exe "%~1" "%~2" pause

操作キー一覧

Space 一時停止 / 再開 ← Left 5 秒 巻き戻し → Right 5 秒 早送り ↑ Up 音量 +10% ↓ Down 音量 -10% M ミュート切り替え L ループ切り替え I フェードイン(2 秒) O フェードアウト(2 秒) P パン切り替え(左 → 中央 → 右) S SE 再生(引数 2 が指定されている場合) Q / ESC 終了

最小実装例(C++ / LoadLibrary)

// mruvorbis.dll を動的ロードして bgm.ogg を再生する最小限のコード #include <windows.h> typedef void* VORBIS_HANDLE; int wmain() { HMODULE hDll = LoadLibraryW(L"mruvorbis.dll"); auto Init = (BOOL (__cdecl*)()) GetProcAddress(hDll, "Vorbis_InternalInit"); auto Fin = (void (__cdecl*)()) GetProcAddress(hDll, "Vorbis_FinalizeAll"); auto Create = (VORBIS_HANDLE (__cdecl*)()) GetProcAddress(hDll, "VorbisPlayer_Create"); auto Destroy = (void (__cdecl*)(VORBIS_HANDLE)) GetProcAddress(hDll, "VorbisPlayer_Destroy"); auto Load = (BOOL (__cdecl*)(VORBIS_HANDLE, const wchar_t*)) GetProcAddress(hDll, "VorbisPlayer_LoadFile"); auto Play = (BOOL (__cdecl*)(VORBIS_HANDLE)) GetProcAddress(hDll, "VorbisPlayer_Play"); auto Stop = (void (__cdecl*)(VORBIS_HANDLE)) GetProcAddress(hDll, "VorbisPlayer_Stop"); Init(); VORBIS_HANDLE h = Create(); Load(h, L"bgm.ogg"); Play(h); Sleep(5000); // 5 秒再生 Stop(h); Destroy(h); Fin(); FreeLibrary(hDll); return 0; }

トラブルシューティング

LoadLibrary が失敗する
mruvorbis.dll が EXE と同じフォルダにあるか確認してください。EXE と DLL のビット数(x86 / x64)が一致しているか、Visual C++ 再頒布可能パッケージがインストール済みかどうかもご確認ください。
VorbisPlayer_Play が FALSE を返す
Vorbis_InternalInit() を呼んでいるか確認してください。Vorbis_GetLastError() でエラー内容を確認し、ファイルが有効な Ogg Vorbis 形式かどうかをご確認ください。
音が出ない
出力デバイスが存在しミュートされていないか確認してください。他のアプリが WASAPI 排他モードでデバイスを占有していないか、VorbisPlayer_GetVolume() で音量が 0 になっていないかも確認してください。
EXE 終了時にクラッシュする
FreeLibrary() の前に必ず Vorbis_FinalizeAll() を呼んでください。内部スレッドが join されずにプロセスが終了するとクラッシュします。