|
|
2015/11/13(Fri) 23:23:28|NO.72998
この記事は投稿者により削除されました。
2015/11/14(Sat) 22:06:45
|
|
2015/11/14(Sat) 07:32:29|NO.73004
ソースコードをhsp34で実行しても37行目でパラメータエラーが出たけど
きちんとコメントアウトされていないし、
12行目で、ファイルが見つからないとか出る。
ファイル名が代入されているsに代入されている所が無いためエラーが出ている
さらに任意で<pre>〜</pre>(半角で入力)で囲む事で
インデントと見やすさが変わるので使うようにして下さい。(お願い)
|
|
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
| |
|
2015/11/14(Sat) 17:13:47|NO.73013
質問者です
このプログラムはUTAUというフリーソフトから渡されたテキストファイルを書き換えるためのプラグインです
使用方法上tempo=0やnotenum=0となることはなく、0除算は起こりません
しかし先述の場所でエラーが起きてしまいます・・・
>kanamaru様
ご回答ありがとうございます
試してみましたがまだエラーが出てしまいます
よろしければもう一度ご回答いただけないでしょうか?
>skyblue様
ご回答ありがとうございます
大変申し訳ありませんが、当方はhspを初めて一週間も経っていないような素人でして・・・
対応策がわからないのでよろしければ対応策を教えていただけませんか?
書き方が見づらい様でしたので改善してもう一度プログラムをあげなおしておきます
何卒よろしくお願いします
|
|
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
| |
|
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
| |
|