0

Objective-C と Xcode でのプログラミングは初めてで、サウンドが再生されない理由がよくわかりません。このチュートリアル ( http://www.youtube.com/watch?v=2mbCkIVF1-0 ) に従いましたが、何らかの理由で iOS シミュレーターでサウンドを再生できません。nib ファイルではなくストーリーボード レイアウトを使用しているので、それが問題になる可能性があります。ボタンを持っているストーリーボードに接続する方法を知っているので、かなり混乱しており、この問題に夢中になっています。私のコードが間違っている場合は、正しい方向に向けてください。問題は些細なことかもしれませんが、いずれにせよ、どんな助けも素晴らしいでしょう! 再度、感謝します

SFViewController.m

#import <UIKit/UIKit.h>
#import <AVFoundation/AVAudioPlayer.h>


@interface SFViewController : UIViewController <AVAudioPlayerDelegate> {

}
-(IBAction)playSound1;
-(IBAction)playSound2;
-(IBAction)playSound3;

@end

SFViewController.h

#import "SFViewController.h"
#import <AVFoundation/AVAudioPlayer.h>


@implementation SFViewController



-(IBAction)playSound1 {

    NSString *path = [[NSBundle mainBundle] pathForResource:@"SeriouslyFunnySound1" ofType:@"wav"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]error:NULL];

    theAudio.delegate = self;
    [theAudio play];
}

-(IBAction)playSound2 {

    NSString *path = [[NSBundle mainBundle] pathForResource:@"SeriouslyFunnySound2" ofType:@"wav"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]error:NULL];

    theAudio.delegate = self;
    [theAudio play];
}

-(IBAction)playSound3 {

    NSString *path = [[NSBundle mainBundle] pathForResource:@"SeriouslyFunnySound3" ofType:@"wav"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]error:NULL];

    theAudio.delegate = self;
    [theAudio play];
}
4

4 に答える 4

9

スコープ外に出ると「theAudio」変数が失われるため、プレーヤーが停止します。変数をクラスのメンバーとして保持します。

@implementation SFViewController
{
    AVAudioPlayer* theAudio;
}

-(IBAction)playSound1 {

    NSString *path = [[NSBundle mainBundle] pathForResource:@"SeriouslyFunnySound1" ofType:@"wav"];
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]error:NULL];

    theAudio.delegate = self;
    [theAudio play];
}
于 2014-04-17T22:42:35.503 に答える
0

最初に、IBAction メソッドが実際に呼び出されていることを確認します (これらのメソッド内に NSLog ステートメントを配置し、それらが呼び出されるかどうかを確認します。呼び出されない場合は、自分で理解できると確信しています)。

2番目: NSError オブジェクトを作成し、そのアドレスを渡して、次のように問題の性質を確認します。

 NSError *err= nil
 NSString *path = [[NSBundle mainBundle] pathForResource:@"SeriouslyFunnySound1" 
                                                  ofType:@"wav"];
 AVAudioPlayer* theAudio = 
      [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]
                                             error:err];
 if (!theAudio) {
     NSLog(@"failed playing SeriouslyFunnySound1, error: %@", error);
 }

 theAudio.delegate = self;
 [theAudio play];

err の内容は、次に何をすべきかを教えてくれるはずです

于 2013-08-31T16:56:52.757 に答える
0

なぜあなたはNULLあなたの初期化に渡しているのAVAudioPlayerですか?に nil ポインターをNSError渡し、初期化後もエラーが nil であることを確認します。私の最善の推測は、何らかのエラーがあり、theAudio実際にはゼロであるということです。

于 2013-08-31T16:54:41.310 に答える