フォト

最近のトラックバック

無料ブログはココログ

« 2011年3月 | トップページ | 2011年5月 »

2011年4月

2011年4月28日 (木)

AVAudioRecorderDelegateについて

忘備録、というか、プログラムで困ったことがありまして珍しく、技術的なことについて記述します。

iPhone向けにアプリを作っており、特に録音・録画するためのアプリを作っています。
そのなかで、「AVAudioRecorderDelegate」というものを使っているのですが、この中で定義されちている、「audioRecorderBeginInterruption」の仕様がいつの間にか変更されてしまっていたらしく、急ぎ、プログラムを直した次第。

今回、修正したバグは、かなり致命的。

他の録音アプリで、対応してるものは見たことがないのですが、実は、録音中に着信があった場合、自動で一時停止し、電話、もしくは着信が終わったら、録音を再開する仕組みが盛り込まれております。
が、今日気がついたのですが、これが使えなくなっていたのです。

iPhone自体、着信があるとどんな状況であろうと、一時中断、もしくは、強制終了させてしまいます。しかしながら、そのためにデータが保存できなかったり、編集中も文章が消えてしまったりするおそれがあります。
そのため、iPhoneでは、アプリ側に、「割り込み処理」が入ったことを通知する仕組みがあり、その通知があった場合、データを一時的に保存するなどの処理を開発者側が組み込めるようになっております。

今回、問題になったaudioRecorderBeginInterruption、audioRecorderEndInterruptionもその、割り込み処理の一部。
これらを用いて、録音中であっても自動で一時停止、録音の再開を実現させていた次第。

今までは、録音を開始すると、「音をファイルにする」処理が実行され、割り込みがあった場合、一時停止を行い、終わったら再開する、でよかったのです。

しかしながら、その流れが失われ、「音をファイルにする」処理が実行され、割り込みがあった場合、「音をファイルにする」処理を一時停止、そして、なぜか新しく、「音をファイルにする」処理を作り、録音を続けるような流れになっていたのです。
では、最初の「音をファイルにする」処理はどうなるのか? 新しい「音をファイルにする処理」によって上書きされてしまい、無くなってしまうのです。

「 iOS 4 Programming CookBook 」という本によれば、確かに、着信などの割り込み処理があった場合、新しく処理を創りだしてしまうことが書かれており、その回避方法として、もとの「音をファイルにする」処理を、指定してプログラムを書かないとだめだよん、

って書いてありました。
ちなみに、うまくいきませんでした。

おそらく蓄積したデータを引き継がずに、インスタンス自体をコピーしている模様。

実際にコードを書いてみよう。

BOOL isRecording =FALSE;

- (void)viewDidLoad {

   NSURL *url = [NSURL alloc] initFileURLWithPath : ファイルパス]

    NSError *error = [[NSError alloc] init];
    recorder = [[AVAudioRecorder alloc]initWithURL:url
                                    settings:nil
                                    error:&error];

    [ recorder record ];

}

// 割り込みが入った際の処理を書く。録音中は一時停止になる。

-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder{

}

// 割り込みが終わった際の処理を書く
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder{
    if  ( isRecording ) {
        [recorder record]; // 割り込みが終わるので、録音を再開する。

    }         

}

以前はこれで、割り込みが入った際に一時停止、割り込み処理が終わったら、録音を再開してくれていた。

しかし、今では通用しない。録音を再開するが、電話が掛かってくる前の録音の内容は失われてしまう。

海外で出版されている最新の書籍によると、インスタンスが上書きされるので、それまで録音していたインスタンスを指定して、再開するように、と書かれていた。

インスタンス名で解決できるかと思ったができなかった・・・。仕方ないので、この手法は使わないようにしました。

そこで、使ったのが「AVAudioSessionDelegate」。下記のコードで代替を行った。

-(void)setAudioRecordingSession{

    AudioSessionInitialize(NULL, NULL, interruption, self);

}

static void interruption(void *inClientData, UInt32 inInteruputionState) {
    AVAudioRecorderViewController *controller = inClientData;
   
    if ( isRecording ){
        if(inInteruputionState == kAudioSessionBeginInterruption){
             [ controller.recorder pause];            
        }else{
            // 割り込み終了
             [ controller.recorder record];          
        }
    }
}

これも、割り込みが発生した際に実行されるコードである。これで、インスタンスが上書きされることなく、録音を一時停止、割り込み終了時に、再開する、という機能を実現させることができた。

今回のようなことは、たびたびあると困るのだが・・・。

2011年4月26日 (火)

ロボットの国・日本

日々、何かと話題にあがります、福島原発の話題。
最近は、海外からロボットを借りるなどして、高い放射線を避けながら作業ができるようになったと報道されています。

日本って、高い技術を持つ国なのに・・・。そういうロボット作ってないの!?
って疑問に思われる方もたくさんいらっしゃると思います。

でも、そういう話は、ほとんどでてきません。
それもそのはず、ロボットを作っても、売れなければ話になりません。
特に、産業用に作られていたロボットも、ここ10年で納品先の工場が海外に行ってしまったことや、コストカットのため買うことよりも、リースが主流になったこともあり、今までロボットを作っていた会社はつぶれるなり、業務替えを余儀なくされているケースが多いそうです。

