![]()
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController : UIViewController<AVAudioPlayerDelegate>
@property (weak, nonatomic) IBOutlet UILabel *averageLabel;
@property (weak, nonatomic) IBOutlet UILabel *peakLabel;
@property (weak, nonatomic) IBOutlet UISlider *rateSlider;
@property (weak, nonatomic) IBOutlet UISlider *panSlider;
@property (weak, nonatomic) IBOutlet UISlider *volumeSlider;
@property (strong, nonatomic) AVAudioPlayer *player;
- (IBAction)updateRate:(id)sender;
- (IBAction)updatePan:(id)sender;
- (IBAction)updateVolume:(id)sender;
- (IBAction)playVibrateSound:(id)sender;
- (IBAction)startPlayer:(id)sender;
- (IBAction)pausePlayer:(id)sender;
@end
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize averageLabel;
@synthesize peakLabel;
@synthesize rateSlider;
@synthesize panSlider;
@synthesize volumeSlider;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *fileName = @"midnight-ride"; // Change this to your own file
NSString *fileType = @"mp3";
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSError *error;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:&error];
if (error)
{
NSLog(@"Error creating the audio player: %@", error);
}
self.player.enableRate = YES; //Allows us to change the playback rate.
self.player.meteringEnabled = YES; //Allows us to monitor levels
self.player.delegate = self;
self.volumeSlider.value = self.player.volume;
self.rateSlider.value = self.player.rate;
self.panSlider.value = self.player.pan;
[self.player prepareToPlay]; //Preload audio to decrease lag
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateLabels) userInfo:nil repeats:YES];
}
-(void)updateLabels
{
[self.player updateMeters];
self.averageLabel.text = [NSString stringWithFormat:@"%f", [self.player averagePowerForChannel:0]];
self.peakLabel.text = [NSString stringWithFormat:@"%f", [self.player peakPowerForChannel:0]];
}
- (IBAction)updateRate:(id)sender
{
self.player.rate = self.rateSlider.value;
}
- (IBAction)updatePan:(id)sender
{
self.player.pan = self.panSlider.value;
}
- (IBAction)updateVolume:(id)sender
{
self.player.volume = self.volumeSlider.value;
}
- (IBAction)playVibrateSound:(id)sender
{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
- (IBAction)startPlayer:(id)sender
{
[self.player play];
}
- (IBAction)pausePlayer:(id)sender
{
[self.player pause];
}
-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
NSLog(@"Error playing file: %@", error);
}
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags
{
if (flags == AVAudioSessionInterruptionOptionShouldResume)
{
[self.player play];
}
}