#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
が選択できる状態まで進めてください。
C4のプロジェクトの構造
C4 Single View Application
を選んでプロジェクトを新規作成すると、
自動的にC4WorkSpace.h
とC4WorkSpace.m
が作成されています。
C4WorkSpace.h
の中身を見ると、
#import "C4CanvasController.h" @interface C4WorkSpace : C4CanvasController @end
となっており、C4WorkSpace.h
はC4CanvasController
を親クラスとするクラスあることがわかります。
では、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からC4Timer
のstart & stop
の例を開いてみてください。
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日まで一人でアドベントカレンダーをやろうと思います。
トピックはまだ未定の部分もありますが、メインは以前もブログにて紹介したC4
C4: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お得情報なのですがかなりのものです。 紹介する内容が偏ってますねー
iPhone・iPadアプリ編
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が完了した後に、バイナリの詳細を見ることができる。アップロードしたバイナリが正しければ下図のようにEntitlements
にaps-environment
の値が入っている。
これが入ってない場合、アプリ申請用のDistributionを作ったときに何かミスをしている可能性がある。
Provisioning Profileの中をみてみる。
バイナリの詳細のEntitlements
にaps-environment
の値が入ってなかった場合、Provisioning Profileの情報をみてみよう。
Provisioning Profileの設定が正しければ以下のようにEntitlements
にaps-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に投稿することという感じです。
実際、やってみると、ログを取るのも憚られるぐらい簡単だったので、これからどんどんレシピを追加していきたい気になる! TwitterのBotも簡単なのはIFTTTで作れてしまう。
では7ステップのスクショログです。
レシピをつくる。
なにはともあれ、レシピを新規作成しましょう。
トリガーをきめる。
きっかけとなるアクション(トリガー)を決めます。 thisの部分をタップしてトリガーとなるサービスを選びましょう。
サービスを選ぶ。
かなりの数のサービスから選ぶことができます。 ここではfacebookを選びます。
トリガーを選ぶ。
"facebookにリンクをポスト"をえらびます。
トリガーを作成。
"Create Trigger"でトリガー部分はひとまずOK。
アクションをきめる。
次はトリガーをうけてのアクションを作っていきます。
サービスを選ぶ。
ここでは"tumblr"を選びます。
tumblrのサービスをアクティブにする。
自分のtumblrアカウントと投稿するtumblrブログを選びます。
アクションをえらぶ。
ここではリンクをポストするアクションを選びます。
投稿するときのタイトルなど適当につけます。
レシピを確認する。
完成!
あまりにも手軽すぎて本当にできているか不安になので、試しにfacebookにリンクをポストしてみたところ…
キタ~
こんな感じでIFTTTレシピを充実させていこ