BAD_ACCESS

おもにiOS、ときどき変な電子工作、ガジェット話。

#3 C4で音楽を(割りと自由に)取り回すーC4でAudio Playerをつくる(1)

この記事は「一人アドベントカレンダー2013〜Lonely Advent Calender 2013〜」の2日目の記事です。

前回はC4Timerを使ったサンプルを紹介し、どれだけシンプルにつくることができるかが少しお分かりいただけたのではないかと思います。

今回から4回に渡りC4がメディアの扱いに非常に長けているということを説明するために簡単なAudio Playerを何種類か作ってみようと思います。

Audio関連を扱うC4Sampleクラス

C4でAudio関連を扱うには、C4Sampleクラスを使います。 手っ取り早く音を鳴らすためにはとにかくこのクラスということになります。

C4Sample.hの中身を見てみると、

#import "C4Object.h"
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
//
@interface C4Sample : C4Object <AVAudioPlayerDelegate>

となっており、AVAudioPlayerをラップしたようなクラスになっているようです。

今回、C4Sampleができることを簡単に体験してもらえるようにSampleプロジェクトを用意しました。

といっても、C4WorkSpace.mを置き換えるだけです。

まず、setupメソッドにて音の再生を開始します。 音源はC4テンプレートからプロジェクトを新規作成すると勝手に含まれている"C4Loop.aif"を使います。

