v1.0.0.0 使い方ガイド

mruopus.dll

ALC Software Laboratory  |  User Guide & API Reference

クイックスタート

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

API 早見表

初期化 / 終了
Opus_InternalInit()DLL 初期化(起動直後に 1 度呼ぶ)
Opus_FinalizeAll()DLL 終了処理(FreeLibrary 前に呼ぶ)
Opus_GetVersionString()バージョン文字列取得(wchar_t*)— __stdcall
Opus_GetBuildInfo()ビルド情報取得(SIMD レベル等)— __stdcall
Opus_GetLastError()最後のエラーメッセージ取得(char*)
再生 (OpusPlayer) — 基本操作
OpusPlayer_Create()プレイヤーハンドル作成
OpusPlayer_Destroy(h)プレイヤー破棄
OpusPlayer_LoadFile(h, path)ファイルロード(wchar_t* パス)
OpusPlayer_LoadFromMemory(h, data, sz)メモリバッファからロード
OpusPlayer_Play(h)再生開始
OpusPlayer_Stop(h)再生停止
OpusPlayer_Pause(h, BOOL)一時停止 / 再開
OpusPlayer_SeekMs(h, ms)ミリ秒シーク
OpusPlayer_IsPlaying(h)再生中判定
OpusPlayer_IsPaused(h)一時停止中判定
再生 (OpusPlayer) — 音量 / パン / フェード
OpusPlayer_SetVolume(h, vol)音量設定(0.0〜1.0)
OpusPlayer_GetVolume(h)音量取得
OpusPlayer_SetMute(h, BOOL)ミュート設定
OpusPlayer_IsMuted(h)ミュート状態取得
OpusPlayer_SetPan(h, pan)パン設定(-1.0=左 / 0.0=中央 / 1.0=右)
OpusPlayer_GetPan(h)パン取得
OpusPlayer_StartFadeIn(h, ms)フェードイン開始
OpusPlayer_StartFadeOut(h, ms)フェードアウト開始
再生 (OpusPlayer) — ループ / 再生速度 / キューポイント
OpusPlayer_SetLoop(h, BOOL)ループ設定
OpusPlayer_SetLoopRangeMs(h, start, end)ループ区間設定(ms)
OpusPlayer_SetLoopRangeSamples(h, s, e)ループ区間設定(samples / 48kHz 基準)
OpusPlayer_EnableSeamlessLoop(h, BOOL)シームレスループ有効化
OpusPlayer_SetRepeatSegment(h, msA, msB)A-B リピート設定(ms)
OpusPlayer_ClearRepeatSegment(h)A-B リピート解除
OpusPlayer_SetPlaybackRate(h, rate)再生速度設定(Simple モード・軽量)
OpusPlayer_SetPlaybackRateHQ(h, rate, mode)高品質速度変更:0=Simple / 1=WSOLA / 2=PhaseVocoder
OpusPlayer_GetPlaybackRate(h)現在の再生速度取得
OpusPlayer_AddCuePoint(h, ms, id)キューポイント追加
OpusPlayer_ClearCuePoints(h)キューポイント全削除
OpusPlayer_SetCallbacks(h, onStarted, onStopped, onEndOfStream, onCuePoint, user)イベントコールバック設定
再生 (OpusPlayer) — 情報取得 / OpusTags
OpusPlayer_GetPositionMs(h)現在位置取得(ms)
OpusPlayer_GetTotalMs(h)総時間取得(ms)
OpusPlayer_GetTotalSamples(h)総サンプル数取得
OpusPlayer_GetSampleRate(h)サンプルレート取得(常に 48000)
OpusPlayer_GetChannels(h)チャンネル数取得
OpusPlayer_GetBitrate(h)ビットレート取得
OpusPlayer_GetTitle(h)TITLE タグ取得(wchar_t*)
OpusPlayer_GetArtist(h)ARTIST タグ取得(wchar_t*)
OpusPlayer_GetAlbum(h)ALBUM タグ取得(wchar_t*)
OpusPlayer_GetCommentCount(h)コメント総数取得
OpusPlayer_GetComment(h, i)i 番目コメント取得(wchar_t*)
クロスフェード (OpusCrossfade)
OpusCrossfade_Create()クロスフェードマネージャー作成
OpusCrossfade_Destroy(h)マネージャー破棄
OpusCrossfade_Play(h, path, loop)再生開始
OpusCrossfade_CrossfadeTo(h, path, ms, loop)クロスフェード切り替え(ms でフェード時間指定)
OpusCrossfade_Stop(h, fadeMs)停止(フェードアウト付き)
OpusCrossfade_Pause(h, BOOL)一時停止 / 再開
OpusCrossfade_SetVolume(h, vol)マスター音量設定
OpusCrossfade_IsPlaying(h)再生中判定
OpusCrossfade_IsCrossfading(h)クロスフェード中判定
効果音プール (OpusSePool)
OpusSePool_Init(voices)プール初期化(最大ボイス数指定)
OpusSePool_Finalize()プール破棄
OpusSePool_Play(path, vol)SE 再生(ボイスハンドル返却)
OpusSePool_Stop(handle)指定 SE 停止
OpusSePool_StopAll()全 SE 停止
OpusSePool_SetVolume(h, vol)ボイス音量設定
OpusSePool_GetVolume(h)ボイス音量取得
OpusSePool_GetActiveCount()再生中ボイス数取得
エンコード (OpusEncoder)
OpusEncoder_Create(ch, sr, br, app, frame)エンコーダ作成
OpusEncoder_GetHeaders(enc, ...)OpusHead + OpusTags ヘッダパケット取得
OpusEncoder_EncodeFrame(enc, pcm, ...)フレームエンコード(float PCM → Opus パケット)
OpusEncoder_Finish(enc, totalSamples)EOS 通知・最終パケット生成
OpusEncoder_FreeBuffer(buf)バッファ解放
OpusEncoder_Destroy(enc)エンコーダ破棄
Opus_WriteOggFileFromPacketsW(...)パケット列から Ogg ファイル書き出し

