AvAudioPlayer“停止”无法正常工作

时间:2013-05-08 11:10:45

标签: ios objective-c avaudioplayer

好的,这是我的问题。我有一个应用程序,其中有启动音乐播放,我想在设置页面中实现一个简单的uibutton,停止播放音频。

部首:

int musicof;
IBOutlet UIButton *music;
@property (nonatomic, strong) AVAudioPlayer *theAudio;

方法:

- (IBAction)music:(id)sender{
if (musicof == 1){
    musicof = 2;
[music setBackgroundImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal];
[music setImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal];
    [self.theAudio stop];
}
else{
    musicof = 1;
    [music setBackgroundImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
    [music setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
    [self.theAudio play];
}

}

并且你还没有猜到整数“musicof”是否有记录按钮的状态。

然而这根本不起作用,我按下按钮只会导致图标改变。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

musicof需要是一个实例变量。您需要像这样访问它:

self.musicof

_musicof

答案 1 :(得分:0)

像这样申请。

在.h文件中导入此框架

#import <AVFoundation/AVFoundation.h>
你的.m文件中的

@synthesize theAudio;

在viewDidLoad中实现此代码

NSURL *audioURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Tum Hi Ho" ofType:@"mp3"]];

 NSData *audioData  = [NSData dataWithContentsOfURL:audioURL];

 theAudio  = [[AVAudioPlayer alloc] initWithData:audioData error:nil];

 [theAudio setNumberOfLoops:0];

 [theAudio prepareToPlay];

之后实现你的代码

- (IBAction)music:(id)sender{

  if (musicof == 1){
      musicof = 2;
      [music setBackgroundImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal];
      [music setImage:[UIImage imageNamed:@"moff.png"] forState:UIControlStateNormal];

  if (self.theAudio.playing) {
     [self.theAudio pause];
   }

   [self.theAudio stop];

   self.theAudio.currentTime = 0;
  }
  else{
    musicof = 1;
    [music setBackgroundImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
    [music setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
    [self.theAudio play];
  }
}

我希望它可以帮到你。

答案 2 :(得分:0)

[player prepareToPlay]对象AVAudioPlayer不是[player prepareToPlay]因此需要花时间播放音频文件,因此首先AVAudioPlayer {{1}}对象

答案 3 :(得分:0)

首先你需要创建超类: 在你的appdelegate.h中添加:

#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>

@interface RADAppDelegate : UIResponder <UIApplicationDelegate> {

    AVPlayer *myAudioPlayer;
}

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) AVPlayer *myAudioPlayer;

@end

didFinishLaunchingWithOptions 下的appdelegate.m添加:

[myAudioPlayer superclass];

尝试这个简单并重用代码:

- (IBAction)playStop:(id)sender {
MyAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.myAudioPlayer.rate == 1.0){
UIImage *img = [UIImage imageNamed:@"Play_BT.png"];
        [sender setImage:img forState:UIControlStateNormal];
[appDelegate.myAudioPlayer pause]; //here is possible use stop or pause is depend if you use AVAudioPlayer or AVPlayer
} else if (appDelegate.myAudioPlayer.rate == 0.0){

UIImage *img = [UIImage imageNamed:@"Pause_BT.png"];
        [sender setImage:img forState:UIControlStateNormal];
[appDelegate.myAudioPlayer play];

}

}

然后在您的文件中.h为您的按钮添加UIIMage

UIButton *control;
@property (nonatomic, strong) IBOutlet UIButton *control;

返回file.m

并添加:

- (void)viewWillAppear:(BOOL)animated {
        MyAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
     if (appDelegate.myAudioPlayer.rate == 1.0){

     UIImage *img = [UIImage imageNamed:@"Pause_BT.png"];
     [control setImage:img forState:UIControlStateNormal];

     } else if (appDelegate.myAudioPlayer.rate == 0.0) {

     UIImage *img = [UIImage imageNamed:@"Play_BT.png"];
     [control setImage:img forState:UIControlStateNormal];
     }

希望这能帮助你;)如果是,请评价;)