• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Fwd: How does one update a view position during a core audio render callback?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fwd: How does one update a view position during a core audio render callback?


  • Subject: Fwd: How does one update a view position during a core audio render callback?
  • From: "Dave O'Neill" <email@hidden>
  • Date: Sat, 07 Mar 2015 09:44:32 -0800


---------- Forwarded message ----------
From: Dave O'Neill <email@hidden>
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@hidden>


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@hidden> 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@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Fwd: How does one update a view position during a core audio render callback?
      • From: "Patrick J. Collins" <email@hidden>
References: 
 >How does one update a view position during a core audio render callback? (From: "Patrick J. Collins" <email@hidden>)

  • Prev by Date: How does one update a view position during a core audio render callback?
  • Next by Date: Re: Fwd: How does one update a view position during a core audio render callback?
  • Previous by thread: How does one update a view position during a core audio render callback?
  • Next by thread: Re: Fwd: How does one update a view position during a core audio render callback?
  • Index(es):
    • Date
    • Thread