-(void)setup {
    sample = [C4Sample sampleNamed:@"C4Loop.aif"];
    sample.loops = YES;
    [sample play];
   

mediaのファイル名を指定してC4Sampleオブジェクトをつくってplayメソッドを呼ぶだけ。ちゃんと再生されたでしょうか?

rate(再生速度) pan(左右に振る) volume(音量) で遊ぶ

つづいて、再生しているC4Sampleオブジェクトをいじってみましょう。

いじるためのUIの設定をします。 ここでは詳細な説明は省きますが、C4Sliderをつかってrate(再生速度) pan(左右に振る) volume(音量) の値を自由に変えられるようにUIを作っていきます。

-(void)setupUI {
    //UI(rate)
    rateSlider = [C4Slider slider:CGRectMake(0, 0, 300, 44)];
    rateSlider.center = CGPointMake(self.canvas.width/2, self.canvas.height/4);
    rateSlider.value = sample.rate - 0.5;
    [self.canvas addSubview:rateSlider];

sliderに対応するメソッドchangeRate:を設定します。

//つづき
  [rateSlider   runMethod:@"changeRate:"   target:self forEvent:VALUECHANGED];
}

sliderの変更に応じて、C4Sampleのプロパティであるrateを変化させます。

-(void)changeRate:(C4Slider *)aSlider {
    sample.rate = aSlider.value + 0.5;
}

簡単ですが、主に実装する中身は以上です。 UIまわりでごちゃごちゃと書いていますがsliderの値で今再生している音源を直接操作するというサンプルができました。

今回は以上です。明日は音源のシークとUIの更新を行いたいと思います。

#2 C4でつくるプロジェクトの構造とC4Timer

この記事は「一人アドベントカレンダー2013〜Lonely Advent Calender 2013〜」の2日目の記事です。

まず、C4とはなんぞという方はこちらの記事にて概要を説明しております。はじめてのC4!|BAD_ACCESS C4はとにかくシンプルです。まだまだ可能性を秘めているこのフレームワークで自分のイメージしているアプリをストレスなく作ることができるでしょう。

興味を持たれた方は、この記事などを参考にしてプロジェクトのテンプレートC4 Single View Applicationが選択できる状態まで進めてください。

 2013-11-20 1.07.44.png

C4のプロジェクトの構造

C4 Single View Applicationを選んでプロジェクトを新規作成すると、 自動的にC4WorkSpace.hC4WorkSpace.mが作成されています。

C4WorkSpace.hの中身を見ると、

#import "C4CanvasController.h"

@interface C4WorkSpace : C4CanvasController
@end

となっており、C4WorkSpace.hC4CanvasControllerを親クラスとするクラスあることがわかります。

では、C4CanvasController.hを見てみると、

@interface C4CanvasController : UIViewController 
<AVAudioSessionDelegate, C4Gesture, C4Notification, C4MethodDelay,  C4AddSubview> 
{

}

このようになっており、いくつかのプロトコルが採用されていることがわかります。

またインスタンスメソッドとして、

-(void)setup;

が定義されています。setupについては以下のように説明されています。

/** The setup method for the canvas.

This method is called at the end of the application's launch cycle.

You should code everything you want your application to do, prior to loading, in this method. */

このメソッドでは、アプリケーションがロードする前に何をしたいのか、すべてを書く必要があります。ということですので、さっそくこのsetupメソッドから書いていきます。

どこから手をつけたらいいのか

では実際にsetupメソッドでは何をするべきなのでしょうか。新規作成したばかりのC4WorkSpaceに色々と書き加えていきましょう。

とはいえ、まず最初は公式の例をうまく取り入れるための方法から。 examples|C4からC4Timerstart & stopの例を開いてみてください。

examples

C4Timer Start & Stopのsetup

ではサンプルのStart & Stopの中身をみていきます。 このVimeoのデモ動画を見て、どれぐらいのコードを書くことになるかを想像できるでしょうか。

Starting and Stopping a C4Timer from [C4] on Vimeo.

まずアニメーションになっているのでNSTimerを使うことにはなりそうです。単位時間ごとに円のスケールを変化させて、それより前にWindow上に、円を書いておかなければならないですね。

しかし、実際に必要なコードはC4WorkSpace.mに書かれたこれだけです。

C4TimerはたしかにNSTimerのラップクラスです。しかしながら、このStart & Stopの例に示すようにNSTimerよりも非常にシンプルに扱うことができます。

メディアやアニメーションを扱う上で、C4Timerにはかなりお世話になる可能性が高いです。ということで1回目はC4自体とC4Timerがいかにシンプルであるかを説明しました。

Start & Stopだけでなく、C4Timerでできることは他のexampleとドキュメントを見るだけですぐイメージできるでしょう(それぐらいシンプルです)

次回は、C4プロジェクトの中に音楽を取り込んで色々遊んでみようと思います!

#1 一人アドベントカレンダー2013〜Lonely Advent Calender 2013〜

なんとも寂しい響きのタイトルですが、12月1日〜12月24日まで一人でアドベントカレンダーをやろうと思います。 トピックはまだ未定の部分もありますが、メインは以前もブログにて紹介したC4C4:http://www.c4ios.com/を使ったアプリについて書いていく予定です。

day topic
12/1(Sun) #1一人アドベントカレンダー2013〜Lonely Advent Calender 2013〜
12/2(Mon) #2 C4でつくるプロジェクトの構造とC4Timer
12/3(Tue) #3 C4で音楽を(割りと自由に)取り回すーC4でAudio Playerをつくる(1)
12/4(Wed) #4 C4で音楽にあわせてオブジェクトを変化させるーC4でAudio Playerをつくる(2)
12/5(Thu) #5 C4で音楽の再生・停止をコントロールするーC4でAudio Playerをつくる(3)
12/6(Fri) #6 複数の音源から再生したい音源を選ぶーC4でAudio Playerをつくる(4)
12/7(Sat) #【番外編】tech.kayac.com Advent Calendar 2013に投稿しました
12/8(Sun) #7 複数の音源から再生したい音源を選ぶ(その2)ーC4でAudio Playerをつくる(5)
12/9(Mon) #8 複数の音源から再生したい音源を選ぶ(補足)ーC4でAudio Playerをつくる(6)
12/10(Tue) #9 とにかく簡単にカメラで撮影してみるーC4でエフェクト付きカメラをつくる(1)
12/11(Wed) #10 使えるエフェクトはまだ限られているーC4でエフェクト付きカメラをつくる(2)
12/12(Thu) #11 撮影した画像をカメラロールに保存するーC4でエフェクト付きカメラをつくる(3)
12/13(Fri) #12 パスデータをモーフィングしてみたーC4のパスであそぶ(1)
12/14(Sat) #13 文字をパス化してモーフィングしてみたーC4のパスであそぶ(2)
12/15(Sun) 【番外編】iOS Second Stage Advent Calendar 2013に投稿しました。
12/16(Mon) #14 パスで波をつくるーC4のパスであそぶ(3)
12/17(Tue) #15 パスで弦の動きをシミュレートするーC4のパスであそぶ(4)
12/18(Wed)
12/19(Thu)
12/20(Fri)
12/21(Sat)
12/22(Sun)
12/23(Mon)
12/24(Tue)

初日はこのカレンダーのためだけに作りました! (こちらは随時更新していきます。)

【ブラック】Black Fridayでググった結果wwwwwww【フライデー】

釣りっぽいタイトルですみません。 今日(昨日)はBlack Fridayということで、Black Fridayってなんでしょうね。

アメリカ合衆国で、感謝祭(11月の第4木曜日)翌日の金曜日のこと。 クリスマス・セールが始まり、小売店が大きく黒字になることからこう呼ばれる。 ブラック・フライデー

Blackは黒字のBlackだったんですね。何か不穏なイメージを抱いておりましたすみません。

で、肝心のBlack Fridayお得情報なのですがかなりのものです。 紹介する内容が偏ってますねー

iPhoneiPadアプリ編

Black Fridayでいくつかの有料(高額)アプリがSaleとなっております!

Traktor DJ iPad(2000円ー>1000円)50%off

iMini(1000円ー>500円)50%off

Animoog iPad(3000円ー>500円)83%off

Calendars 5 iPad(700円ー>300円)50%off

PDF Expert(1000円ー>500円)50%off

Printer Pro(700円ー>200円)66%off

Mac App Store

Mac App Storeでもかなり高額のアプリがいくつかSaleに!

DaisyDisk(1000円ー>500円)50%off

SketchBook Pro(4000円)これいつもセールやってるから定価わかんないな。

TaskPaper(3000円ー>1000円)66%off

Corel Painter Lite(7000円ー>1000円)80%off

Freeway Pro AS(9000円ー>5000円))

