2013-07-03 2 views
0

Это возможно только для того, чтобы предоставить AVAudioPlayer URL-адрес файла для воспроизведения через его метод init. И, насколько я понимаю, если вы хотите воспроизвести другой файл, старый экземпляр должен быть остановлен от игры, а новый экземпляр AVAudioPlayer инициализирован URL-адресом нового аудиофайла для воспроизведения.iOS: AVAudioPlayer может воспроизводить только один файл?

Но это сложно сделать. У меня есть контроллер навигации, и когда пользователь покидает экран плеера, звук должен продолжать играть, и это происходит. Но когда пользователь выбирает новый звуковой файл для воспроизведения из таблицы, новый экземпляр viewController и AVAudioPlayer инициализируется, и я не могу остановить старое от игры. Как мне это сделать?

+0

Вам нужно отслеживать «AVAudioPlayer» где-то (и поскольку вы хотите играть только по одному файлу за раз, вам нужно отслеживать только один * AVAudioPlayer), либо в одноэлементном, делете приложения, например ответ, предложенный, или в виде таблицы. –

ответ

0

Вы можете сделать что-то вроде этого

В файле v1AppDelegate.h добавить,

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

@interface v1AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    AVAudioPlayer *myAudioPlayer; 
} 
@property (nonatomic, retain) AVAudioPlayer *myAudioPlayer; 
@property (strong, nonatomic) UIWindow *window; 

@end 

Теперь в файле v1AppDelegate.m добавить

#import "v1AppDelegate.h" 
#import <AVFoundation/AVFoundation.h> 
#include <AudioToolbox/AudioToolbox.h> 

@implementation v1AppDelegate 

@synthesize window = _window; 
@synthesize myAudioPlayer; 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    //start a background sound 
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Startsound" ofType: @"m4a"]; 
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath ];  
    myAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; 
    myAudioPlayer.numberOfLoops = -1; //infinite loop 
    [myAudioPlayer play]; 


    // Override point for customization after application launch. 
    return YES; 
} 

Если вы хотите, чтобы остановить или начать эту музыку из любого места в вашем коде, а затем просто добавьте это

#import "v1AppDelegate.h"  
- (IBAction)stopMusic 
{ 
    v1AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    [appDelegate.myAudioPlayer stop]; 
} 

- (IBAction)startMusic 
{ 
    v1AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    [appDelegate.myAudioPlayer play]; 
} 
+0

Но "NSString * soundFilePath = [[NSBundle mainBundle] pathForResource: @" Startsound "ofType: @" m4a "];" Теперь он будет воспроизводить только «Startsound», так как URL-адрес не может быть изменен –

Смежные вопросы