2017年5月開発状況

2017年5月。

新作アプリ作成中です。
Repete Plusのアップデート(version 2.4)を行いました。
サイトをさくらVPSに移行しました。

新作アプリ作成中

筆ブラシの作成問題継続中。
ひきつづき、Metalを学習中。
Appleが提供するサンプルコードMetalGameOfLife
MetalGameOfLife: Data-parallel Programming with the MTLComputeCommandEncoder in Metal
を読んでいます。

ブラシを作成。


狙ったブラシができず、停滞中。

サイトの移行

サイトをさくらVPSに移行しました。
「サーバーってなに?」~初心者でもよくわかる!VPSによるWebサーバー構築講座(1) – さくらのナレッジ
こちらをおおいに参考しました。

Repete Plus

  • ファイル末尾に無音時間を足す処理を作成しました。
    多くの語学教材では、ファイル末尾にはかなり長い無音時間があります。
    そこで、語学学習支援プレイヤー(Repeteの前名)作成時から、ファイル末尾の無音部分はカットしてしまう処理をしていました。
    しかし、待ち時間なしで使った際には、ファイル最後の区間ではまったく間がなくなってしまいます。
    この問題に対処するために、ファイル末尾に無音時間を足す処理を作成しました。

  • タップジェスチャーで、「現在区間の再生・再生不要の切り替え」する機能を作成開始しました。
    • 現在区間の再生・再生不要の切り替え」する機能を実装しました。
    • タップしたさいに、行われた操作を示す画像を一瞬表示する機能を実装しました。「再生」「早送り」「区間を再生不要へ」などを示す画像を表示します。

区間の再生/再生不要の切り替えするさいには、
オーディオエディターを開く -> 該当箇所を探し拡大する -> チェックボックスをタップ
という過程を経ていました。
単語集などを順次再生していって、習得した区間はさっと再生不要としたいときなど、手間だなぁと感じていました。
テキストエリアのタップによって、「現在区間の再生・再生不要の切り替え」できることで、すばやく操作ができます。

2017年4月開発状況

2017年4月。
Repete Plusのアップデート作成中。また、新作アプリを作成中…

Repete Plus

• テキスト編集中に、キーボード上端に再生関連ボタンを表示する機能
• アイテム未選択時に、リピート回数を変更すると強制終了する不具合を修正
• グーグルドライブでの、ファイルが表示されない!というひどい不具合を修正
• あと、Googleドライブとの認証を済ませていない時に、テキストを読み込もうとしてもなにも反応しない問題を修正
• テキストのフォントサイズの変更が、即時に反映されていなかった問題を修正

また、以前から、XcodeからArchiveをアップロードするさい、ものすごく時間がかかったすえに失敗するという事態が何度もありました。
今回は、さっぱりArchiveをアップロードできませんでした。
ので、
Xcodeからアップロードできないときは、Application Loaderを使おう – Qiita
を参考に、
Xcode > File > Open Developer Tool
から、Application Loaderを起動。
Application Loaderを用いてアップロードしました。

新作アプリ作成中

  • Twitterへテキスト、画像を投稿するテスト。

  • TWitterへGIFを投稿するテスト。

「SLComposeViewController」クラスを使えば、ほんの少しのコードを追加するだけで SNS へ投稿する機能を提供できますが、以下の場合は「SLComposeViewController」クラスを使えません。
カスタムの投稿画面を使いたい
ユーザーの代わりに投稿したい
上記の場合は、以下のような方法で投稿機能を実装する必要があります。
• Social Framework の SLRequest クラスを使う
• Fabric の Twitter Kit を使う
• Twitter の REST API にアクセスするクラスを自作して使う

とありました。
Twitter REST APIの使い方
は、REST APIにアクセスする方法です。
XCode Tutorials for Beginners: How To: Using SLRequest to Upload Image or Video To Twitter

  • 筆風のブラシ作成。途上。

当初作成したブラシが激重なので、Metalを学習し始めました。
Ray WenderlichのTutorialをやりました。
Metal Tutorial with Swift 3 Part 1: Getting Started
Part 1からPart 5まであり、3DCGでオブジェクトを画面上に描画するまでの座標変換、
テクスチャ貼り付け、
ライティングとはどんなものか、フォンと環境光の考え方、
Metal Kitでの書き直し、
となっています。

RendowにIn-App Purchaseを組み込む

In-App Purchaseの実装を行おうと考えました。
About In-App Purchase
In-App Purchaseに関するプログラミングガイドをふんわり読みました。

2017年3月開発状況