その他

VMware store

VMware fusion6 (6800円ー>4419円)35%off

Ableton

ソフトウェアが全品20%オフ

以上です。 もしかすると高くて買おうか迷っていたアプリがBlack Fridayで半額になっていることもあり得るので是非チェックしてみてください!

Push通知を実装したはずなのにリリースされたアプリでPushが来ない!?ってなったとき

Push通知を実装したはずなのにリリースされたアプリで通知がこない!! Adhoc版でテストしたときはうまくいったのに…という場合、一度確認しとくべきところ。

こんなエラーメッセージがくる

Missing Push Notification Entitlement - Your app appears to include API used to register with the Apple Push Notification service, but the app signature's entitlements do not include the "aps-environment" entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the "aps-environment" entitlement. See "Provisioning and Development" in the Local and Push Notification Programming Guide for more information. If your app does not use the Apple Push Notification service, no action is required. You may remove the API from future submissions to stop this warning. If you use a third-party framework, you may need to contact the developer for information on removing the API.

アプリにはプッシュ通知用のAPIが実装されているけど、Distributionにプッシュ通知の設定がされてませんよー

iTunes ConnectのBinary Details

uploadが完了した後に、バイナリの詳細を見ることができる。アップロードしたバイナリが正しければ下図のようにEntitlementsaps-environmentの値が入っている。 これが入ってない場合、アプリ申請用のDistributionを作ったときに何かミスをしている可能性がある。

Binary Details

Provisioning Profileの中をみてみる。

バイナリの詳細のEntitlementsaps-environmentの値が入ってなかった場合、Provisioning Profileの情報をみてみよう。

