shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

Simutransのセーブデータ (非圧縮xml のみ) を読み込み->書き出し ~ 特定領域のレベル下げ

[趣旨]
Simutransのセーブデータ弄り 〜 をします。
Simutransのセーブデータ (非圧縮xml のみ) をパースしてエディットして、また書き出しです。

今回は、特定領域のレベルを特定レベルまで下げます。
ついでに、平坦化しちゃいます。
シンプルに地平だけを下げます。橋や道路などの分断をケアすべきですが、今回は何もやれてません。

↓ Simutransのセーブデータ (非圧縮xml のみ) をドラッグアンドドロップすると、「ダウンロード」と書かれたリンクが追加されます。"output.sve"としてダウンロードできるはず。開発環境は、macchrome

topleft : x y
bottomright : x y
target : z
Drop files here

                                                                                                                              

 

こんな感じで、碁盤病が捗ります。


どうにも処理が重いのが難点です...。

[参考文献]

クライアントサイドJavaScriptでXML文書のDOMをパースする

XML Parser

Blob - Web API インターフェイス | MDN

HTML非表示・使用不可メモ(Hishidama's disabled/visibility/display Memo)

A-Frame + Web Audio API で ランダムに箱がでるプレイヤー/ミキサーのテスト

xRしたい! VTuberしたい! ということで、A-Frame

VTuberするのにアバターの必要性を感じなくなってきたので、A-Frame であれこれやってみています。
今回はとりあえず Web_Audio_API と繋いでみました。
File0とFile1に音楽データがセットできて、両方にセットすればミキサー。(以前に作ったものをコピペ)。片方にセットすれば...プレイヤー。
ランダムに箱が出たり回転したりするのは、File0のみ。なんとなく。
スペクトログラムに引いた線があることから、その線のところ (1 kHz と 4 kHzあたり) の音量が、スペクトログラムの真ん中より上になるような値であれば、3Dがぐるぐる。
[proc] ボタンで手動でも発火させられます。

なんとも無意味ですが、動けばとりあえず楽しい。

div a-frame

 

 

File0
File1

 mixing result :                                                   

 mixing source0 :                                                   
 mixing source1 :                                                   

 

Analyser

SmoothingTimeConstant :
MinDecibels :
MaxDecibels :

 

mixed
audio0
audio1

 

 

この記事に際して、新たに行き着いた Web Audio API に関する記事2つ。
Audioを停止(終了)させるには pause() → currentTime = 0;
「MediaDevices.getUserMedia() 」について;

やはり WebAPI だけあって、メンテしたほうがよさそう。
過去の記事に遡って修正するとか、一つずつの記事に全部書かずにモジュール化を模索するとか、やるべきことがたくさん。

とりあえず、(以前に作ったものをコピペ)から、今回の記事で気づいて直したのが2点。
Macchromeで navigator.getUserMedia() が消えてエラーが出てて動かなかったのを応急手当て。 ・[stop]を押しても音楽データの再生自体は止まっていなかったのを修正。
コピペ元の記事からこの記事までの間の記事も更新しておく ... 。うーむ。

JZZ.js で 特定 ch を削除

MIDIファイルをいじるWebコンテンツ on はてなブログ 〜 の検討
今回は、jazz-softさん作の、 JZZ.jsで特定チャンネルの情報を削除してみました.

チェックボックスを off にした ch の情報を削除して出力します。

 

Drop files here

                                                                                     

 

JZZ.js さんは Helpers としてノートonとかチャンネルとかを解釈する関数があるらしい。
しかし今回はMIDIメッセージ1つ分のオブジェクト JZZ.MIDI の数字から自前で解釈。
いや、getChannel() 関数を使った方がいい気がする。

地味に削除するチャンネルを指定するチェックボックスの方が面倒だった気がする。
デフォルトをonにするためにsetAttribute("checked", "checked")するとか、地味にトリッキー。

<参考文献>

https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/checkbox

【HTML】出来るだけ押しやすいチェックボックスを作る|リスティング広告の運用代行ならカルテットコミュニケーションズ

 

A-Frame でランダムに箱を配置してみるテスト

xRしたい! VTuberしたい! ということで、A-Frame

VTuberするのにアバターの必要性を感じなくなってきたので、A-Frame での基本形状の追加/削除をやってみました。

div a-frame

 

camera の向いている方向に box を置きます。同じ方向を向いたままで連打すると、壁ができていきます。
camera の向いている方向の取得で今回やっている方法が腑に落ちない。
camera の要素でなく、camera.parent から取得しています。
さらに、取得した回転行列(rotationオブジェクト)を box の回転行列に適用するにあたって radian から degree に変換しています 。
なんだそれ。

腑に落ちないながらも、単に箱や球を配置することはとりあえず簡単。

Simutrans の Pakset づくりへの準備

Simutrans(http://japanese.simutrans.com)は, 素晴らしい.
Pakset というので景観や機能、シナリオ?まで置き換えられます.

Pakセット - Simutrans日本語化・解説

Simutrans - Paksets

そんな Pakset を自作すべく、準備。

<makeobj の仕様確認>

Simutrans Tikiwiki | en_doPak

Sizes form PAK16 up to PAK255 are supported. However, 
only the sizes PAK32, 64, 96, 128 are tested and in current use.

ほほぅ ... PAK16 まで出せるのは意外。
PAK255 までということは、Pak256 ではmakeobjの改造が為されているということ?FrontPage - Simutrans Ex Pak256 official website

 

<libpng>
libpngのインストールとC言語での使用方法・使用例 | だえうホームページ

アドインの画像のサイズを ImageMagick でやろうとしたものの、問題が色々。
ImageMagick - Convert, Edit, or Compose Bitmap Images

「さようなら ImageMagick」の考察 - Qiita

libpngを用いてリサイズアプリを自作することに。

 

Simutrans の Pakset の最小構成

Simutrans(http://japanese.simutrans.com)は, 素晴らしい.
Pakset というので景観や機能、シナリオ?まで置き換えられます.

Pakセット - Simutrans日本語化・解説

Simutrans - Paksets


有志がアドオンを乱開発なされているので、新作の告知だけ眺めていても楽しいです.

今回は、そんな拡大する Pakset の最小構成を調べてみました.
ちなみに、 Pakセット - Simutrans日本語化・解説 <- こちら曰く、"ground.Outside.pak" があるかが大事らしい.
調べた対象は pak64 , pak64.japan . 
Simutransのバージョンは 120.4.1 Nightly 2019年3月辺りベースの自作改造品.

色々削ったところ、これらがないとpakset読み込み中に足りないってエラーが出ました.

building.01_CITY.pak
cursor.Builder.pak
cursor.GeneralTools.pak
cursor.Marked.pak
good.None.pak
good.Passagiere.pak
good.Post.pak
ground.Basement.pak
ground.Borders.pak
ground.ClimateTexture.pak
ground.Fence.pak
ground.LightTexture.pak
ground.Marker.pak
ground.Outside.pak
ground.ShoreTrans.pak
ground.Slopes.pak
ground.SlopeTrans.pak
ground.Water.pak
menu.BarTools.pak
menu.DialogeTools.pak
menu.GeneralTools.pak
menu.SimpleTools.pak
misc.Construction.pak
misc.Sidewalk.pak
symbol.ColorOptions.pak
symbol.Electricity.pak
symbol.Flags.pak
symbol.InTown.pak
symbol.Logo.pak
symbol.Message.pak
symbol.MessageOptions.pak
symbol.NewWorld.pak
symbol.NewYear.pak
symbol.Passagiere.pak
symbol.Post.pak
symbol.Seasons.pak
symbol.Waren.pak
way.dirt_road.pak

全てがズバリこれらじゃないといけないわけでもないようです.
道路や役場は、それらが1つはないとダメらしい. 

A-Frame を埋め込んでみるテスト

xRしたい! VTuberしたい! ということで、A-Frame 。

まず、A-Frame を埋め込んでみるテスト。A-Frame も今 (2019/05) や0.9.0。ほう? 

div a-frame

 

 A-Frameのページにあるイントロダクションのサンプルを埋め込んでみた。簡単。

いいえ、A-Frameのサンプルコードをそのまま貼り付けても、微妙。
はてなブログのメニューやらタイトルやらを超えて、全面表示。
そこで div に埋め込むことに。A-Frame にも embedded なる指定が必要。 簡単。
How to embed an aframe scene into a div - Stack Overflow

WebAudioAPIあたりと繋いでみるつもり。