Blog


MVVMCross,Xamarin.iOSのBindingするプロパティの指定方法

MVVM CrossのStarter kitをインストールしたときやたいていの解説サイト、サンプルコードではXamarin.iOSのバインドコードはこのように記述されています。

%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a3

コードを普通に読んでみるとLabelとVMのHelloプロパティをバインドさせてることはわかるのですがLabelはUIコントロールなので何かしらのプロパティとバインドさせなければいけません。

この場合バインドしたいものはおそらくTextプロパティなのですが、じゃあどこで指定するのかとなったときに???となってしばらく悩んでました。

すると優しき先人の方(@ticktackmobile)曰く、デフォルトでバインドするプロパティがあるとのこと。そしてLabelのデフォルトバインドプロパティはTextだからバインドできているらしい。

 

なるほどという感じで公式サイトを見てみるとちっちゃく記述されてました。

ここで気になってくるのはText以外のプロパティを指定したいときですが、そちらについてもご回答いただけました。圧倒的感謝!!

ということで以下のコードのLabelとTextFieldはどちらもTextプロパティをバインドしているとのこと。プロパティを自分で指定したいときはForを使いましょう。

やっぱりまだXamarinは日本語の文献が少ないからか、経験値が作業スピードに大きく影響してるきがします。

これからXamarinする人はXamarin詳しい人をフォローしよう!




XamarinのSDKがアップデートできないとき

Xamarinのアップデートが降ってきたとき、タスクバーにアップデートあると通知アイコンがでるのですがそれをクリックしても何もおこらない状態に陥りました。

解決方法としてはVisualStudioのツール>オプション>Xamarin>Other

の中にあるCheck Nowというリンクをクリックするとアップデートをすることができます。

1

iOSをビルドするときはMacの上の環境とバージョンを合わせなければなので大変ですね




JuliusでALSAまわりのエラーがでた

こういうエラーがでたときは

これを入れる。

 

多分64bitOSの関係だと思う




javaFXでLocation is not set.がでたら

javaFXではUI記述としてfxmlで記述されたファイルをリソースとして読み込みますが

リソースなのでパスを指定しなければいけません。リソースのパスを間違えると以下のようなエラーがでます。

と言ってもリソースのoutputパスやリソースをどう出力するかはプロジェクトの設定に大きく依存します。

そこで下記のようなプログラムを実行するとパスがわかります。{Mainクラスの名前}は適切なものに置き換えてください

こうして出力されたパスはMainクラスが出力された場所になります。

その出力パス上にfxmlファイルが適切に出力されているか、パスは大丈夫そうかを確認すると解決します。

ちなみに上記で出力されたパスからのfxmlファイルを相対パスで記述するとfxmlファイルを読み込むことができます。




WAVファイルを扱うときに出てくるFrameSizeとは何か

WAVファイルを扱っているときにたびたび、Frameという概念が出現します。

通常、Frameとは音響解析時に、解析の最小単位を表し、Frameをwindowsサイズシフトを繰り返しながら分析していきます。

しかしそれは解析時の話であって、解析も何もしていないWAVファイルに出現するFrameとはなにか、調べてみました。

実際に2チャンネル16bit PCMのWAVファイルをjavaで読み込んで、AudioFormatをデバッグ表示してみたのが以下の図になります。

screenshot-from-2016-10-10-20-50-00

FrameSizeは「4」と出ています。

FrameSizeの算出式は以下のようになっています。

SampleSizeInBitsとは何ビットずつサンプリングしていくか、つまり16bitPCMの場合16という数字が入ります。

Channelはチャンネル数を表します。今回は2チャンネル録音なので2が入ります。

 

2チャンネル 16bit PCMの場合、16bitで表現した1サンプルのデータが時間軸(横向き)に並んでいきます。

FrameSizeというのはこの縦幅がどれぐらいのサイズあるかということをバイト単位で表したものとなります。

今回は16bitPCMなので2byte×2チャンネルなので4byteとなります。

img_20161010_205826-min

なぜFrameSizeという概念が必要になるかというと、WAVファイルのデータを実際にbyte単位で読み込んで行く時、チャンネル関係なくすべて横並びにデータが並んでいきます。

この中で「何byteで1サンプルなのか」という情報(どこでデータを区切るべきか)がFrameSizeとなります。

今回の場合だと、4byteずつ区切っていけば2チャンネルの1サンプルを取ることができるというわけです。

img_20161010_205830-min