現在、dxlibを用いて、音響用ソフト(少し説明すると、文化祭で劇をやるのですが、その音響に使用するソフトです。)を製作中です。
それが、完成間近!ってところまできて、思いもよらないことが起きてしまいました。
「音響ソフトなのに楽曲が読み込めない!」
色々実験していくうちに、サウンドハンドルの値が変な値を示しているのに気が付きました。その値が、決まって、-842150451なんです。
(-1ならエラーだと割り切れるのに・・・)
まず、なぜこんな数字が(どこから)出てきたのかがわからないです。
そして、どうやったらしっかり読み込めるようになるのかが一番の懸念です。
文化祭が明後日からなので、とても焦っていて混乱しています。どなたか、お力を貸していただけないでしょうか。
以下、該当部分のコードと説明になります。
int LOAD::LoadSound(int* sound_h){
string filepath = ".\\sounds\\";
string* fullpath;
bool issamename = false;
HANDLE hFind;
WIN32_FIND_DATA fd;
//-----Get handles-----//
fullpath = new string[dates_counter];
/*Make fullpath*/
for (int i = 0; i < dates_counter; i++) {
fullpath[i] = filepath + name_r[i];
}
for (int i = 0; i < dates_counter; i++) {
/*前に重複するファイル名はあるか調べる*/
for (int j = i - 1; j >= 0; j--) {
if (fullpath[i] == fullpath[j]) {
sound_h[i] = sound_h[j];
issamename = true;
break;
}
}
/*重複していなければ新たにハンドルを確保*/
if (!issamename) {
sound_h[i] = LoadSoundMem(fullpath[i].c_str());
}
/*エラーチェック*/
hFind = FindFirstFile(fullpath[i].c_str(), &fd);
if (sound_h[i] <= -1 || hFind == INVALID_HANDLE_VALUE) {
errornum.push_back(i);
//found an error in loading
loadstatus = -2;
}
FindClose(hFind);
}
/*completed*/
loadstatus = 2;
/*確認用*/
for (int i = 0; i < dates_counter; i++)
{
DrawFormatString(0, i * 20, GetColor(255, 0, 0), "%d", sound_h[i]);
ScreenFlip();
}
WaitKey();
return errornum.size();
}
(説明)
・このコードは、テキストファイルに書かれた曲名(正しく取得済み)からサウンドハンドルを作成することを意図しています。
・string *name_rはテキストファイルから読み込まれた曲名を格納しています。
・issameは曲名に重複がないかを確かめるためです。
・dates_counterは、name_rの要素数に等しい値です。
・loadstatusは、ロードの状況を表します。
・高速性を求めているので、一挙にメモリに展開しています。
ただ、ファイルのサイズも小さいので、メモリが足りないことはないかと(そもそも、足りないなら-1を示すはず・・・)
・コードをここに全部貼ると冗長になると思われたので、必要と感じる部分だけ掲載しました。コード全体やソフト本体等のファイルが必要な場合は、お手数ですが下のリンクからご利用ください。
https://1drv.ms/f/s!Agx035BMTwPAryCvPScmORCwlPIO
(内容物:ソフト本体、全コード、使用楽曲、取説、その他必要なファイル)
・環境はwin10、dxlibです。
繰り返しになりますが、楽曲が読み込めない状態を改善できるよう、どうか助けてください。お願いします。
急いでおりまして、情報が足りなかったり、いきなり不躾な文となっていしまいましたが、ご容赦ください。
また、不足があれば教えていただけると幸いです。
ここからは私事ですが、明日はスマホからしかここにアクセスできないので、返信が遅れがちになるかもしれません。(ただ、パソコン自体は、オフラインですが、使えるので(多分)、ご教授いただければ、それを試すことはできます。)
急いでいると言っておきながら、申し訳ありません。
よろしくお願いします。