トップページ > 記事閲覧
sprintfDxで生成した文字列をLoadSoundMemが読み込まない
名前:アイス 日時: 2020/04/21 22:03

slnファイルのある場所から該当する音声ファイルがあるディレクトリまでのパスを格納した dirPath と、 音声ファイル名を格納した wavePath (それぞれchar[260]) を下記のソースのように sprintfDx で1つのパスを作ったのですが、 これを実行すると waveHandle には -1 が格納されてしまいます。 ソース---------------- sprintfDx(path_wave, "%s\\%s", ssfInfo.dirPath, ssf.wavePath); waveHandle = LoadSoundMem(path_wave); ---------------------- パスが間違っているかと思い、printfDxで path_wave を表示して確認した後,その文字列をそのまま LoadSoundMem("〜〜"); という風に書いて起動すると音声の再生に成功したため,ファイルパスの見た目が間違っているわけではないようです " " でくくった文字列と sprintfDx で生成した文字列には何か違いがあるのでしょうか?
メンテ

Page: 1 |

Re: sprintfDxで生成した文字列をLoadSoundMemが読み込まない ( No.1 )
名前:管理人 日時:2020/04/22 00:12

手元で以下のようなプログラムを組んで試してみましたが、正常にサウンドは再生されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoundHandle ; char wavePath[ 260 ] ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // パスの作成 sprintfDx( wavePath, "%s\\%s", "D:\\Sound\\", "Test.wav" ) ; // サウンドの読み込み SoundHandle = LoadSoundMem( wavePath ) ; // サウンドの再生 PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } ( ↑こちらの例では Dドライブの Soundフォルダの中に Test.wav を置いてある状態です ) アイスさんの環境では上記のようなシンプルなプログラムでもサウンドの読み込みに失敗してしまうのでしょうか?
メンテ
Re: sprintfDxで生成した文字列をLoadSoundMemが読み込まない ( No.2 )
名前:アイス 日時:2020/04/22 00:50

回答ありがとうございます。 試してみたところ、ハンドルの取得に成功し、再生できました また、"D:\\Sound\\", "Test.wav" のそれぞれを char[260] 型に格納し、 sprintfDx(path_wave, "%s\\%s", char1, char2); のようにした場合もハンドルが取得できました この場合は ssfInfo.dirPath と ssf.wavePath に何か問題があるのでしょうか… ちなみに、ハンドルを取得できなかった文字列は "SSS_File\\sampleGenre\\sample\\sample.ogg" というもので、 slnファイルがある場所をカレントディレクトリとしての音声ファイルの位置を表していたつもりです 追記:simulator(slnファイルがあるディレクトリ)\SSS_File\sampleGenre\sample\sample.ogg という構造になっています
メンテ
Re: sprintfDxで生成した文字列をLoadSoundMemが読み込まない ( No.3 )
名前:アイス(解決) 日時:2020/04/22 01:48

さまざまなデバッグを試みた結果,ssf.wavePathに改行文字が余計に含まれており,それを取り除くことで解決いたしました。 正常に再生されることの検証,ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存