2011年1月31日月曜日

周波数解析と楽器の特定

全曲バイブルの作業中、ヘフナーとリッケンバッカーの特徴を示すために周波数解析を行った。すると、ヘフナーは1オクターブ上の音程であるかのようなグラフを示していた。ここで自身でも初めてセミアコとソリッドボディーの特徴を理論的に理解することができた(もちろん楽器メーカーであれば当然の如く所有している情報だろう)。
音は複数の倍音で構成されるが、セミアコのボディは低い音を維持するのが難しいらしく、基音は直ぐに減衰し第2倍音以上の音が音色の中心となる。これがヘフナーが軽い音に聴こえる主因である。

同様に、カジノはストラトやレスポールに比べて軽い響きになっている。
このことから、Day Tripper/Taxman/Paperback Writerのリードギターはセミアコ系の楽器であると推測できる(残念ながらサウンド解説には反映していないが)。Day TripperはグレッチかES-345、TaxmanとPaperback Writerはポールによるカジノの演奏だろう。

なお、I Feel Fineの項で示した通り、音の歪みは高次倍音の増加で生じる現象である。歪んだ音の高域をイコライザーでカットしてみれば元の楽器のニュアンスが聴こえて来るはずである。

2011年1月25日火曜日

能力主義と言う人に限って能力の逆転現象を生み出す

部下がニュートンとアインシュタインだった場合、
正しく評価できる人がいるだろうか。
確実なのはどちらも自分より遥かに優れているということ。
でも自分と立場を入れ替えようとする上司はいない。
一度逆転現象が起こった組織は中々立ち直れない。

仕事は効率化するほど評価は下がる

効率的に仕事をすると次のように評価される。
・他の人より簡単な仕事だったらしい
・Webでも見て情報収集しようとしても『怠けている』
・定時に帰ろうものなら『協調性が無い』

遅れやトラブルを解決してこそ評価されるのであり、
トラブルを未然に回避しながら予定通り進めても
自己満足しか得られない。

2011年1月23日日曜日

証明書の期限切れ

証明書の期限が切れたとき、更新はオーガナイザで簡単にできるようになったけど、
そのままビルドしても以下のエラーがでる。
[BEROR]CodeSign error: Certificate identity 'iPhone Developer: (my name)
(SFQA882WV4)' appears more than once in the keychain. The codesign
tool requires there only be one.
この時は、アプリケーション/ユーティリティ/キーチェーンアクセスを起動して、
古い証明書を削除すれば直る。

2011年1月10日月曜日

iPodライブラリの選択画面をナビゲーションさせる方法

以下のコードで可能。
   MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];
   picker.delegate      = self;
   picker.allowsPickingMultipleItems = NO;
   picker.prompt      = NSLocalizedString (@"Select song", @"");
   [[self navigationController] pushViewController:picker animated:YES];
   [picker release];
選択の処理には以下のデリゲート関数を定義する。
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection;
- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker;

※残念ながらiOS7では使えなくなったようです。

PopoverControllerでナビゲーションする方法

以下を定義しておく。
UIPopoverController *myPopoverController;

// MyTableView をPopoverControllerで表示するコード
// このときにUINavigationControllerを使う!
 if( isIPad() ) {
  if (!myPopoverController) {  
   MyTableView *controller = [[MyTableView alloc] initWithNibName: @"MyTableView" bundle: nil];
   controller.delegate = self;  
   UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
   [controller release];
   myPopoverController = [[UIPopoverController alloc]initWithContentViewController:navigationController];  
   myPopoverController.delegate = self;  
   [navigationController release];
  }  
  if(!myPopoverController.popoverVisible) { // visible でない場合  
   [myPopoverController presentPopoverFromBarButtonItem:navigationBar.topItem.leftBarButtonItem  
            permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];  
  }  
 } else {
  MyTableView *controller = [[MyTableView alloc] initWithNibName: @"MyTableView" bundle: nil];
  controller.delegate = self;
  controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
  [controller release];
  [self presentModalViewController:navigationController animated: YES];
  [navigationController release];
 }
後はMyTableView側で以下の制御をするだけ。
<ナビゲーション>
 [[self navigationController] pushViewController:NewController animated:YES];
<復帰>
 [[self navigationController] popViewControllerAnimated:YES];