Nathan Cleary
Nathan Cleary

Reputation: 653

Audio in my App, play pause slider

Guys I'm getting errors with incorporating the UISlider into my audio app, any advice would be great, this is my first app and I'm a newbie...

The track plays fine, stops fine but when I try and skip the app crashes out, I'm sure I've missed something out, just need some fresh eyes on the code, hope someone can advise...

NoGraceViewController.h

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

@interface NoGraceViewController : UIViewController<AVAudioPlayerDelegate> {
    AVAudioPlayer *audioPlayer;
    UISlider *volumeControl;
}

@property(nonatomic,retain)IBOutlet UISlider *volumeControl;
@property(nonatomic,retain) AVAudioPlayer *audioPlayer;
@property (weak, nonatomic) IBOutlet UITextField *timeLabel;
@property (weak, nonatomic) IBOutlet UISlider *skipSlider;

-(IBAction) nograceButton;

-(IBAction)playbutton;

-(IBAction)stopbutton;

-(IBAction)skipSliderMoved;

@end

NoGraceViewController.m

#import "NoGraceViewController.h"

@interface NoGraceViewController ()

@end

@implementation NoGraceViewController
@synthesize skipSlider;
@synthesize timeLabel;

-(IBAction) nograceButton { 
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"http://itunes.apple.com/us/album/no-grace-original-mix-single/id392597812?uo=4"]];
}

@synthesize audioPlayer;

- (IBAction)playbutton
{
    [audioPlayer play];

}

-(IBAction)stopbutton
{
    [audioPlayer stop];
}

- (IBAction)skipSliderMoved:(UISlider *)sender {
    self.audioPlayer.currentTime = self.audioPlayer.duration*sender.value;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL *url=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"001.mp3" ofType:nil]];

    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
    if (error)
    {
        NSLog(@"Error in audioPlayer: %@", 
              [error localizedDescription]);
    } else {
        audioPlayer.delegate = self;
        [audioPlayer prepareToPlay];
    }

}

- (void)viewDidUnload {
    [self setSkipSlider:nil];
    [self setTimeLabel:nil];

    self.volumeControl=nil;
    self.audioPlayer=nil;
}

-(void)updateDisplay { 
    self.skipSlider.value = self.audioPlayer.currentTime / self.audioPlayer.duration; 
    NSString *timeString = [[NSString alloc] initWithFormat:@"%d:%02d", (int)   self.audioPlayer.currentTime / 60,(int) self.audioPlayer.currentTime % 60];
    self.timeLabel.text = timeString;
}

@end

Upvotes: 0

Views: 572

Answers (1)

Guntis Treulands
Guntis Treulands

Reputation: 4762

Try this:

self.audioPlayer.currentTime = (self.audioPlayer.duration / 100) * sender.value;

Upvotes: 1

Related Questions