HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1024
HSP1年 PCMテキストファイルに書いてあるファイル場所にアクセスして再生10解決


HSP1年 PCM

リンク

2017/10/24(Tue) 21:30:24|NO.81669

テキストファイルに書いてあるファイル場所にアクセスして再生したいのですがどうもエラーは
ないのですが再生ができません。なぜでしょう?解決策をお願いします!
ソース

*ongaku notesel data dialog"mp3",16,"音ファイル" if stat = 1 { notedel mes dir_cur chdir"C:\\Users\\Jon\\Desktop\\1.3\\system" noteadd ""+refstr+"" notesave"music.txt" stop } if stat = 0 { mes"?" } stop *matigai10101 if pass_word = "音楽を再生" :goto *play :else :goto *matigai101011 *play notesel music chdir"C:\\Users\\Jon\\Desktop\\1.3\\system" noteload"music.txt" mmload music,1,2 :mmplay stop
です。これはソースコードの一部です。



この記事に返信する


ソラ

リンク

2017/10/24(Tue) 22:29:47|NO.81670

まずは問題の切り分けが必要です。
不具合の原因は主に2つあります。
1.保存したパスは正しいか
2.そのメディアファイルは再生できるか

1はテキストファイルの中を確認すればわかると思います。
ソースコードを見る限り、特に問題ないかと。
ただし、ファイル読み込みDialogを使うとカレントディレクトリが移動されるため、
noteaddの前のchdirは必要ないと思います。

恐らく原因は2、そもそもそのファイルが再生出来ないのではないでしょうか。
ファイル読み込みDialogで取得したrefstrの値を直接mmloadのp1に指定して、
再生できるか確認してみてください。



はなたれ

リンク

2017/10/24(Tue) 22:37:41|NO.81671

以前の質問でも「通りすがり」さんが指摘している通り
まずは、使用する命令のドキュメントを見ましょう。

mmloadとmmplayのドキュメント見るとすぐ間違いに気づくはずです。
単純な間違いなので、わかると思うよ。

分からないのなら、ファイル名を表示してみる等々
どういうデバッグを試したのか等々の記述も欲しい所です。

関係ないけど。
毎回 chdirでカレントディレクトリ指定するくらいなら、それ込で
music.txtにセーブしておけばよいのでは?



通りすがり

リンク

2017/10/25(Wed) 02:26:32|NO.81672

基本はソラさんやはなたれさんの通りだとして、
余計かもしれませんが、もし25日(本日)に公開すると宣言したソフトに搭載するつもりであれば
それは諦め、時間に縛らぜずゆっくり制作したほうがいいと思います。

NO.81633の投稿(別(前)のスレッドです)ので私が投稿した通り、
「C:\\Users\\Jon\\Desktop\\1.3\\system」
というフォルダがソフトを使用する全てのユーザーにあるとは思えません。
少なくとも自分にはありません。同じく前のスレッドにて

「実行ファイルのあるディレクトリなら「dir_exe」を使えます。」
「hdir命令でカレントディレクトリを元に戻したり」

と教えてくれているこの部分をお勧めします。別の方法でも構いませんが、
現時点でPCMさんが行っている
「絶対パスで書くと」
は絶対にしないべきです。何度も言う通り全ての人に存在するフォルダはありません。
絶対パスは自分で使用する時にはいいですがそれ以外には使わないほうがいいでしょう。

第二に、ソースコードを見る限りミスが非常に多いように思えます。
「notesave"music.txt"」の後にある「stop」のせいで
notesave命令を実行後そこで止まってしまいます。また、同じ理由で

} if stat = 0 { mes"?" } stop
という命令は機能しません。同じコードの一番上、波括弧を使用していないのに「}」がある
等、いろいろとありますし、ミスではないですが
「*matigai101011」にはどういう命令があるのか、
「pass_word」という変数はどこで作られるのか等、
現状で公開されているコードからはわからないこともあり、そこに原因のある場合は
ここでは一生解決できません。一度落ち着いて確認してみてはどうですか?

※別にソラさんの言っている原因が間違いだといいたいわけではないですし、
何かを否定したりしているわけではありませんので悪しからず。
また、個人的に使用するソフトで公開しないのであればディレクトリのパスに関してはスルーしてください。



HSP1年 PCM

リンク

2017/10/26(Thu) 07:53:42|NO.81678


*ongaku //音楽を登録 notesel data dialog"mp3",16,"音ファイル" if stat = 1 { notedel mes dir_cur chdir dir_exe noteadd ""+refstr+"" notesave"music.txt" stop } if stat = 0 { mes"?" } stop *matigai10101 //これはどうでもいい if pass_word = "音楽を再生" :goto *play :else :goto *matigai101011 *play //音楽を再生 notesel music chdir"system" //ここでエラー noteload"music.txt" chdir music mmload music :mmplay 1 stop *matigai101011 //これもどうでもいい
ではファイルが見つかりませんとのこと。
txtの内容はDLフォルダに音楽の場所が書いてあります。なぜファイルが見つからないのでしょうか



MillkeySoftw

リンク

2017/10/26(Thu) 11:10:14|NO.81680

chdir "C:\\Users\\Jon\\Desktop\\1.3\\system"

txt の初期の保存先は、dir_exe なので HSPの実行ファイルの場所だよね?
この実行ファイルはどこに置いてあるの?

もし、"C:\\Users\\Jon\\Desktop\\1.3" に実行ファイルがあり、そこから起動していなきゃバグが発生するのは当然だよ。

