2013-10-28 8 views
7

Ich habe gerade begonnen, iOS-Apps mit xCode zu programmieren und es ist nicht sehr einfach und intuitiv zu finden, wie die Dinge funktionieren. Ich bin sehr neu in diesem und meine App geht sehr langsam ^^. Wie auch immer, ich versuche jetzt zumindest Dinge auf iOS7.iOS 7: Einfache Audio-Steuerung mit AVAudioPlayer?

Ich habe es geschafft, dynamische Tabellen mit Zollzellen und dynamischer Höhe zu erstellen, aber jetzt finde ich keine Lösung für mein Problem ... Vielleicht habe ich nicht am richtigen Ort gesucht ... jedenfalls.

Ich habe eine Audio-Wiedergabe, dank dieser Zeilen:

NSString *path = [[NSBundle mainBundle] pathForResource:@"song" ofType:@"mp3"]; 
AVAudioPlayer *audio = [[AVAudioPlayer alloc] 
initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; 

[audio play]; 
[audio updateMeters]; 

Nun, das ist großartig, meine Hörspielen. Aber ich habe keine Kontrollen. Ich habe erfolgreich eine Play/Pause-Taste hinzugefügt, aber wie navigiere ich innerhalb des Audios? Muss ich die gesamte Schnittstelle codieren? Es gibt keine einfache Schnittstelle mit einer Schaltfläche und einem responsiven Fortschrittsbalken?

Und wenn ich es code, gut, hum ... wo fange ich an?

Vielen Dank!

+0

Wenn Sie Tasten wollen die Musik zu steuern, einen Wasch Schieber, Lautstärkeregler usw. Sie brauchen, um sie selbst und ihre entsprechenden Methoden zu erstellen. Sie werden wahrscheinlich "NSTimer" sehen wollen, wenn Sie auch einen Scrubbing-Schieberegler erstellen möchten. – sooper

Antwort

17

Verwenden Sie ein UISlider mit AVAudioPlayer playAtTime: Methode, es gibt keine integrierte Suchleiste für AVAudioPlayer.

prüft diesen Beispielcode aus, implementiert es das, was Sie in der Klasse wollen avTouchController

https://developer.apple.com/library/ios/samplecode/avTouch/Introduction/Intro.html

einen UISlider fügen Sie die valuechanged Schnittstelle und verknüpfen: die Methode seekTime:

in. h

@property (nonatomic, weak) IBOutlet UISlider *seekbar; 

@property (nonatomic, strong) AVAudioPlayer *audioPlayer; 

@property (nonatomic, strong) NSTimer *updateTimer; 

in .m in viewDidLoad nach AVAudioPlayer Laden

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"There's A Long, Long Trail A-Winding" ofType:@"mp3"]]; 

AVAudioPlayer *audio = [[AVAudioPlayer alloc] 
         initWithContentsOfURL:fileURL error:nil]; 

self.audioPlayer = audio; 

self.seekbar.minimumValue = 0; 

self.seekbar.maximumValue = self.audioPlayer.duration; 

[[self audioPlayer] play]; 

self.updateTimer =  [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateSeekBar) userInfo:nil repeats:YES] 

und fügen Sie die folgende Methode

- (void)updateSeekBar{ 
float progress = self.audioPlayer.currentTime; 
[self.seekbar setValue:progress]; 
} 

- (IBAction)seekTime:(id)sender { 

self.audioPlayer.currentTime = self.seekbar.value; 

} 
+0

kein Link ist in Ihrer Antwort zur Verfügung gestellt ... – sergio

+0

Ups, hinzugefügt, jetzt. Es ist wirklich einfach zu implementieren, lassen Sie sich jedoch nicht von dem ganzen zusätzlichen Code verzaubern (AVAudioSession) – ManicMonkOnMac

+0

wow, ja, es scheint ein bisschen hart zu sein: P ... aber ich brauche den Pegelmesser, die Schleife und diese nicht Art von Dingen. Nur Play/Pause und die responsive "Timeline". Ich werde versuchen, dies umzusetzen. Ich hoffe, ich kann bald mit etwas kommen! danke – rekam

2
Play audio and update UISlider with it. 

-(void)viewWillAppear:(BOOL)animated 
{  
    NSString *soundFile=[[NSBundle mainBundle] pathForResource:@"name of your audio file." ofType:@".mp3"]; 

    NSURL *soundFileUrl=[NSURL fileURLWithPath:soundFile]; 
    soundPlayer=[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileUrl error:nil]; 

    [soundPlayer prepareToPlay]; 
    soundPlayer.delegate=self; 


    slider.maximumValue=[soundPlayer duration]; 
    slider.minimumValue=0.0; 
    soundPlayer.currentTime=slider.value; 

    [soundPlayer play]; 

    [self startTimer]; 
} 

#pragma mark Timer Methods 

- (void)startTimer 
{ 

    timerForPlaying= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateSlider) userInfo:nil repeats:YES]; 
} 

- (void)stopTimer 
{ 
    [timerForPlaying invalidate]; 
    timerForPlaying = nil; 
} 

// This method for updating UISlider when sound start to play. 
- (void)updateSlider 
{ 
    [slider setValue:soundPlayer.currentTime animated:NO]; 
    startTime=slider.value; 
} 

// When we adjust sound according to slider value connect this method to your slider value change event. 

-(void)valueChange:(id)sender 
{ 
    soundPlayer.currentTime=slider.value; 

} 
+0

Was passiert, wenn wir Audio pausieren? –