音楽とかソフトとか

WindowsのActiveTclはフリーソフト開発でよくお世話になっているプログラミング言語ですが、日本語処理でつまづくことがこれまでに何度もありました。その度に原因を調べ、対応策を考え、そしてすっかり忘れて(←オイ)しまいます。

先日setParam内のりぶあんを実行しようとしたところ、日本語フォルダでは失敗することに気づきました。そこで今回はエラーの状況をメモしておこうと思います。

setParam用に改造したりぶあんへは、処理対象のフォルダ名をコマンドライン引数で渡しています。「りぶあん wavフォルダ名 出力oto.ini名」といった具合です。コマンドライン引数のフォルダ文字列に日本語が混じっているとき、tclファイルで実行した場合は正しく処理されるのに、sdx.batを使って作ったexeファイルではエラーが出るようです。

ということで、作製したエラー検証用プログラムは以下のとおりです。

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

if {$argc != 1} {
puts "usage: $argv0 dirname"
exit
}

set dir [lindex $argv 0]
puts "$dir"
cd "$dir"
puts [pwd]



これで、> ./argv.tcl 日本語フォルダ と実行すると正しくcdされました。ところがこれをsdx.batでexe化して同じく実行すると以下のエラーが出ました。
exe化したTcl/Tkプログラムの引数に日本語フォルダを与えたときのエラー


フォルダ名が文字化けしています。しかし上記ソースのcdをコメントアウトしてexe化して実行すると、puts "$dir"の結果が標準出力に出ますが、こちらは文字化けしませんでした。


次は日本語フォルダをtclファイルに埋め込み、それをsourceして取り込む場合です。これはうまくいきました。

検証用プログラムは以下のとおりです。

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

if {$argc != 1} {
puts "usage: $argv0 tclfile"
exit
}

source [lindex $argv 0] ;# 引数で指定したtclを読む(中でset dirしてある)
puts "$dir"
cd "$dir"
puts [pwd]

label .l -textvar dir
pack .l


もう一つsourceOpt.tclという以下の内容のファイルを用意します。

set dir "./日本語"


これで > ./source.tcl sourceOpt.tcl は成功、> ./source.exe sourceOpt.tclも成功しました。
exe化したTcl/Tkの日本語フォルダ周りのテスト結果

ご覧のとおり、先の例と逆に標準出力で文字化け、Tcl/Tk GUI上では正しく日本語表示しています。これはこれで万事解決とはいかないようです。更に調査するとしたら、sdx周りのバージョンが気になるところですが、ひとまず現状の自分の環境で先に進むとしたら、このやり方を採用するしかないかなあと思っています。


<追記>

ついでにファイル読み込みでもいけるか試してみました。
検証用プログラムは以下のとおりです。

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

if {$argc != 1} {
puts "usage: $argv0 fname"
exit
}

set in [open [lindex $argv 0] r]
set dir [gets $in]
close $in

puts "$dir"
cd "$dir"
puts [pwd]

label .l -textvar dir
pack .l


「./日本語」と書いたopen.txtを用意し、「open.tcl open.txt」といった具合に実行したところ、sourceのときと同様の結果が得られました。

スポンサーサイト

PageTop
OREMO ver.2.0-b110624を公開しました→ダウンロード

<主な変更点>
- (修正) オーディオI/O設定窓でエラーが出る問題を修正した
- (追加) オーディオI/O設定窓下部に警告文を追記した
- (追加) ustファイルから発声リストを作成できるようにした
- (追加) ESCキーで各種設定窓を閉じるようにした
- (追加) 音叉窓最下部にショートカットキー一覧を表示した
- (削除) setParam用のサブルーチンを削除した

<とりとめもなく補足など>
OREMOを更新するのは約一年ぶりです。Windows7でオーディオI/O設定窓を開くとエラーが出るという連絡をいただきましたのでバグ修正しました。

またsetParamで実装していた、ustファイルから発声リストを作る機能をOREMOにも移植してみました。

ESCキーで窓消去はUTAUで知ったのですが、Windowsでは小窓をESCで消せるソフトが多いのですね。便利なのでOREMOにも取り込みました。


ESCとオーディオI/O窓はsetParamにも適用させたいと思いますので、後ほどsetParamも更新する予定です。setParamといえば巽さんが音源製作のwikiを立ち上げてらっしゃいました。

 UTAU音源制作wiki

今のところsetParamの基本的な操作方法がまとめられていますが、収録などもまとめていけるようですので、ぜひ。

PageTop