1

AudioToolboxを使用して.wavファイルを再生しようとしています。私はこれまでにこれを持っています:しかし、私のファイルは再生されません。If条件は正しくトリガーされますが、再生されません。ただし、ファイルがない場合はエラーメッセージが出力されます。何が悪いのか手がかりはありますか?

-(void) playSound : (NSString *) fName : (NSString *) ext
{

    SystemSoundID audioEffect;
    NSString *path  = [[NSBundle mainBundle] pathForResource : fName ofType :ext];
    if ([[NSFileManager defaultManager] fileExistsAtPath : path])
    {
        NSURL *pathURL = [NSURL fileURLWithPath : path];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
        AudioServicesPlaySystemSound(audioEffect);
    }
    else
    {
        NSLog(@"error, file not found: %@", path);
    }
    AudioServicesDisposeSystemSoundID(audioEffect);;
}
4

2 に答える 2

1

ウォーレンのコメントからわかりました。最後の行は、再生するように設定されてから数ミリ秒後に音が消えてしまい、聞こえないため、削除する必要がありました。

-(void) playSound : (NSString *) fName : (NSString *) ext
    {

        SystemSoundID audioEffect;
        NSString *path  = [[NSBundle mainBundle] pathForResource : fName ofType :ext];
        if ([[NSFileManager defaultManager] fileExistsAtPath : path])
        {
            NSURL *pathURL = [NSURL fileURLWithPath : path];
            AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
            AudioServicesPlaySystemSound(audioEffect);
        }
        else
        {
            NSLog(@"error, file not found: %@", path);
        }
    }
于 2013-01-07T19:49:51.597 に答える
1

サウンドIDを再生するように指示した直後に破棄することはできません。これにより、再生が停止します。そもそも聞こえなかったのはそのためです。

代わりに行うべきことは、IDの作成を担当するオブジェクト(たとえば、ビューコントローラ)のプロパティにIDへの参照を保持することです。インターフェイス宣言で次のように宣言します。

@property(nonatomic, assign) SystemSoundID audioEffect;

...その後、次のように割り当てます。

AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &_audioEffect);

これにより、後で(たとえばで)使い終わったことがわかったときに適切に廃棄できるだけでなく、viewDidUnload再生するたびにディスクからファイルを読み込む必要がなくなります。各IDは無制限に再生できるためです。

最後のヒント:文字列を要求してからURLに変換する代わりに、バンドルリソースへのURLを直接要求できます。

NSURL *audioURL = [[NSBundle mainBundle] URLForResource:fName withExtension:ext];
if([[NSFileManager defaultManager] fileExistsAtPath:[audioURL path]])
    // ...
于 2013-01-08T00:46:12.013 に答える