DXライブラリーのVer.3.22aからmp3ファイルを
非同期読み込みかつx64(64bit)でビルドしてLog.txtの中身を確認すると大量に「MP3変換用 NullRender の作成に失敗しました」のログが出力されています。
DXライブラリー Ver.3.22a(2020/8/23)のバージョンでビルドしたmp3は正常に再生できます。
しかしDXライブラリーの最新バージョン Ver.3.22c(2021/1/31)のバージョンではmp3ファイルの音声が正常に再生されない。(音が小さい、はっきり音が鳴らない)。
Win32(32bit)ビルドとwavファイルとoggファイルの音声は全く問題ありません。
最新テスト版(Ver 3.22d)も正常に再生されませんでした。
Log.txt(一部)
1096: 画像の単純転送処理の初期化... 成功
1107: 深度バッファを作成します.... 成功
1118: フォントの初期化を行います
1124: フォントの初期化は正常に終了しました
1211: 文字コードバッファの初期化を行います... 完了しました
1229:DXライブラリの初期化処理終了
1249:MP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたMP3変換用 NullRender の作成に失敗しましたフォントの初期化を行います
3401:フォントの初期化は正常に終了しました
3418:d3d11.dll の解放 1
3423:dxgi.dll の解放 1
3428:Direct3D11 のオブジェクト数を出力
3432:Direct3D11 のオブジェクト合計数 : 0
3439:DirectInput 関連の終了処理... 完了
3444:サウンド関連の終了処理... 完了
3466:ウィンドウ関連の終了処理... ウインドウを閉じようとしています
3478:ウインドウが破棄されようとしています
3484:ソフトを終了する準備が整いました
3540:完了
3548:COMを終了... 完了
3553:
3557:Alloc memory dump
3561: Total size:0(0.000kb) Alloc num:0
3565:
[PC構成]
CPU:Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
GPU:NVIDIA GeForce GTX 1060 6GB
RAM:16GB
OS:Windows 10 Home 20H2
IDE:Visual Studio 2019
再現しやすくするためにソースコードを書いておきます。
#include "DxLib.h"
const int KeyBufNum = 256;
char KeyBuf[KeyBufNum];
char KeyBufFlag[KeyBufNum];
void KeyBufProcess()
{
// キー押下処理
for (int i = 0; i < KeyBufNum; i++)
{
KeyBufFlag[i] = KeyBuf[i];
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// ウィンドウモード
ChangeWindowMode(TRUE);
// DXライブラリー初期化
if (DxLib_Init() == -1)
{
return -1;
}
// 裏画面化
SetDrawScreen(DX_SCREEN_BACK);
// サウンドハンドル
const int SoundHandleNum = 32;
int SoundHandle[SoundHandleNum];
// 非同期読み込み(オフ[FALSE]にした場合問題ない)
SetUseASyncLoadFlag(TRUE);
// サウンドの読み込み
for (int i = 0; i < SoundHandleNum; i++)
{
SoundHandle[i] = LoadSoundMem("test.ogg");
}
// 非同期読み込み解除
SetUseASyncLoadFlag(FALSE);
// サウンドID
int SoundID = 0;
while (ProcessMessage() == 0 && KeyBuf[KEY_INPUT_ESCAPE] == 0)
{
ClearDrawScreen();
GetHitKeyStateAll(KeyBuf);
// カーソルキー左右でサウンドID変更
if (KeyBuf[KEY_INPUT_LEFT] == 1 && KeyBufFlag[KEY_INPUT_LEFT] == 0)
{
SoundID--;
if (SoundID < 0)
{
SoundID = 0;
}
}
if (KeyBuf[KEY_INPUT_RIGHT] == 1 && KeyBufFlag[KEY_INPUT_RIGHT] == 0)
{
SoundID++;
if (SoundID >= SoundHandleNum - 1)
{
SoundID = SoundHandleNum - 1;
}
}
// Zキーでサウンド再生
if (CheckHandleASyncLoad(SoundHandle[SoundID]) == FALSE)
{
if (KeyBuf[KEY_INPUT_Z] == 1 && KeyBufFlag[KEY_INPUT_Z] == 0)
{
PlaySoundMem(SoundHandle[SoundID], DX_PLAYTYPE_BACK);
}
}
// 情報描画
if (CheckHandleASyncLoad(SoundHandle[SoundID]) == FALSE)
{
DrawFormatString(0, 0, GetColor(255, 255, 255), "サウンドID:[%04x]", SoundID);
DrawFormatString(0, 16, GetColor(255, 255, 255), "サウンドハンドル:[%08x]", SoundHandle[SoundID]);
DrawString(0, 48, "カーソルキー左右でサウンドID変更", GetColor(255, 255, 255));
DrawString(0, 64, "Zキーでサウンド再生", GetColor(255, 255, 255));
}
// キー押下処理
KeyBufProcess();
ScreenFlip();
}
// サウンドハンドルを削除
for (int i = 0; i < SoundHandleNum; i++)
{
DeleteSoundMem(SoundHandle[i]);
}
// DXライブラリーの終了
DxLib_End();
return 0;
}
◆追記
短い音声mp3(1秒未満)だと音が小さく再生される
長い音声(2秒以上)のmp3だと最初の音が途切れる(音声の0.0000秒から1.0000秒の間スキップされる模様)
サウンドIDが0000〜000aの場合(音が小さく再生されることが多い)
サウンドIDが0010以降の場合正常に再生される。