mp3プレーヤーのAIRを開発していた時にハマった罠についてメモ。
File.nativePathだとOSXで読み込めず、Winで実行すると大丈夫。
これはいったいどういうことなんだ?と、検証機のMacBookの前で一瞬ハテナマークが飛び交いました。

ひとまず謎を解くためにものすごく単純なコードに落として検証してみました。

ドキュメントディレクトリーにあるhoge.mp3を読み込んで再生。

import flash.filesystem.File; import flash.net.URLRequest; import flash.media.Sound; var _path:File = File.documentsDirectory.resolvePath("hoge.mp3") trace(_path.nativePath);// C:\Users\murai\Documents\hoge.mp3 trace(_path.url);// file:///C:/Users/murai/Documents/hoge.mp3 var _sound:Sound = new Sound(); var _channel:SoundChannel= new SoundChannel(); _sound.load(new URLRequest(_path.url)); _channel = _sound.play(0,0);

Winだと

_sound.load(new URLRequest(_path.url));

でも

_sound.load(new URLRequest(_path.nativePath));

でも鳴るんですが、MacだとFile.urlの方でしか鳴りません。

スラッシュ(/)とバックスラッシュ(\)の違いはAIR側で吸い取ってくれるんですが、Macで使うにはこの書き方だとfile:///ってやつ("app-storage"のURL Schemeというそうです)が必要らしいです。
nativePathは素直にそれぞれのOSにあったパスを返してくれますが、urlはfile:///○○の形で帰してくれます。

Macで突然ファイルが読めなくなった!となったらまずここを確認してみると、あっさり解決するかもしれません。

リファレンス
File.nativePath
File.url

HTML5飯