1月、Repete Plus(レペテ プラス)をリリースしました。ひきつづき、アップデートを作成中。

Repete PlusはRepeteを大幅に機能強化したアプリです。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能
* ペア区間作成機能

が主な拡張機能です。


1-19日

Repete Plusの開発。
「よく使う設定を登録する」機能の実装を行いました。
作業中、Xcodeが頻繁に強制終了してしまい困りました。
そろそろ、開発に使っているMacBook Air 2011 Midも買い替えどきなのかもしれません。

Repete Plusのリリース前の開発途中版です。右下、左下にボタンを配置しています。

ここで、リピート、シャッフルを割り当て、変更できるようにする予定でした。
しかし、この実装をすると1ヶ月リリースが遅れるなぁという感触があったので、いったん棚上げとしていました。

リリース後、ペア区間作成機能もできたことから、リピートなどのショートカット機能の実装に取り掛かりました。
ただ、リピート回数以外にもすばやく変更を行いたい設定項目がいくつもあります。

変更したい、かつ変更できそうな項目にはどのようなものがあるかというと?
待ち時間、リピート回数、再生方向、シャッフル、再生速度。
これだけあると、当初案の、リピート、シャッフルをそれぞれのボタンに割り当てる方式では間に合いません。
あらためて考えました。
ある設定から別の設定へ変更するボタンとして作ることとしました。
これだと、「リピート回数をx2にしつつ再生速度1.2」や「すべてのリピート回数を1に戻す」などもできます。

必要な設定を登録してもらう方式に決めたので、どのようなUIにするか?

従来の設定画面をまるまる取り込む形にしました。ただし、今回の登録時には、必要な設定のみ選んでもらうひつようがあるので、チェックボックスつきです。
選んだ項目を並べていって、選択用の名称とすることとしました。
その際、長すぎる名前だと判別しづらいので、名前をつけられるようにしました。

登録した設定を表示する際のアニメーション。
viewcontrollerを表示する際に、選曲画面の表示などで使っている
present(controller, animated: true, completion: nil)
だと、すこしゆっくりすぎました。
画面下端からにゅーっとでる感じになります。
ここは、さっと切り替えたいところです。
8割がたテーブルを表示しているところから開始して残りを0.1秒で表示するtransitionにしました。
UIViewControllerAnimatedTransitioning – UIKit | Apple Developer Documentation
を用いました。

また、「よく使う設定を登録する」機能の実装にあたり、Repete Plusを操作しているうちに不具合をいくつか発見したので、それらの修正も行いました。
• 待ち時間を30秒に指定すると強制終了する不具合を修正しました。
• バックグラウンド再生中に、次区間ボタン(あるいは前区間ボタン)を押した後、待ち時間中にフォアグラウンドに戻ると再生がおかしくなる不具合を修正しました。

20-30日

新作アプリの作成を開始しました。
ちょっとしたお絵かき機能が必要なので作成開始。

いい感じにできたと思ったものの、線をはやく描くとカクカクしている状態。

一から学ぶベジェ曲線 | プログラミング | POSTD
2次ベジェ曲線を使ってなめらかに。

関連

2017年2月開発状況 – nackpan Blog

2017年2月開発状況

前月、Repete Plus(レペテ プラス)をリリースしました。今月は、翻訳練習のためのペア区間作成機能を実装しました。バージョン1.0から大きく機能を強化したので、バージョンを2.0としました。

Repete PlusはRepeteを大幅に機能強化したアプリです。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能
* ペア区間作成機能

が主な追加機能です。


2月のRepete Plus開発

  • 選曲画面の改善。ペア情報、区切りデータを表示。
    • ペアを作ったファイルでは、A, B, ABと表示するようにしました。
    • ペアの片割れがなくなったときの処理を作成。
    • 区切りデータを表示し、区間の再生・非再生を色分け。現在の学習状況を把握しやすくしました。
    • 選択したアイテムがタブをまたいでもチェックがつくように修正しました。
  • 従来の方法では、録音ファイルサイズがかなり大きいのを改善、1/8~1/10程度に減らしました。
  • ストレージタブ、録音タブでアイテムがテーブルに表示されているものより多い場合に、全てのアイテムを追加を選ぶと強制終了する不具合を修正しました。
  • ペアとなるファイルを探す処理に誤りがあったので修正しました。
  • リピート回数表示機能を追加しました。
  • 区間移動時のリピートカウントリセットを正しいものとした。
  • ファイルのペア情報表示(A,B,AB,なし)
  • Edit Pointの編集がおかしくなっていたのを修正しました。
  • オーディオトラックを読み込めなかった際、強制終了する不具合を修正しました。
  • フォルダのリネーム処理におかしな点があったので修正しました。

