2012年12月23日日曜日

全曲バイブル回想録 Michelle

It was 3 years ago today...

そろそろ全曲バイブルについて語っても良い頃かと思う。
久しぶりに眺めてみたが、内容は色あせてないと感じる(文章は説明がクドい箇所もあるけど)。

この企画の話を頂いた時、最初に思ったのは「事実に基づいた記事で構築したい」という点だった。ビートルズマニアなので語りたい内容はたくさんある。しかし、適当な推測記事を読み飽きていた、という読者側の視点も持ち合わせていた。根拠を示した推測であれば読者の支持も得られるのではないか、という判断は正しかったと思う。事実を示して、読む側に独自の分析を楽しんでもらう、というのが狙いだった。

この本の基礎となっているのがマーク・ルイソン氏の『レコーディング・セッション』であることは言うまでもない。画期的な内容だった。聴き慣れたビートルズの曲が音楽のパズルに変わった。大半の曲が4トラックレコーディングだったことも幸いし、曲作りを分析できる状況になった。自分で語りたかったのはこの点だったが、ほとんど記載していない。スペースが足りないというのもあるが、推測の比率が多くなるほど、全体の信頼性が低下すると感じたからである。

ただ、Michelleに関しては触れさせて頂いた。この曲の録音順序がビートルズの転換点だと思う。デビュー当時は2トラック録音ということもあり、歌と演奏を同時に録音していたが、じきに演奏を先に録音して歌を後から録音するという(今では一般的な)方法になった。この演奏を録音する際、ガイドボーカルと呼ぶ仮歌を入れておくこともあったようだが、この曲ではガイドベースなるものが存在している点が画期的なのである。
一番最初に録音するものはベーシックトラックと呼ばれ、通常はドラムス、ベース、リズムギターで構成されるため、ポールはベースを弾くのが常であった。ところがこの曲ではアコースティックギターも重要なポイントであると判断して、ベーシックトラックでギターを弾いたのである。I've Just Seen A Faceでも同じことが行われているが、あちらはジョージが12弦ギターでベースラインを弾くという試みで完結していた。こちらは、ポールが改めてベースを入れ直すことが前提となっている点で画期的と言える。
この曲以降、ベーシックトラックの構成は不確定となり、ジョージやジョンがベースを弾く必然性が生まれたという点で、レコーディングの転換点と言える。

iOSのバッテリー消費を押さえるための必須項目

iOSが自動でやってくれるかどうかは不明だが、以下の考慮は必要。


アプリの使用が終了したら各設定を無効にする
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//    自動オフ機能を無効にしておく(不要かも知れないが、表のアプリに迷惑をかけないよう念のため
[UIApplication sharedApplication].idleTimerDisabled = NO;
//    縦横回転の検知を無効にする
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
}

アプリが起動されたら各設定を元に戻す
- (void)applicationDidBecomeActive:(UIApplication *)application
{
//    自動オフ機能を有効にしておく(iMID2PRNは演奏時には自動オフ機能を無効にするため
[UIApplication sharedApplication].idleTimerDisabled = [Defaultの設定];
//    縦横回転の検知を有効にする
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
}

UIControlEventTouchUpOutsideで座標を取得


ボタンを押してドラッグし、ボタンの外で指を放した時の座標を取得する方法。

多くのアクションハンドラは以下の形式で足りるが
- (IBAction) touchUpOutside:(id)sender;

2番目の引数でイベント情報を受け取る形式を使用する。
- (IBAction) touchUpOutside:(id)sender forEvent:(UIEvent *)event;


eventの中身はこんな感じ
<UITouchesEvent: 0x1cd5a8d0> timestamp: 110165 touches: {(
    <UITouch: 0x1cd611c0>
      phase: Ended
      tap count: 0
      window: <UIWindow: 0x1cd90ca0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <UIWindowLayer: 0x1cd90da0>>
      view: <UIRoundedRectButton: 0x1cdbcf70; frame = (88 46; 44 64); alpha = 0.07; opaque = NO; autoresize = RM+H; tag = 64; layer = <CALayer: 0x1cdbd040>>
      location in window: {274, 458}
      previous location in window: {274, 459}
      location in view: {186, 42}
      previous location in view: {186, 43}
)}


座標の取得手順は、
NSSet *a = [event allTouches];
// (UITouch *touch in [a anyObject]) はストールするが、以下ならOK
CGPoint b = [[[a allObjects] objectAtIndex:0] locationInView:subview];
printf("(x,y)=(%f,%f)",b.x,b.y);

2012年9月17日月曜日

iOS6で変更されたデバイスの回転

http://www.facebook.com/pages/MID2PRN/128787497224101
リリースノートを読むとAutoRotate関連のI/Fが変更されたと書いてあるけど、そもそもデバイスを縦横に変えてみてもレイアウト自体が変化しない。
これは以下の記述変更を行っていないため!

【iOS5.1以前】
[window addSubview:viewController.view];

【iOS6】
window.rootViewController = viewController;