カテゴリー別アーカイブ: 全般 – Mac

テンポラリファイル名を取得する

テンポラリのディレクトリの中のテンポラリのファイル名を取得するサンプル。 NSTemporaryDirectory()でテンポラリフォルダを取得。mkstempsでテンポラリファイル名が取得できるが、一旦書き込み可能な文字列の配列にコピーしないといけない。NSStringのlengthでは日本語とか含まれている場合、取得した長さが配列の長さと違うので、strlenで配列の長さを取得してコピーする。 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { &n... read more

NSInvocationの作成

NSInvocationOperationとか使っていて、NSInvocationの作り方が良くわからなかったので、自分で作る方法を調べてみました。以下のコードがNSInvocationを使ってtest:というメソッドを呼び出してみたものです。 #import <Cocoa/Cocoa.h> @interface InvocationTest : NSObject {     } @end @implementation InvocationTest - (void)awakeFromNib {     SEL sele... read more

動き続けるCALayer

CoreAnimationでCALayerを動かし続けたい時の方法です。プロパティ変更での暗黙的なアニメーションだといろいろと不都合なので、CABasicAnimationを使ってやってみました。 以下がそのサンプルです。カスタムビューにアウトレットをつなげて実行してください。 // //  EndlessCoreAnimationTest.h // #import <Cocoa/Cocoa.h> #import <QuartzCore/QuartzCore.h> @interface E... read more

再生スライダー

iPodとかQuickTimePlayerのような、再生する位置を表示・変更できるようなスライダーを使いたいと思って、NSSliderにジャカジャカ位置を送っていたら、うまいことクリックして変更できなくて、あれこれ調べたらNSSliderからNSSliderCellを取得してmouseDownFlagsってのをチェックすれば良い事が分かりました。 そこらへんを検証してみたコードが以下のような感じです。タイマーはNSEventTrackingRunLoopModeでスライダーを変更中も関係なく動かしていますが、マウスで操作中のときは値を送らないようにしています。 #import <Coc... read more

dBとリニア値を変換する

0.0 = -inf dB、1.0 = 0dBとした場合。 リニア値からdBへ変換するには、 dBVolume = 20.0*log10(linearVolume); dBからリニア値へ変換するには、 linearVolume = pow(10.0, dBVolume/20.0); で、できる ちなみにvDSPにはvDSP_vdbconという関数があり、リニア値からdBへの変換はできる。 void  vDSP_vdbcon (    float * A,    vDSP_Stride I,    ... read more