Repeteの位置付けの変更

Repete Plusが大幅に機能強化されたことから、Repeteの位置付けを変更しました。
広く知ってもらいたい、あと継続的に利用してもらったさいに収益がほしい、おねがいっ、と考えて、Repeteを入手無料+広告バナー方式に変更しました。
変更直後の2日間は、一挙にダウンロード数が伸びました。その直前だと3日間で1ダウンロードだったのが、2日間で1000ダウンロードを超えて驚きました。収益としては3日間に1ダウンロードのときより少なかったので、これにも驚きました。
有料アプリが無料に切り替わったらチェックすると定められているプログラムなどだったのでしょうか。
2日間を過ぎるとダウンロード数は急激に下がり、1週間ほどで一桁となりました。

関連

2016年6月開発状況 – nackpan Blog
2016年7月開発状況 – nackpan Blog
2016年8月開発状況 – nackpan Blog
2016年9月開発状況 – nackpan Blog
2016年10月開発状況 – nackpan Blog
2016年11月開発状況 – nackpan Blog
2016年12月開発状況 – nackpan Blog
2017年1月開発状況 – nackpan Blog
2017年2月開発状況 – nackpan Blog

2017年1月開発状況

前月に引き続きRepete Plus(レペテ プラス)の開発を続けてまいりましたが、1月中旬に完成、1月18日にリリースしました。

Repete PlusはRepeteの機能追加版です。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能

が主な追加機能です。


1/1~1/7

  • 区切りデータ管理viewControllerの作成
  • 選曲画面、「最近のアイテム」の回数調整画面作成
  • 選曲画面、曲タブにつけていなかった「最近のアイテム」セクションを追加
  • オーディオエディターチャートが海苔のようだったのをもう少し櫛形混じりになるように修正した
  • オーディオデータチャートの仮dataの際の表示で、四角形のベタ塗りだったのをグラデーションをかけたものに修正した
  • 「優先する区切りデータ」を変更した時の挙動を適切なものに修正

1/8~1/15

  • Text Viewで不要なところでTapと判定される問題を解決した
  • 区切りデータ管理ViewControllerのDeleteボタンを、選択区間がない場合は使用不能にし、選択区間が1つ以上あると、使用可能とした

    Repete Plusのリリースに向けての作業を重ねている最中ですが、区切りデータ管理ViewControllerを修正している際に、はたと思いついたことがあります。
    瞬間的に訳す練習。つまり、日本語文と英語(など学習中の言語)文をペアにして再生する機能をRepete Plusに組み込めるのでは?と。
    この「瞬間的に訳す練習」に関しては別アプリでやらないと無理かしらんと思っていました。
    しかし、それだと8ヶ月コースになりそう。ということで心が暗くなっていました。
    また、想定していたアプリでは、曲を選んですぐ再生というわけにはいかず、まず下準備としてペア作成してから再生するかたちになっていたので、手軽さがなくなるなあと気に病んでいました。
    Repete Plusだと、すぐ再生でリピーティングを行えます。この段階でリピーティングをやりつつ、気になる区切りを調整してもらう。そして、瞬間的に訳す練習を行いたいとなれば、作成した区切りを生かしてペアを作成するという形にできます。
    この形式は良い感じだということで、Repete Plusに「瞬間的に訳す練習」のためのペア作成機能を組み込むこととしました。

とはいえ、まずは当初予定していた機能でのリリースを先にすることとしました。
ただ、「瞬間的に訳す練習」のためのペア作成機能を追加できるように、この段階でデータモデルを再検討し、修正しました。

そして、バージョン1.0のリリースに向けて、問題箇所を修正。

  • ファイルの末尾区間を再生中に、再生を不要とすると曲リピートでリピートされない問題を修正
  • Audio Editor Menuの項目のテキスト表示部分を改修した
  • 区切りデータの削除の不具合を修正
  • 録音ボタンをわきによせた。

中旬・下旬

  • Repete PlusをAppleに提出
  • 紹介文章作成
  • 紹介動画作成
  • ペア区間機能作成

ということで、ついにRepete Plusをリリースすることができました。
かなり開発に時間かかるだろうなぁと思っていましたが、ほんとにまぁ時間がかかってしまいました。
自分にとってはずいぶんとまぁ大作で、長時間にわたる開発で心身へろへろですが、リリースできてほっとしております。

語学学習を支援するiPhone/iPadアプリ「Repete Plus」をよろしくおねがいします。

