我正在尝试在我的应用程序中播放音乐。 音乐工作正常,但在切换viewControllers并返回主菜单后,我的音乐再次播放! 这意味着几个相同的声音一起播放! 我怎么解决这个问题? 这是我的代码:

- (void)viewDidLoad {

    NSString *music = [[NSBundle mainBundle] pathForResource:@"1music" ofType:@"mp3"];
    myMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL];
    myMusic.delegate = self;
    myMusic.numberOfLoops = -1; 
    [myMusic play];
}


- (IBAction) scoreView {

    ScoreViewController *scoreView = [[ScoreViewController alloc] initWithNibName:@"ScoreViewController" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    [self.view addSubview: scoreView.view];
    [UIView commitAnimations];
}

编辑代码:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {

            NSString * musicSonati = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
            myMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicSonati] error:NULL];
            myMusic.delegate = self;
            myMusic.numberOfLoops = -1;
            [myMusic play];

        }
        return self;
    }

//toggle button
- (IBAction)MusicPlaying:(id)sender {

    if ((isPlay = !isPlay))
    {

        UIImage *buttonImageNormal = [UIImage imageNamed:@"play.png"]; 
        UIImage *stretchableButtonImageNormal = [buttonImageNormal  stretchableImageWithLeftCapWidth:0 topCapHeight:0]; 
        [MusicButton setBackgroundImage:stretchableButtonImageNormal forState:UIControlStateNormal]; 
        [myMusic pause];



    }else {

        UIImage *buttonImageNormal = [UIImage imageNamed:@"pause.png"]; 
        UIImage *stretchableButtonImageNormal = [buttonImageNormal  stretchableImageWithLeftCapWidth:0 topCapHeight:0]; 
        [MusicButton setBackgroundImage:stretchableButtonImageNormal forState:UIControlStateNormal]; 
        NSLog(@"Music play");
        [myMusic play];

    } 

}

===============>>#1 票数:5

如果您要在多个地方播放音频,那么实现此目的的一种简单方法是在委托中声明具有合成属性的AVAudioPlayer实例。如果您想在任何地方播放,请执行以下操作: -

MyAppDelegate *app_delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];


if(app_delegate.audioPlayer)
{
    [app_delegate.audioPlayer release];
    app_delegate.audioPlayer = nil;
}
app_delegate.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];     

如果你想停止声音,请执行以下操作: -

if(app_delegate.audioPlayer)
{
    if([app_delegate.audioPlayer isPlaying])
    {
        [app_delegate.audioPlayer stop];
        [app_delegate.audioPlayer setCurrentTime:0];
    }
}

如果已经分配或者使用新的声音文件URL再次分配它,则播放新的声音文件释放和nil相同的播放器。

===============>>#2 票数:4 已采纳

确保myMusic被正确声明为保留属性并合成然后尝试这样的事情:

-(void) commonInit {
    NSString * musicSonati = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
    self.myMusic = [[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicSonati] error:NULL] autorelease];
    self.myMusic.delegate = self;
    self.myMusic.numberOfLoops = -1;
//You probably don't want to play music on init, rather defer to viewDidLoad.
//        [self.myMusic play];
}

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (id)init {
    self = [super init];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
        [self commonInit];
    }
    return self;
}

然后在viewDidLoad中尝试:

- (void)viewDidLoad {
    ...
    if (!self.myMusic.playing) {
        [self.myMusic play];
    }
    ...
}

另外,不要忘记以dealloc发布你的播放器!

===============>>#3 票数:1

首先, viewDidLoad可能不是初始化AVAudioPlayer的好地方,因为系统可能需要卸载一些组件来回收内存(在viewDidUnload )。 您可能应该在init方法或类似方法中创建AVAudioPlayer

所以当你的焦点重新回到你的应用程序时,你最终会创建第二个AVAudioPlayer ,而你实际上正在丢失对第一个AVAudioPlayer的引用。 (因此,也会泄漏记忆。

如果要在加载视图时开始播放音乐,则应在执行此操作之前另外检查其状态:

- (void)viewDidLoad {
    ...
    if (!myMusic.playing) {
        [myMusic play];
    }
    ...
}

===============>>#4 票数:1

它似乎正在开发游戏(从你的函数名称之后的viewLoad(ScoreView)。;))

