5

サウンドを再生しようとしていますが、コーディングすると:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject);

次のエラーがスローされます。

Objective-C ポインター型 'NSURL *' から C ポインター型 'CFURLRef' (別名 'const struct __CFURL *') へのキャストには、ブリッジ キャスト エラーが必要です。

次の2つの提案された解決策の両方を試しました:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

また

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject);

しかし、まだサウンドを再生することはできません。

問題は、ブリッジングエラーがサウンドが再生されない原因なのか、それとも他の場所を探す必要があるのか​​ということです。

SysSound サンプル コードを使用してサウンドを再生できます。iOS 6 と Xcode 4.5 を使用しています。

ポインタをありがとう:)

4

1 に答える 1

10

サウンドが再生されない理由は、おそらくキャストではありません。

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

結構です。

ほとんどの場合、エラーは表示されていないコードにあります。一般的な問題は、URL 作成時のエラーまたは無効なファイル形式です。

コードを次のように変更します。

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject);
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status);

取得したステータス コードを確認します。parmErr(-50) は比較的一般的で、通常は URL がゼロであることを意味します。

ああ、もう 1 つ考えてみると、実際にサウンドを再生している場所は表示されません。AudioServicesCreateSystemSoundIDでは実際にサウンドが再生されないことはわかっています。電話する必要があります:

AudioServicesPlaySystemSound(soundFileObject);

すでに知っていたらごめんなさい!

于 2012-07-28T19:50:40.457 に答える