関連

2016年6月開発状況 – nackpan Blog
2016年7月開発状況 – nackpan Blog
2016年8月開発状況 – nackpan Blog
2016年9月開発状況 – nackpan Blog
2016年10月開発状況 – nackpan Blog
2016年11月開発状況 – nackpan Blog
2016年12月開発状況 – nackpan Blog
2017年1月開発状況 – nackpan Blog
2017年2月開発状況 – nackpan Blog

2016年12月開発状況

前月に引き続きRepete Plusの開発中。

Repete PlusはRepeteの機能追加版です。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能

が主な追加機能です。


上旬

中旬

  • テキストエリアへのクラウドストレージからのテキストダウンロード機能作成。
  • テキストエリアのフォントサイズ変更機能作成。
  • テキストを隠す・表示する機能作成。
  • 前回使用したアイテムを起動時に読み込む機能作成。
  • Launch Screen画像修正。
  • 設定画面。設定 > 詳細 画面の設定。

下旬

  • 乱暴に区切りを動かすと、まれに区間がおかしくなるケースがある不具合を修正。
  • 曲リピート機能を修正。再生不要区間のことを考慮したものに修正。
  • Audio Editorの使い方Viewを作成。そのさい、水滴マークや口マークをテキスト中に入れる必要がありました。
    UILabelに画像を表示する – Qiita
    こちらの記事のおかげで助かりました。
  • 「優先する区切りデータ」機能の作成。これは、全体設定では無音検出の基準時間0.9秒レベル2となっているが、すでに基準時間0.3秒でいい感じに区切られたデータが存在する場合に、いい感じの区切りデータを優先するための機能です。
  • 選曲画面の表示崩れを修正。
  • テキストエリアが空であり、ファイルに歌詞がある場合に歌詞を読み込む機能作成。
  • 波形図部分の自動スクロール機能を作成。しかし、動きを見ていると酔ってしまい非常に気持ち悪くなってしまったので不採用。

関連

2016年6月開発状況 – nackpan Blog
2016年7月開発状況 – nackpan Blog
2016年8月開発状況 – nackpan Blog
2016年9月開発状況 – nackpan Blog
2016年10月開発状況 – nackpan Blog
2016年11月開発状況 – nackpan Blog
2016年12月開発状況 – nackpan Blog
2017年1月開発状況 – nackpan Blog
2017年2月開発状況 – nackpan Blog

2016年11月開発状況

前月に引き続きRepete Plusの開発中。

Repete PlusはRepeteの機能追加版です。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能

が主な追加機能です。

11月末時点での開発中動画。


* 選曲画面、タブが増えたのでスワイプ式に変更
* 選曲画面に履歴タブ追加
* テキストエリアにメモを記せます
* テキストエリアをスワイプすると曲送り・戻し(初期設定)


上旬

  • 選曲画面に、履歴タブを加えました。
  • 選曲したitemのタイトル、 アーティスト、アルバム名を上部のnavigation barに表示する機能を実装しました。
  • iPhone 4s用のレイアウト作成しました。
  • オーディオデータが場合により縦に伸びて表示されるのを修正しました。

中旬

  • Repeteの不具合の修正。
  • Container Viewについて調査。
  • Gesture Recognizerについて調査。

下旬

  • テキストエリアでジェスチャー操作ができるようにしました。(タップ、スワイプ)
  • ジェスチャー設定用画面作成。
  • Original再生(Non-stop再生から改名)時、再生速度を1以外にした時の音声が「声」仕様になっていなかったので修正

関連

2016年6月開発状況 – nackpan Blog
2016年7月開発状況 – nackpan Blog
2016年8月開発状況 – nackpan Blog
2016年9月開発状況 – nackpan Blog
2016年10月開発状況 – nackpan Blog
2016年11月開発状況 – nackpan Blog
2016年12月開発状況 – nackpan Blog
2017年1月開発状況 – nackpan Blog
2017年2月開発状況 – nackpan Blog

2016年10月開発状況

前月に引き続きRepete Plusの開発中。
また、今月は懸案だったRepeteのiOS 10, Swift 3対応を行いました。

Repete PlusはRepeteの機能追加版です。
* オーディオファイルの区切り編集機能
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* テキストメモ機能

が主な追加機能です。

10月末時点での開発中動画。


* ピンチ操作でオーディオデータ表示を拡大
* 不要な区切り点をタップ操作で削除
* チェックマークをタップして、再生/再生不要を切り替え


上旬