mruopus_sample の実行方法

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

ビルド方法

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

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

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

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

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

REM BGM のみ再生 mruopus_sample.exe bgm.opus REM BGM + SE(S キーで SE を再生) mruopus_sample.exe bgm.opus se.opus REM BGM + SE + クロスフェード先(X キーで切り替え) mruopus_sample.exe bgm.opus se.opus next.opus

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

以下の内容で run_sample.bat を作成して EXE と同じフォルダに置き、ダブルクリックで起動します。

run_sample.bat
@echo off cd /d "%~dp0" mruopus_sample.exe bgm.opus se.opus next.opus pause

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

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

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

操作キー一覧

Space 一時停止 / 再開 ← Left 5 秒 巻き戻し → Right 5 秒 早送り ↑ Up 音量 +10% ↓ Down 音量 -10% M ミュート切り替え L ループ切り替え I フェードイン(2 秒) O フェードアウト(2 秒) P パン切り替え(左 → 中央 → 右) F 再生速度切り替え(1.0x / 1.25x / 1.5x / 0.75x、WSOLA モード) A A-B リピート 設定 / 解除(現在位置から 10 秒間) C キューポイント追加(現在位置 +3 秒) T OpusTags 表示(Title / Artist / Album) D デバッグ情報表示(DumpState / SIMD レベル) S SE 再生(引数 2 が指定されている場合) X クロスフェード切り替え(引数 3 が指定されている場合) Q / ESC 終了

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

// mruopus.dll を動的ロードして bgm.opus を再生する最小限のコード #include <windows.h> typedef void* OPUS_HANDLE; int wmain() { HMODULE hDll = LoadLibraryW(L"mruopus.dll"); auto Init = (BOOL (__cdecl*)()) GetProcAddress(hDll, "Opus_InternalInit"); auto Fin = (void (__cdecl*)()) GetProcAddress(hDll, "Opus_FinalizeAll"); auto Create = (OPUS_HANDLE (__cdecl*)()) GetProcAddress(hDll, "OpusPlayer_Create"); auto Destroy = (void (__cdecl*)(OPUS_HANDLE)) GetProcAddress(hDll, "OpusPlayer_Destroy"); auto Load = (BOOL (__cdecl*)(OPUS_HANDLE, const wchar_t*)) GetProcAddress(hDll, "OpusPlayer_LoadFile"); auto Play = (BOOL (__cdecl*)(OPUS_HANDLE)) GetProcAddress(hDll, "OpusPlayer_Play"); auto Stop = (void (__cdecl*)(OPUS_HANDLE)) GetProcAddress(hDll, "OpusPlayer_Stop"); Init(); OPUS_HANDLE h = Create(); Load(h, L"bgm.opus"); Play(h); Sleep(5000); // 5 秒再生 Stop(h); Destroy(h); Fin(); FreeLibrary(hDll); return 0; }

トラブルシューティング

LoadLibrary が失敗する
mruopus.dll が EXE と同じフォルダにあるか確認してください。EXE と DLL のビット数(x86 / x64)が一致しているか、Visual C++ 再頒布可能パッケージがインストール済みかどうかもご確認ください。
OpusPlayer_Play が FALSE を返す
Opus_InternalInit() を呼んでいるか確認してください。Opus_GetLastError() でエラー内容を確認し、ファイルが有効な Ogg Opus 形式かどうかをご確認ください。
音が出ない
出力デバイスが存在しミュートされていないか確認してください。他のアプリが WASAPI 排他モードでデバイスを占有していないか、OpusPlayer_GetVolume() で音量が 0 になっていないかも確認してください。
再生速度変更で音質が低い
SetPlaybackRateHQ() で mode=1 (WSOLA) を指定するとピッチを保ちつつより自然な速度変更が可能です。mode=0 (Simple) は線形補間のみのため音質が低下します。
EXE 終了時にクラッシュする
FreeLibrary() の前に必ず Opus_FinalizeAll() を呼んでください。内部スレッドが join されずにプロセスが終了するとクラッシュします。