投稿

iPod library access

iPodライブラリアクセスを使う上での注意点のメモです。 使用バージョン:iOS 5あるいはiOS 6 特徴 iPodプレーヤである曲を再生中にその曲を含むコレクションを設定しても曲は途切れることがない。 説明ではMPMusicPlayerControllerはMPMediaPlaybackデリゲートを実装している。このデリゲートの中でprepareToPlayはrequiredとなっているが対応してないようだ。 (追記2014/12)Base SDKがiOS5.0ではprepareToPlayでアラームが発生する。これはそのバージョンのMPMusicPlayerControllerがMPMediaPlaybackデリゲートを実装していないため。それより後のどこかのバージョンで実装されている模様。 使うプレーヤの選択 オーディオを再生できるのは一度に1つのミュージックプレーヤーのみです。ミュー ジックプレーヤーは、アプリケーションのメインスレッドでのみ使用できます。2種類あります。 iPodMusicPlayer-バックグラウンドで再生可(追記2014/12 iOS 8よりsystemMusicPlayerに変更) applicationMusicPlayer-バックグランドで再生不可 listenerの設定 ライブラリ更新 曲が変わった時 曲の再生状態が変わった時 ボリュームが変わった時 大量の曲を更新する時はライブラリ更新のメソッドがかなり頻繁によばれます。 iPod再生中にライブラリから曲を削除すると、現在再生中の曲と次の曲は再生されますが、その次の曲は再生されません。エラーも出ません。 停止状態からある曲を再生させた時に呼ばれる順番は 1アイテムチェンジのメソッド(このとき再生状態はstop) 2再生状態変更のメソッド(このとき再生状態はplay) の順です。 逆に再生状態(または一時停止)から停止させた時は 1再生状態変更のメソッド 2アイテムチェンジのメソッド の順。 再生状態と一時停止の変更では 再生状態変更のメソッド のみです。 デバイスで新規プレイリストを作成したときにもライブラリ更新のコールバックが呼ばれます。 Sessionの設定 セッションの設定がしてあると思います。...

iOS 7について

気になるのはC言語ベースのAudioSessionが非推奨になったこと。 AVAudioSessionを使え、とのこと。 以前、AVAudioSessionの一部分が非推奨になったために、アプリを作る際はAudioSessionのほうに統一した方がいいんじゃないかという内容を書きましたが、こんどはAVAudioSessionの方を推奨するようです。 他に気付いたもの AVSpeechSynthesizer AVSpeechUtterance しゃべらせることが出来る?

LadderTouchのカテゴリ変更

教育から仕事効率化にしました。 だいぶカテゴリー内順位が上がりました。 教育は層が厚いですね。 「幼児向け」「義務教育」「専門」ぐらいに分けたらちょうどよくなるような感じがします。 もしくは「技術」カテゴリーがあればLadderTouchにとってはいいかもしれません。

iOS 7 Design Resources

iOS7のいろいろな資料を読んでのメモ書き。 iOS7はこれまでのバージョンアップより資料が多い気がする。 iOS 7 UI Transition Guide 起動画面 以前からiPhone用の起動画面は画面全体を覆うものだったがiPad版のほうはステータスバーの領域をカットする1004x768のような中途半端なものだった。これがiOS7からはiPad iPhone共にステータスバーの領域をカットしないものになった。画面全体を覆う画像を用意すればいい。 アイコン iOS7で使用するアイコンの大きさは変更になった。 120 x 120 iPhone iPod touch 76 x 76と152 x 152 iPad 120 120の場合、枠のカーブはだいたい34から10へのベジエ曲線。 76 76の場合、枠のカーブはだいたい22から6へのベジエ曲線。 起動画面、アイコン共に、Xcodeでどのファイルをどれとして使用するかを関連付けるようになった。前までは名前の決まりがあったがなくなったかもしれない。 ステータスバーが非表示に出来なくなったようです。

SilentBonusTrackを作成するのに使ったフレームワーク