Repete PlusのUI部品の作成と配置、アプリアイコン作成を行いました。
なかなか定まらず、泥沼に。

テキスト編集ボタンとオーディオ編集ボタン

初期案

editor_fullscreen1008v1
ペンアイコンでテキスト編集ボタンを示しました。オーディオ編集ボタンをどのような図案にするか悩みました。オーディオ・ビデオ編集では「はさみ」を図案化したものなどがありますが、実際にやってもらう操作とそぐいません。Repete Plusでは「水滴」状の区切り点マークをタップやドラッグします。そこで、この「水滴」状マークを図案化してペンアイコンと雰囲気を揃えたものとしました。
白地に円形のボタンにしました。しかし、唐突感があって馴染んでいません。また、それぞれテキストに関連している、オーディオに関連しているというのがわかりづらいです。

中期案

editor_fullscreen1009v2
テキスト編集ボタンとオーディオ編集ボタンを再生関連ボタンに合わせて薄い浮き彫り風に変更。
また、対応しているエリアと線で結びました。
線で結ぶというアイデアはうまくいっていません。

決定案

editor_fullscreen1009v3
アイコンの図案の向きを変更して、対応エリアとの結びつきを強めました。
また、アイコンの位置を対応エリアに食いこませました。
再生関連ボタンの形状に準拠した角丸四角形に変更しました。

アプリアイコン

Repeteの後継であり、機能追加版であることを示すものにしようとの思い。

初期案

icon-old-120_white
ごちゃごちゃしすぎました。

シンプルに。
Repeteで用いていたふきだしをメインにしましょう。
ただ、ふきだしのアプリアイコンは、世にいろいろあります。Appleの「メッセージ」も緑にふきだし。
アイコンがならんでいるなかで、どれだっけと迷わずにえらべるものにする必要があります。

決定案

repete_plus_icon_120_white
周りに波のグラデーションを描きました。
発声を繰り返し繰り返し続けていくイメージを表現しています。

中旬

RepeteのiOS 10、Swift 3対応を行いました。
iOS 10からは、メディアライブラリへのアクセスの際に、アクセスを許容するかどうかの確認が入りました。
そこで「許可しない」を選ぶと、以後、選曲時にアプリが強制終了する不具合がありました。
Swift 2.3(移行時用の暫定バージョン)ではなく、Swift 3(Xcode 8でのスタンダードバージョン)に一挙に移行しようとして処理を進めましたが、ひどく時間がかかってしまいました。

外部ライブラリ(クラウドストレージ用のライブラリ)を対応させるのに時間がかかりました。
CocoaPodsを機能させるのに試行錯誤、ライブラリのAPIのバージョンが新たになったのでそれに対応させる、などなど。

また、表示崩れが生じている部分を修正。
iOS 10では、viewDidLoad時にconstraintのwidth,heightが反映されないので、そのため生じたレイアウト崩れを修正。
また、non-stopボタンの文字部分の描画をAutodesk Graphicが生成したコードで行なっていたが、ここでエラーが発生したので、UILabelに置き換えました。
UILabelに”Non-stop”と適切に描くためにNSAttributedStringを使用しました。

下旬

区切り情報、再生/非再生情報などを保存するために、Repete Plusでは、Realmを用いることにしました。
Realm: Create reactive mobile apps in a fraction of the time
外部ライブラリの使用では、ライブラリの導入段階でつまづき、サンプルがそのままでは動かないという事態が毎回のように発生していました。
なので、Realmを使うときもおそるおそる進めていったのですが、使ってみるととくにトラブルなくスムーズに導入、実行ができました。
ドキュメントも充実していて、なんといいますか、すごく心地よく作業を進めることができました。

Repeteでは、メディアライブラリアイテムのみ区切り情報をCoreDataを使って保存して、分析時間の短縮に用いていました。この機能はなければないで、(ちょっと分析に時間がかかるとはいえ)やっていけたのですが、今回のRepete Plusではそうもいきません。
Repete Plusでは、再生されたファイルを照合し、データベースにあれば、区切り情報、区間の再生/非再生情報、再生日時を呼び出す仕組みとしました。再生日時は、選曲画面の履歴タブに用います。

関連

2016年6月開発状況 – nackpan Blog
2016年7月開発状況 – nackpan Blog
2016年8月開発状況 – nackpan Blog
2016年9月開発状況 – nackpan Blog
2016年10月開発状況 – nackpan Blog
2016年11月開発状況 – nackpan Blog
2016年12月開発状況 – nackpan Blog
2017年1月開発状況 – nackpan Blog
2017年2月開発状況 – nackpan Blog