初期カレントフォルダは、事前に指定して起動しない限り、実行ファイルが存在するフォルダが指定されます。
その為、chdir "system" というフォルダを指定した場合、「実行ファイルがあるフォルダ + "\\system"」 という指定になります。
その際に、"system"というフォルダがない場合、HSP はエラーを発生させます。

chdir "system" を行う前に、dir_cur などで、現在のフォルダがどこになっているのか確認しましょう。



HSP1年 PCM

リンク

2017/10/26(Thu) 20:55:43|NO.81682

chdir "C:\\Users\\Jon\\Desktop\\1.3"
と表示されます。おいている場所もdesktopの1.3です。



暇人

リンク

2017/10/26(Thu) 21:46:35|NO.81683

エディタ上での実行と、実行ファイルの実行ではdir_exeの場所は違う

エディタ上で実行した場合は、hsp3.exe(HSPインストールフォルダ)のあるフォルダになる

>C:\\Users\\Jon\\Desktop\\1.3\\system
の1.3フォルダ内に実行ファイルを置いて実行する予定なら
ソースファイルも1.3フォルダに置いて編集した方が良い
これならカレントディレクトリは実行ファイルからでもエディタからでも変わらない
実行したら直ぐに

dir_cur_bak=dir_cur
とでもして保持する
music.txtをセーブ、ロードするときに

chdir dir_cur_bak
でカレントを戻す
カレントが1.3フォルダならファイル名を "system\\music.txt" ってすれば良い
systemまで移動する必要は無い

あと
music.txt内のファイル名が一つとは限らないなら
notegetで抜き出す必要がある

それから
>chdir music
は必要ない(フルパスで記録されてるはずなので)

>mmload music :mmplay 1
はバッファの番号が間違ってる



はなたれ

リンク

2017/10/26(Thu) 22:25:30|NO.81684

記述長くてすみません。

HSPスクリプトエディタの HSP(P)のDebugウィンドウ表示をしてますか?
実行すると、Debug Windowが開くので、変数の内容を確認しましょう。
mes命令で表示するだけでは判別できないものもあるので
ここで変数のメモリダンプなどチェックして内容を確認する等などしていきましょ。
mes命令で表示するのはあくまでも簡易的な確認手法です。

ソース中にあるどの定数がどういう値・文字列なのかなど
極端な話、下記提示したソースくらいは、mesで表示してみるなどの過程は必要かと。

ソースの切り貼りで、必要な物が抜けていたりするものと解釈して
貼り付けソースを、見やすく加筆修正しておきますが
使用する命令のドキュメントはしっかり確認しましょ。


sdim data,1024 // ノートメモリパッド命令に使用 sdim music,1024 // ノートメモリパッド命令に使用 sdim play_mp3name,1024 // これは文字列型のまま // 音楽を登録 *ongaku notesel data dialog"mp3",16,"音ファイル" if stat = 1 { notedel 0 // 指定インデックスを削除 //----------------------------- // 確認の為、定数を表示してみる // カレントディレクトリ mes "dir_cur:"+dir_cur // ランタイム実行ファイルのあるディレクトリ mes "dir_exe:"+dir_exe // 選択されたファイル mes "refstr:"+refstr + "\n" //----------------------------- noteadd refstr,0 // 指定インデックスにmp3ファイル名を追加 notesave"music.txt" // 指定バッファをファイルとして保存 noteunsel // 対象バッファを復帰 } else { mes "指定ファイルが無いかファイル選択キャンセル" noteunsel // 対象バッファを復帰 stop } //----------------------------- // ※デバッグの為ここで強制指定 pass_word = "音楽を再生" //----------------------------- //*matigai10101 //これはどうでもいい if pass_word = "音楽を再生" { goto *play } else { goto *matigai101011 } stop // 音楽を再生 *play notesel music // 対象ファイルとして指定 //----------------------------- // 確認の為、定数を表示してみる // カレントディレクトリ mes "dir_cur:"+dir_cur // ランタイム実行ファイルのあるディレクトリ mes "dir_exe:"+dir_exe // 選択されたファイル mes "refstr:"+refstr //----------------------------- // systemフォルダはHSP1年 PCM独自のフォルダ名なのでコメントアウト //chdir"system" //ここでエラー chdir dir_cur noteload "music.txt" // インデックス0番目の文字列を取得 noteget play_mp3name,0 noteunsel // 対象バッファの復帰 // mmloadで musicをファイル名として指定しない事 // musicにはファイル名の後に改行コードが付加されている // 指定mp3ファイルを読み込み // バッファは0番  再生は通常再生の0番を指定 mmload play_mp3name,0,0 mes "再生ファイル読み込みました" // 読み込んだmp3ファイルを再生 // 再生指定バッファは0番を指定 mes "ファイル再生中" mmplay 0 stop *matigai101011 //これもどうでもいい



パーリーピーポーなPCM

リンク

2017/10/27(Fri) 07:32:45|NO.81689

ありがとうございました!はなたれさん!MillkeySoft、暇人さん!ソラさん!
できました!はなたれさんのヤツに*playの下にchdir dir_exeを追記するとできました!



ソラ

リンク

2017/10/27(Fri) 14:59:47|NO.81690

既に解決していますが少し訂正します。
一番最初にPCMさんが貼ったソースコードで音楽が再生できない直接的な原因は、
はなたれさんが指摘している「musicにはファイル名の後に改行コードが付加されている」でしたね。
「ファイルそのものが再生できない」というのは完全な間違いでした。
「noteaddの前のchdirは必要ない」というのも取り消します。
Dialogでカレントディレクトリが移動するからこそ、必要でした。



ONION software Copyright 1997-2021(c) All rights reserved.