好吧,据我所知,如果你想用Game实现,AvAudioplayer不是好选择。

使用cocosdenshion,下载最新的cocos2d文件夹,找到这9个文件,把它放在资源文件夹中,

你完成了.. !!!

#import "SimpleAudioEngine.h" // wherever you want to call in head part of the file.

Step1调用短文件。

[[SimpleAudioEngine sharedEngine] playEffect:@"blast.mp3"];

step2调用后台循环。

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"background.mp3" loop:YES];

注意:有可用功能列表http://www.cocos2d-iphone.org/api-ref/0.99.5/interface_simple_audio_engine.html ,它非常简单!

整个实施最多需要20分钟!

===============>>#5 票数:1

在app delegate文件中初始化播放器并播放背景音乐。 只在app delegate中设置一个变量来检查音乐是真还是假......并且无需重新启动音乐就可以享受你的应用......

在你的代码中你初始化你的播放器在视图中做了加载和初始化方法...这就是你重启音乐的原因.....只需在app delegate applicationdidfinshLaunching()方法中调用它一次....

  ask by Mc.Lover translate from so

未解决问题?本站智能推荐:

2回复

调用rootViewController在内容视图(iOS)中切换视图

我正在为iOS制作一个非常简单的多视图应用程序,我一直在关注Apress书中的精彩教程。 我基本上已经将我的rootViewController实例化并与app delegate一起显示,并且我有许多内容viewControllers(6),我想根据用户输入交换进出。 但是,在本书中,他们使
1回复

iOS:播放声音效果时音乐不响

我正在尝试播放简短的音乐,但是当iPod正在播放和午餐时,应用程序的音乐会消失! 如何防止这种情况? 我正在使用AVAudioPlayer播放声音。 谢谢
4回复

切换启动视图控制器Xcode

例如,如果我有两个按钮,一个用于苹果,一个用于橙色,然后选择苹果,然后带我进入苹果屏幕。 每次我运行该应用程序时,如何才能立即进入苹果屏幕?
2回复

当应用程序在后台运行时,在iOS应用程序的锁定屏幕上添加图像

网站上有很多问题 以编程方式更改iOS锁定屏幕 , 如何在iPhone中以编程方式设置锁屏,壁纸和铃声? 如果我们修改锁定屏幕图像,所有人都会说苹果会拒绝。 但我在许多应用程序中看到过它。 示例Saavn在AppStore中。 在此情况下,如果正在播放歌曲并且设备已锁
2回复

在视图控制器之间随机切换-程序崩溃

我对编程不太了解,但是我仍然尝试做一个程序,例如您在View Controller 1中,按一个按钮,然后将您带到随机选择的View Controller,比如说View Controller 3和View Controller 3您可以按下另一个按钮,将您带到另一个随机选择的View Cont
2回复

在视图控制器之间切换时自动旋转

我在编程方面遇到了问题。 我有两个视图控制器。 第一个仅在横向左/右运行,另一个仅在纵向运行。 如果我在视图之间切换,方向不会自动改变。 只有当我转动设备时,方向才会改变。 之后,方向是固定的。 当我在控制器之间切换时,是否可以自动更改方向? 例如,当我在横向视图控制器中按Ba
1回复

使用AVAudioPlayer播放多首音乐

我试图播放他们应该用循环选项互相播放的2个音乐, 并播放第二音乐: 现在问题是我怎么能播放以前的音乐?
2回复

如何更改iOS Simulator SDK

可能重复: 如何更改ios SDK? 还有另一种方法可以将iOS模拟器SDK更改为“硬件”->“版本”吗? 感谢帮助。 编辑:终于我有了applescript
2回复

Google Drive SDK和iOS 5.1

SDK是与iOS 5兼容还是仅与iOS 6兼容? Google例程和iOS 6(模拟器和设备)一切都很好,但Xcode会返回iOS 5.1(模拟器和设备)的运行时错误。 我正在使用Xcode 4.5.2。 我已经检查了iOS部署目标。 它设置在5.1。 Google例证
2回复

在xcode 4.2上播放时没有背景音乐

我使用以下代码:mY Sound放在myapp / Shared Resources / background_music.aiff中 没有错误,也没有循环声。请告诉我发生了什么。 最好的祝福