iPod Library Access [MPMusicPlayerController applicationMusicPlayer]を使うか[MPMusicPlayerController iPodMusicPlayer]を使うか。 音楽を流しながら、他のアプリを実行する使い方も出来るようにしようと思っていました。 バックグラウンドでも動作させたかったので[MPMusicPlayerController iPodMusicPlayer]にしました。[MPMusicPlayerController applicationMusicPlayer]はバックグランドでの動作は出来ません。 「頭The抜き」「頭a抜き」「頭an抜き」は自作で行っています。 AVQueuePlayer アプリがバックグラウンドになった時には主導権を剥奪されるので細かい制御をさせることが出来ない。バックグラウンドでA面の曲、空白、AB切り替え、空白、B面の曲という流れを行おうとすると、iPod Libraryの曲と自分で用意した音(形式は曲、中身は空)を一緒のリストにあらかじめ入れて置かないといけない。これがiPod Library Accessの機能でどうやるのかやりかたが見つからず、それらを同列に扱えるものとして、AVQueuePlayerを使う。 こちらに一つのアプリをほぼまるごと解説しているサイトがある。 http://mtl.recruit.co.jp/blog/2012/07/iphone_dev_jpup.html AudioSession カテゴリはMediaPlayback。そしてmixOthersプロバティを1にする。 再生すべきものは AVAudioPlayer-操作音 AVQuerePlayer-空き時間を含めたファイル iPodからの再生音。 バックグランドになっても再生したかったので、この設定になった。 Core Animation カセットテープの動きを表現するのに使用。 リールの回転と、テープ巻き込み、白テープと黒テープの切り替え。 Core Text カセットケースについているインデックスカードで曲の情報を表示します。 やりたいことは 余ったスペースに再生時間表示。スペースが小さい時は次の行へ。 長い曲名は...

AVQueuePlayer

AVQueuePlayer AVPlayerのサブクラス。 複数のアイテム(曲)を登録しておき一度の指令でそれらを連続再生出来る。 インスタンス生成時、または生成後の初期化時に、AVPlayerItemを含んだNSArrayを渡す。 再生途中に他のアイテムの追加が出来るのがすばらしい。再生が途切れることがない。 seekToTime:という指定した場所に再生場所を移動させるメソッドがある。これはAVPlayerから継承している。このメソッドでの指令の仕方の時間は1曲目の頭からの時間ではなく、その曲の頭からの時間。つまり5曲目再生中にseekToTime:で5秒を指定すると、5曲目の5秒のところに移る。 インスタンス作成 queuePlayerWithItems: 曲追加 insertItem:afterItem: プロパティ currentItem これはAVPlayerから継承。割り込みによる停止中でもnilにはならない。 全部の曲の再生が終わるとnilになる。 AVPlayerItem インスタンス生成時、または生成後の初期化時に、NSURLかAVAssetを渡す。 AVPlayer CMTime time = CMTimeMake(1800, 600); CMTimeGetSeconds(time)

Audio Session細かいことまとめ

SessionActive化のタイミング 電話がかかってきて電話に出た時は、End Interruptionが呼ばれないそうなので、どこでSessionをActiveにするか、検討する必要がある。 割り込みのタイミング アプリをバックグラウンドにしたときに音楽を再生していない場合は割り込みが入る(イニシャライズ時に指定した関数が走る)。再生している時は入らない。「何もしていないなら切りますよ」的なニュアンスで何かの処理が走る模様。割り込み関数が実際に走るのはフォアグラウンドにしたとき。begin分とend分の2回走る。 バックグラウンド機能のON OFFやmixWithOthersのON OFFも関係あります。 AVPlayerの割り込みメソッド呼び出しについて AudioSessionのイニシャライズ時に指定する割り込みメソッドは再生中で無くても呼ばれるが、AVPlayerの割り込みメソッドはplay中でないと呼ばれない。(検証不十分) AVPlayerの自動SessionActive機能について AVPlayerには割り込み完了時にSessionActiveをYESにする機能があるのだが、この機能が少し癖があるので気を付けたい。 まずはいろいろなパターンを調べた。割り込みはiOSに付属しているアラームを使った。ちなみにタイマーだと1つしか登録できないが、アラームだと複数登録できる。 パターン1:初めにアラーム設定し、アプリを起動する アラーム設定する アプリ起動 AVPlayerインスタンス作成 セッション初期化 セッションアクティブ化 アラーム発生 アラーム処理(OKをタップ) 次のアラーム発生で割り込みメソッドが呼ばれない → 自動でアクティブ化されない パターン2:アプリを起動してから一旦バックグラウンドにして、アラーム設定し、再びアプリを起動する アプリ起動 AVPlayerインスタンス作成 セッション初期化 セッションアクティブ化 アラーム設定する アプリ起動 AVPlayerインスタンス作成(viewDidLoadに入れていたので再び処理が走った) セッション初期化(viewDidLoadに入れていたので再び処理が走った) セッションアクティブ化(viewDidLoadに入れ...