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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1113
kokuyou (投稿者削除)5未解決


kokuyou

リンク

2015/11/13(Fri) 23:23:28|NO.72998

この記事は投稿者により削除されました。
2015/11/14(Sat) 22:06:45



この記事に返信する


skyblue

リンク

2015/11/14(Sat) 07:32:29|NO.73004

ソースコードをhsp34で実行しても37行目でパラメータエラーが出たけど
きちんとコメントアウトされていないし、
12行目で、ファイルが見つからないとか出る。
ファイル名が代入されているsに代入されている所が無いためエラーが出ている

さらに任意で<pre>〜</pre>(半角で入力)で囲む事で
インデントと見やすさが変わるので使うようにして下さい。(お願い)



kanamaru

リンク

2015/11/14(Sat) 08:22:42|NO.73005

どういうプログラムかがわからなかったですが、
とりあえず、
・tempo、notenumが0だとエラーが発生するところに終了処理を入れた
・ループ内でwait、awaitが一度もなかったので追加
の2点を修正してみました。
できれば、どういうプログラムなのか説明してくれませんか?

;テキストファイルを読み込む p = dir_cmdline strrep p, "\"", "" notesel s noteload p ;長さ、先行発声、オーバーラップを変える ;ノートセクションを取得 split s,"\n[#SETTING]\n",s1,s2 split s2,"[#",s2,s3 notenum=stat-1 ;ノートセクション毎に長さ、先行発声、オーバーラップを取得 sdim s_header,16,notenum sdim s_length,16,notenum sdim s_preuttr,16,notenum sdim s_overlap,16,notenum repeat notenum split s3(cnt),"\n",s4 s_header(cnt)="\n[#"+s4(0) c=cnt repeat stat if instr(s4(cnt),0,"Length=")==0{ split s4(cnt),"=",s,s_length(c) } await 16 loop await 16 loop length1=s_length(0) ;TEMPOを取得 sdim tempo split s2,"\n",s5 repeat stat if instr(s5(cnt),0,"Tempo=")==0{ split s5(cnt),"=",s6,tempo } await 16 loop ;先行発声を変える ;n番目のノートの先行発声をn*125*length1/TEMPOに補正 if(int(tempo)=0){ dialog "テンポが0になっています。プログラムを終了します。" end } preuttr1=int(125*length1/int(tempo)) repeat notenum i=cnt*preuttr1 s_preuttr(cnt)=str(i) await 16 loop ;オーバーラップを変える ;最初以外のノートのオーバーラップを125*length1*notenum/TEMPOに補正 if(notenum=0){ dialog "セッションがありません。プログラムを終了します。" end } overlap1=int(125*length1*(notenum-1)/tempo) repeat notenum if cnt==0{ s_overlap(cnt)="0" }else{ s_overlap(cnt)=str(overlap1) } await 16 loop ;長さを変える ;すべてのノートの長さをlength1/notenumに補正 length11=int(length1/notenum) repeat notenum s_length(cnt)=str(length11) loop ;元のセクション形式に戻す s="" repeat notenum if s_header(cnt)=="[#PREV]"{ s += "[#PREV]"+"\n" continue } if s_header(cnt)=="[#NEXT]"{ s += "[#NEXT]"+"\n" continue } s += s_header(cnt)+"\n" s += "Length="+s_length(cnt)+"\n" s += "@preuttr="+s_preuttr(cnt)+"\n" s += "@overlap="+s_overlap(cnt)+"\n" await 16 loop ;元のテキストに上書き保存する notesel s notesave p end



kokuyou

リンク

2015/11/14(Sat) 17:13:47|NO.73013

質問者です
このプログラムはUTAUというフリーソフトから渡されたテキストファイルを書き換えるためのプラグインです
使用方法上tempo=0やnotenum=0となることはなく、0除算は起こりません
しかし先述の場所でエラーが起きてしまいます・・・

>kanamaru様
ご回答ありがとうございます
試してみましたがまだエラーが出てしまいます
よろしければもう一度ご回答いただけないでしょうか?

>skyblue様
ご回答ありがとうございます
大変申し訳ありませんが、当方はhspを初めて一週間も経っていないような素人でして・・・
対応策がわからないのでよろしければ対応策を教えていただけませんか?

書き方が見づらい様でしたので改善してもう一度プログラムをあげなおしておきます
何卒よろしくお願いします



kokuyou

リンク

2015/11/14(Sat) 17:14:32|NO.73014

