It looks like your timer might not be firing consistently.  I would test
that first. I'm not sure what else is going on in your Application but if
there is any tracking then a timer will be blocked. If your timer isn't
firing as expected try adding it like this:

    NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 / 60.0 target:self
selector:@selector(moveBox) userInfo:nil repeats:1];
    [[NSRunLoop mainRunLoop]addTimer:timer forMode:NSRunLoopCommonModes];




On Sat, Mar 7, 2015 at 10:20 AM, Patrick J. Collins <
[email protected]> wrote:

> Hmmm... So yeah, I tried using a timer-- and strangely, it's similar to
> when I did the performSelectorOnMainThread...  The update only happens a
> handful of times and I don't get why...
>
>     self.timer = [NSTimer scheduledTimerWithTimeInterval:(1.0f / 60)
> target:self selector:@selector(updatePlayhead) userInfo:nil repeats:YES];
>
> For a 1.6 second audio clip, the callback is fired only 5 times..
>
> ??  Why is this happening?
>
> here is the actual code for my sample player:
> https://gist.github.com/patrick99e99/72712182158ecbfcbfea
>
> Patrick J. Collins
> http://collinatorstudios.com
>
>
> On Sat, 7 Mar 2015, Dave O'Neill wrote:
>
> >
> > ---------- Forwarded message ----------
> > From: Dave O'Neill <[email protected]>
> > Date: Sat, Mar 7, 2015 at 9:44 AM
> > Subject: Re: How does one update a view position during a core audio
> render callback?
> > To: "Patrick J. Collins" <[email protected]>
> >
> >
> > The simplest way to do is to just set a variable to your current time in
> your render callback.
> > And then employ a repeating timer to check that value and update your
> view on the main thread.
> > @implementation MyObject{
> >     float currentTime;
> > }
> >
> > OSStatus myRenderCallback{
> >     MyObject *object = (MyObject *)inRefCon;
> >     object->currentTime = CalculateTimeOnRenderThread(); //with no Obj-C
> messaging!
> > }
> >
> > -(void)myTimerCallback{
> >    self.playhead.position = currentTime;
> > }
> >
> > If you want it to refresh the currentTime faster than the render
> callback you should get the
> > mach_absolute_time() at the start of playing and again in your timer and
> calculate the difference.
> >
> > @implementation MyObject{
> >     UInt64 startMachTime;
> > }
> > // if you need accuracy get the mHostTime from your render callback
> > // otherwise do this
> >
> > -(void)startAudio{
> >    startMachTime = mach_absolute_time();
> > }
> >
> > -(void)myTimerCallback{
> >    UInt64 ticksSinceStart = mach_absolute_time() - startMachTime;
> >    self.playhead.position = convertTicksToSeconds(ticksSinceStart);
> > }
> >
> > A CADisplyLink is an excellent timer for this
> >
> > On Sat, Mar 7, 2015 at 9:17 AM, Patrick J. Collins <
> [email protected]> wrote:
> >       Hi,
> >
> >       So I have plotted out a waveform, and simply want to have a
> vertical
> >       line represent a playhead which will move across the waveform's
> X-axis
> >       as it plays.
> >
> >       I am using an NSBox as my playhead, and in my callback proc, I
> tried doing inside the
> >       loop:
> >
> >         player->sampler.playheadView.position =
> player->sampler.playheadView.containerWidth
> >       / player->buffer.size * currentSampleIndex
> >
> >       my playheadView's position setter just does this:
> >
> >       -(void)setPosition:(NSUInteger)position {
> >           if (position == self.position) return;
> >           [self setFrameOrigin:NSMakePoint(position, 0)];
> >       }
> >
> >       However, this causes everything to slow down to the point that the
> audio plays
> >       with clicks and gaps inbetween the frames..
> >
> >       I changed this to do a performSelectorOnMainThread, where this
> operation
> >       occurs, but it seems like the playhead only gets updated a handful
> of times
> >       during playback, so it does not look good..
> >
> >       What is the ideal way to get visual feedback like this during
> playback?
> >
> >       Thanks!
> >
> >       Patrick J. Collins
> >       http://collinatorstudios.com
> >
> >        _______________________________________________
> >       Do not post admin requests to the list. They will be ignored.
> >       Coreaudio-api mailing list      ([email protected])
> >       Help/Unsubscribe/Update your Subscription:
> >
> https://lists.apple.com/mailman/options/coreaudio-api/oneill707%40gmail.com
> >
> >       This email sent to [email protected]
> >
> >
> >
> >
> >
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to