Provisioning Profileの設定が正しければ以下のようにEntitlementsaps-environmentというキーが含まれているはず。

        <key>Entitlements</key>
        <dict>
                <key>application-identifier</key>
                <string>A8PPLL6C5N.com.kayac.kakusenkun</string>
                <key>aps-environment</key>
                <string>production</string>
                <key>get-task-allow</key>
                <false/>

Distributionを作り直す。

こういった問題が起こるのは申請用のDistributionを作成するタイミングが原因であることが考えられる。特に、Distributionを作成するよりも先にPush通知の証明書関係の登録を終わらせていないという可能性などが考えられる。

こういう場合は、申請用のDistributionを再作成してみることをおすすめします。

また再申請時に、上記2つの確認も併せて行うことで、プッシュ通知まわりのトラブルのいくつかを回避できるのではないでしょうか。

【積んどかない】師走に向けて読む【本】

師走に向けて本を積んでおいたままにしないようにここに記す!

なるほどUnixプロセス ― Rubyで学ぶUnixの基礎

UNIX、さすがに分かっていなさすぎなのつらいのでよみはじめた。 けんじさんの記事に影響されて買ったんだけど、面白い!

〜無料でできる3Dアニメーション〜 ブレンダーからはじめよう!

Unixプロセスもそうだけど、自分の手動かしながら進められるるのよい。 あと電子版で買うと画面上だけで本とアプリケーション行ったり来たりできて、だいぶストレス無い感じになってきた。 これから技術書買うときは電子版買うの全然アリだと思う。

Fab ―パーソナルコンピュータからパーソナルファブリケーションへ (Make: Japan Books)

FabLife ―デジタルファブリケーションから生まれる「つくりかたの未来」 (Make: Japan Books)

おくさんがFab関連のお仕事するようになるそうなのでついでにちゃんと勉強してみる。 しかし高い本だな。

【熟成中】わかる!電子工作の基本100

いろいろ見比べて、一番ちゃんと入門できそうなものを選んでみた。

【熟成中】iOS Core Data 徹底入門

先週注文して、今朝このスライド見て、あー 読まないと…ってなっている。

【今更】IFTTTでfacebookでシェアした投稿をtumblrにまとめる。

11月のはじめにIFTTTを使ってなんかやろうと決めていたのですが気づけば師走がもうそこまで来てしまっていたので慌てふためいております。

今回、IFTTTを使ってやろうとしていることはこちら。

  • facebookでシェアした投稿をちゃんと後から振り返られるようにまとめておく。

IFTTTでいうところのトリガーがfacebookでリンクをポストすること、アクションがtumblrに投稿することという感じです。

実際、やってみると、ログを取るのも憚られるぐらい簡単だったので、これからどんどんレシピを追加していきたい気になる! TwitterBotも簡単なのはIFTTTで作れてしまう。

では7ステップのスクショログです。

レシピをつくる。

なにはともあれ、レシピを新規作成しましょう。

トリガーをきめる。

きっかけとなるアクション(トリガー)を決めます。 thisの部分をタップしてトリガーとなるサービスを選びましょう。

サービスを選ぶ。

かなりの数のサービスから選ぶことができます。 ここではfacebookを選びます。

トリガーを選ぶ。

"facebookにリンクをポスト"をえらびます。

トリガーを作成。

"Create Trigger"でトリガー部分はひとまずOK。

アクションをきめる。

次はトリガーをうけてのアクションを作っていきます。

サービスを選ぶ。

ここでは"tumblr"を選びます。  2013-11-26 23.32.37.png  2013-11-26 23.32.55.png

tumblrのサービスをアクティブにする。

自分のtumblrアカウントと投稿するtumblrブログを選びます。  2013-11-26 23.33.57.png

アクションをえらぶ。

ここではリンクをポストするアクションを選びます。

投稿するときのタイトルなど適当につけます。

レシピを確認する。

完成!

あまりにも手軽すぎて本当にできているか不安になので、試しにfacebookにリンクをポストしてみたところ…

キタ~

こんな感じでIFTTTレシピを充実させていこ