また、ロボットを導入して生産を行っていた会社も、売上の減衰に伴い、増産の必要もなくなったこともあり、一台数千万〜億のロボットは作られなくなっていったのです。

今、製造で起こっている事象として、日本の企業が半導体装置を作り、それを韓国、中国に納品し、韓国・中国がそれを使って、部品を作る。その部品を使って製品が作られる。
そんな流れができてしまっています。

軍隊を持たない日本。今後もロボットがつくられることはないでしょうね・・・。

iPad2 について

東日本大震災の影響により、発売が延期されていたiPad2ですが、この連休中に発売されるのではないか?
と、いう噂が流れています。

実際、そんなことあるのか? 個人的にはあるのではないかと思っています。
というのも、アプリのアップデートが一週間、レビュー待ちになっており、まったく進展がないからです。

アップル社が、何かイベントめいたことをするときによくあることなので、そろそろなのかな?
とは思っています。
また、京都のほうでは、4月28日のイベントでiPad2が登場するそうですし・・・笑。
私個人としても、アプリを対応させなければならないので、早めに、売りだして欲しいところですが・・・。

今回、大震災の影響で日本が提供する部品の供給ができなくなり、十分に生産ができないためとのことでした。

おお!、さすが日本、日本の部品がなければ物づくりはできない・・・という声も聞こえてきますが、正直、日本からiPad、iPad2に代わるような製品が生まれでてこないことは、悲しいことです。

2011年4月12日 (火)

【お知せ】 iPhoneアプリ:Oresund(Voice&VideoRecorder)アップデート 2

iPhoneをお使いの方にはあまり、メリットはないかもしれませんが・・・^^;

Oresund(Voice&VideoRecroder)ですが、ユニバーサルアプリとなります。
ユニバーサルアプリ、とは、iPhoneとiPadの両方で利用できるアプリケーションのことです。

もともと、iPhoneのアプリは、iPadでも利用出来るのですが、画面がiPhoneサイズなので使いづらさはありました。

ただ、今回はじめて、iPadの画面のデザインしたのですが、あの画面サイズはやっぱりでかいですね・・・。
今後、ちょくちょく、変えていきたいと思います(^^;

現在、審査中ですが、リリースが決まればiPadのAppStoreにも表示されるようになります。

また、その後ですが、録音しながらメモできるように機能拡張したバージョンをリリースする予定です。

2011年4月 2日 (土)

震災の援助について。

ちょっと前に、iTunesより、米国赤十字社への募金をさせていただきました。

手軽に申し込めたのも出して、即、申し込んだのですが、少しあとになって、こういうのって、税金控除にならないのか?と思い調べてみたところ、日本赤十字社への募金では、控除対象になることがわかった・・・。

というわけで、先日、売上を振り込もうと思い、郵便局へ足を運びました。
しかしながら、振込用紙を書いている間に、ふと、「どうやって控除されるのか??」と疑問に思い、窓口で聞いた。

「受領証が必要な場合は、事前に登録が必要です」
とのこと・・・。なにそれ??
受領証でなくても、領収証はくれるみたい・・・。いやでも、それで証明できるのか??

と、思い、聞いてみるとその場で早速、調べてみるものの、、、

ありゃ・・・?
「義援金事前登録」が必要とのこと。なんだこの事前登録って・・・?
項目には、寄付金額を入力する欄があるではないか!

これは入金する前にするものなの?入金した後にするものなの?
もし、入金する前に「義援金事前登録」をしたとして、その後で入金する額に差があった場合どうなるのだろうか?

入金してしまったとしよう。
でも、「事前登録」だから、前もって登録しなきゃいけないのでは??という疑問が頭をよぎる・・・。

また、入金するたびに、「義援金事前登録」をしなければならないのか?
それとも、どっかで、入金した金額をバババババーン!といれちゃえばいいのか?
でも、受領書の発行には数ヶ月かかるという・・・。

よくわかんねぇ・・・。来週再チャレンジします><。
とりあえず、知り合いに聞いてみます。

というのも、その辺りを、窓口で尋ねたところ、横で会話を聞いていた方から、
「税金とかケチなこといってんじゃねぇよ!むしろ払えよ!非国民が!」
って、割と大きな声で言われちゃいました(笑)

これから、復興のためのお金を捻出しなければならないのだから、それも一理あるなあ・・・と思いながら、周りの目を気にしつつ、退散してきましたm( _ _ )m

最近、CMでも、支援を呼びかける物が多くなりました。
支援支援、といいけれども、こういう支援の仕方を、考えて実施しています。

あえて、評判の悪い、茨城県産、福島県産の野菜を買うことにしています。
産地の業者さんのためである。
ひょっとしたら、数年後、癌になるかもしれない・・・。
しかし、同じ日本人として痛みを分かち合う、ということも必要だと感じています。

先日、茨城県産の水菜を買いました。鍋に使おう!と思ったのです。
一袋、100円。もっと安くならないものかな?って正直思いました・・・。
しかし、この水菜、どうしても食べられず、、、そのまま、捨ててしまいました・・・。

そういうことが3回ほど繰り返したとき、食べ物を粗末にしたことに対して、罪悪感を覚えたので、知人にそのことを告白したところ、
「お前は偽善者だな」 と言われ、そのまま電話を切られてしまいました・・・。

・・・すみません。卑しい奴で m( _ _ )m

« 2011年3月 | トップページ | 2011年5月 »

最近の写真