Titaniumで録音した音声をファイルに保存する。
Titaniumは音声の録音も簡単にできます。
デモアプリのKitchenSinkに録音のサンプルコードもあります。
Google Code Archive - Long-term storage for Google Code Project Hosting.
今回は、録音したファイルをファイルに保存する方法を説明します。参考になるのは、上記KitchenSinkのResources/examples/sound_record.jsです。
録音するには、Ti.Media.createAudioRecorder()でAudioRecorderインスタンスを生成して、このインスタンス経由で行うらしい。
// sound_record.js: 2行目 var recording = Ti.Media.createAudioRecorder();
録音の開始は
// sound_record.js: 134行目
recording.start();
そして、終了するときは。
// sound_record.js: 118行目
file = recording.stop();
ここがポイントで、stopの戻り値がファイル(file)を返している。これは、録音したファイルの一時ファイルだと思われる。試しにstop直後にfileの情報を出力してみた。
// file = recording.stop();の直後にログを出してみる Ti.API.info("Stop recording: " + file); Ti.API.info("Stop file path: " + file.path);
結果はこんな感じ↓
[INFO] Stop recording: [object TiFile] [INFO] Stop file path: /var/folders/cq/cqIMj6Y4EEGVkiy42gtsX++++TM/-Tmp-/9CA0.wav
どうやら、stopの戻り値にはTiFileというオブジェクトが返ってきていて、そのオブジェクトのプロパティ(path)を見てみると「/var/folders/cq/cqIMj6Y4EEGVkiy42gtsX++++TM/-Tmp-/9CA0.wav」パスが入っている。つまりこの場所にファイルとして保存されていそう。TiFileがTitanium.Filesystem.File(Appcelerator Platform - Appcelerator Docs)と同じかどうかは不明。
ここ(http://github.com/appcelerator/titanium_mobile/blob/master/iphone/Classes/TiFile.h)を見るとpath, sizeというプロパティとcreateTempFileっていう関数が見えるくらいなので、違うものなんだろうか。微妙。
とりあえず、ここで重要なのはファイルのオブジェクト(TiFileなるもの)が取得できるということ。あとは、これを任意の場所に保存すればよい。ファイルに保存するには、Titanium.Filesystem.getFileでファイルを取得し、取得したFileオブジェクトのwriteで、さっき取得したfile(TiFile)を渡してやるだけでOKだった。手探り感ばりばりみたいな。。
// 保存したいファイルを指定してFileオブジェクトを取得 var f = Titanium.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory + '/' + 'recording_file.wav'); // まだファイルがなければ作成(もしかしたら、この処理はいらないかも) if (!f.exists()) { f.createFile(); } // writeでファイルを書き込み。 f.write(file);
ちなみに、Titanium.Filesystem.resourcesDirectoryはエミュレータ上では?TitaniumのプロジェクトのResourcesの中みたい。ファイルは以下の場所に保存されていた。iPhoneに乗せたときにはどこにいくんだろう〜。基礎を全く知りません。。
/Users/hironemu/Documents/titanium-workspace/Saikyo-Mezamashi/Resources/record_alerm.wav
ドキュメントもサンプルもそろってなかなかいいんだけど、やっぱり慣れるまでは悪戦苦闘だね。こりゃ。