2

iPhone プログラムからサウンド ファイルを再生しようとしています。

コードは次のとおりです。

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );

最初の NSLog はファイルへのアクセス権があることを確認するためのもの (私はアクセスしました)、2 番目の NSLog はファイルの URL を表示するためのもの、3 番目の NSLog は -1500 "不明なエラーが発生しました" を返すものです。

2 番目の NSLog では、次の出力が得られます。

file://localhost/Users/alan/Library/Application 敲慬楴敶瑓楲杮upport/iPhone蒠ꁻニッキĀ⾅獕牥⽳污湡䰯扩慲祲䄯灰楬慣楴湯匠灵潰瑲椯桐湯⁥楓畭慬潴⽲獕牥䄯灰楬慣れ楴湯⽳䙂㕅㡂㤱䌭䐳ⴸ䐴䙃㠭㍃ⴷ䍁㈶㠵䙁㤴㈰䰯捯瑡䵥⹥灡測汰田祡挮晡imulator/User/Applications/BFE5D8-9-9-CFE5D81 4DCF-8C37-AC6258AF4902/LocateMe.app/play.caf

これは、「説明」方法に対する私の誤解によるものか、これが問題の一因となっている可能性があります。

何がうまくいかないのですか?

4

5 に答える 5

3

NSLog の最初のパラメーターはフォーマット文字列です。[URL description]NSLog の 2 回目の使用にフォーマット文字列として渡しています。URL の説明に%文字が含まれていると、スタックからランダムなものが出力されてしまうため、これは悪いことです。

代わりに、

NSLog(@"%@", URL);

-descriptionここで使用する必要さえありません。NSLog は%@、「NSString」ではなく「オブジェクト」を意味するため、自動的にそれを呼び出します。また、適切な処理を実行するのに十分スマートです。

于 2008-11-03T19:18:19.463 に答える
3

また、iPhone シミュレーターは、5 秒を超えるサウンド (systemSound) を再生することを好まないようです。ほとんどの場合、アプリが起動時にsystemSoundを再生するのと同じ問題がありました。

私がシミュレーターで作業していたアプリの 1 つはサウンドを再生しませんでしたが、デバイスは再生しました。後で、シミュレーターとサウンドの処理方法に奇妙な制限があることがわかりました。Apple にバグを報告しました。これは、iPhone SDK 3.0 のリリースで解決されることを願っています。

于 2009-05-01T00:06:04.857 に答える
1

これに関する更新。

デバイスでアプリを実行できるようにするためのキーを取得しました。

アプリをデバイスで実行すると、.cafファイルが正常に再生されることがわかりました。

次に、さまざまな代替案を試しました。

60秒の長さの.wavファイルは、シミュレーターとデバイスで機能しませんでした。

5秒の長さの.wavファイルは、シミュレーターでは機能しますが、デバイスでは機能しません。

5秒の長さの.aiffファイルは、シミュレーターとデバイスで機能します。

ファイルがAudioServicesCreateSystemSoundIDに渡されるときに、シミュレーターとデバイスがファイルについて何をチェックしているかを明確に知ることは良いことです。

于 2009-01-21T01:36:36.880 に答える
0

サウンドをうまく再生するアプリケーションでも同じことを試しました。シミュレーターでサウンドが再生されずNSLog、URL にアクセスしようとすると、You と同じゴミがEXC_BAD_ACCESSその上に表示されます。デバイスに URL を記録すると、URL は問題ありませんが、EXC_BAD_ACCESSそれでも取得されます。ロギングをドロップすると、サウンドが再生され、すべてが機能します。誰かがこの動作を説明できれば、私は感謝しています。あなたの問題については、ログを削除して、デバイスでコードを試してみます。

于 2008-11-03T06:53:51.700 に答える
0

.caf ファイルの再生には「AVAudioPlayer」クラスを使用します

于 2009-10-30T05:19:16.413 に答える