2012-01-23 6 views
2

xcodeのiOS 5でランダムサウンドを再生するにはどうすればよいですか? 「例外をスローする」エラーが発生し続けます。ランダムサウンドを再生

私はこれを試してみました:

int randomNumber = arc4random() % 24 + 1; 

NSString *tmpFileNameRandom = [[NSString alloc] initWithFormat:@"Sound%d", randomNumber]; 

NSString *fileName = [[NSBundle mainBundle] pathForResource:tmpFileNameRandom ofType:@"mp3"]; 

AVAudioPlayer * soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:fileName] error:nil]; 

[soundPlayer prepareToPlay]; 
[soundPlayer play]; 

ありがとうございました!

+1

あなたはファイルパス/名前のログを記録しようとしましたか、これらの正しさはどのような例外でもあります。 –

+0

%dを%iに変更しようとしました。 – Shubhank

+2

%dは問題ありません。これらは同等です(疑問に思っている場合は%dは "倍"ではありません)。 –

答えて

3

まず、 ViewController.hを

に変更してください。
#import <UIKit/UIKit.h> 

@class AVAudioPlayer; 

@interface ViewController : UIViewController 

-(IBAction)PlayRandomSound; 
@property (nonatomic, retain) AVAudioPlayer *soundPlayer; 


@end 

#import "ViewController.h" 

#import <AVFoundation/AVAudioPlayer.h> 


@implementation ViewController 

@synthesize soundPlayer = _soundPlayer; 


-(IBAction)PlayRandomSound{ 

    int randomNumber = arc4random() % 8 + 1; 

    NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Sound%02d", randomNumber] ofType:@"mp3"]]; 


    _soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; 

    [_soundPlayer prepareToPlay]; 
    [_soundPlayer play]; 


    NSLog(@"randomNumber is %d", randomNumber); 
    NSLog(@"tmpFilename is %@", soundURL); 
} 

編集するViewController.mの最初の行:私は後でこのコードは、小さな漏れを持っているので、あなたは、ARCを使用していないことに気づきました。しかし、それは開始のために行います。おそらく、ViewControllerの作成時に_soundPlayerをnilに設定して、後でそれをチェックしてください。もしそれがリリースされていなければ、新しいものを作成してください。または、新しいプロジェクトの場合は、ARCに切り替えることを検討することもできます。

+0

うわー、それだった。どうもありがとう。私はサウンドデザイナーです、もし私があなたにサウンドファウルを返すことができれば私に教えてください! – Giel

0

あなたのプロジェクトにAVFoundationフレームワークを追加しましたか? AVAudioPlayerはこのフレームワークのクラスです。

このフレームワーク(Xcode 4)を追加するには、プロジェクトファイルを選択し、[概要]タブを選択し、[リンクされたフレームワークとライブラリ]テーブルビューの下の+をクリックして追加します。あなたはこれがあなたの番号< 10で先行ゼロを与える

NSString *tmpFileNameRandom = [[NSString alloc] initWithFormat:@"Sound%02d", randomNumber]; 

を使用する必要があり、あなたのファイル名の

1

...

またはより良いまだ、これを試してみてください。

int randomNumber = arc4random() % 24 + 1; 

NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Sound%02d", randomNumber] ofType:@"mp3"]]; 

AVAudioPlayer * soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; 

[soundPlayer prepareToPlay]; 
[soundPlayer play]; 
+1

これは正しい答えです。人々があなたを助けてくれるようにするには、それを受け入れるべきです。 –

+0

こんにちは、ファイル名は正しく確認されていますが、それでも実際のサウンドは再生されません。 soundURLのNSLogはxcodeプロジェクトの有効なファイルであるSound02.mp3を返します。私は間違いなく、iPhoneの音が鳴り、Macの音はオンになっていますが、何もありません。 – Giel

+0

うーん、あなたのコードは正しく見えます。あなたのファイル名は本当に文字(大文字のS)と一致し、フォーマットは正しいことを確認してください(mp3?)。ファイルもプロジェクトに含める必要があります(プロジェクトビューアを右クリック - >プロジェクトにファイルを追加)。 –

関連する問題