;複数のノートを最初の長さの和音にするUTAUプラグイン
;テキストファイルを読み込む
p = dirinfo(4)
strrep p, "\"", ""
notesel s
noteload p
;長さ、先行発声、オーバーラップを変える
;ノートセクションを取得
split s,"\n[#SETTING]\n",s1,s2
split s2,"[#",s2,s3
notenum=stat-1
;ノートセクション毎に長さ、先行発声、オーバーラップを取得
sdim s_header,16,notenum
sdim s_length,16,notenum
sdim s_preuttr,16,notenum
sdim s_overlap,16,notenum
repeat notenum
split s3(cnt),"\n",s4
s_header(cnt)="\n[#"+s4(0)
c=cnt
repeat stat
if instr(s4(cnt),0,"Length=")==0{
split s4(cnt),"=",s,s_length(c)
}
loop
loop
length1=s_length(0)
;TEMPOを取得
sdim tempo
split s2,"\n",s5
repeat stat
if instr(s5(cnt),0,"Tempo=")==0{
split s5(cnt),"=",s6,tempo
}
loop
;先行発声を変える
;n番目のノートの先行発声をn*125*length1/TEMPOに補正
preuttr1=int(125*length1/tempo)
repeat notenum
i=cnt*preuttr1
s_preuttr(cnt)=str(i)
loop
;オーバーラップを変える
;最初以外のノートのオーバーラップを125*length1*notenum/TEMPOに補正
overlap1=int(125*length1*(notenum-1)/tempo)
repeat notenum
if cnt==0{
s_overlap(cnt)="0"
}else{
s_overlap(cnt)=str(overlap1)
}
loop
;長さを変える
;すべてのノートの長さをlength1/notenumに補正
length11=int(length1/k)
repeat notenum
s_length(cnt)=str(length11)
loop
;元のセクション形式に戻す
s=""
repeat notenum
if s_header(cnt)=="[#PREV]"{
s += "[#PREV]"+"\n"
continue
}
if s_header(cnt)=="[#NEXT]"{
s += "[#NEXT]"+"\n"
continue
}
s += s_header(cnt)+"\n"
s += "Length="+s_length(cnt)+"\n"
s += "@preuttr="+s_preuttr(cnt)+"\n"
s += "@overlap="+s_overlap(cnt)+"\n"
loop

;元のテキストに上書き保存する
notesel s
notesave p
end



kokuyou

リンク

2015/11/14(Sat) 17:16:28|NO.73015


;複数のノートを最初の長さの和音にするUTAUプラグイン ;テキストファイルを読み込む p = dirinfo(4) strrep p, "\"", "" notesel s noteload p ;長さ、先行発声、オーバーラップを変える ;ノートセクションを取得 split s,"\n[#SETTING]\n",s1,s2 split s2,"[#",s2,s3 notenum=stat-1 ;ノートセクション毎に長さ、先行発声、オーバーラップを取得 sdim s_header,16,notenum sdim s_length,16,notenum sdim s_preuttr,16,notenum sdim s_overlap,16,notenum repeat notenum split s3(cnt),"\n",s4 s_header(cnt)="\n[#"+s4(0) c=cnt repeat stat if instr(s4(cnt),0,"Length=")==0{ split s4(cnt),"=",s,s_length(c) } loop loop length1=s_length(0) ;TEMPOを取得 sdim tempo split s2,"\n",s5 repeat stat if instr(s5(cnt),0,"Tempo=")==0{ split s5(cnt),"=",s6,tempo } loop ;先行発声を変える ;n番目のノートの先行発声をn*125*length1/TEMPOに補正 preuttr1=int(125*length1/tempo) repeat notenum i=cnt*preuttr1 s_preuttr(cnt)=str(i) loop ;オーバーラップを変える ;最初以外のノートのオーバーラップを125*length1*notenum/TEMPOに補正 overlap1=int(125*length1*(notenum-1)/tempo) repeat notenum if cnt==0{ s_overlap(cnt)="0" }else{ s_overlap(cnt)=str(overlap1) } loop ;長さを変える ;すべてのノートの長さをlength1/notenumに補正 length11=int(length1/k) repeat notenum s_length(cnt)=str(length11) loop ;元のセクション形式に戻す s="" repeat notenum if s_header(cnt)=="[#PREV]"{ s += "[#PREV]"+"\n" continue } if s_header(cnt)=="[#NEXT]"{ s += "[#NEXT]"+"\n" continue } s += s_header(cnt)+"\n" s += "Length="+s_length(cnt)+"\n" s += "@preuttr="+s_preuttr(cnt)+"\n" s += "@overlap="+s_overlap(cnt)+"\n" loop ;元のテキストに上書き保存する notesel s notesave p end



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