• 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
Re: How to setup the sample rate in an AUGraph
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to setup the sample rate in an AUGraph


  • Subject: Re: How to setup the sample rate in an AUGraph
  • From: Laurent Noudohounsi <email@hidden>
  • Date: Sat, 22 Jul 2017 14:51:35 +0200

Brian thank you so much for your quick and clear answer.

So to set the right stream format, I just need to connect the audio units
and only after I could do

AudioUnitSetProperty(
audio_unit_,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Global,
0,
&my_stream_format,
sizeof(my_stream_format);

or even AudioUnitSetProperty(
audio_unit_,
kAudioUnitProperty_SampleRate,
kAudioUnitScope_Global,
0,
&new_sample_rate,
sizeof(new_sample_rate);

Indeed it worked, I didn’t manage to make it working before because I used
theses functions before the connections between the nodes…

I think I use the default sample rate and convert every AUFilePlayer. But, :
1°) what do I need to use to have the AUFilePlayer providing sample rate
conversion? Is it an other audio unit connected to the output of the
AUFilePlayer?
2°) does this approach is expensive?





And since you told me that using a callback and tracking the frames wasn’t
a good solution, what’s your option to know when the end of a file is
reached?

I don’t see any callback called at the end, and using mSamplingTime is not
accurate since when I pause the AUFilePlayer I just set the field
`mFramesToPlay` of an ScheduledAudioFileRegion to 0.
Indeed since I use an AUGraph, I start this one only once so all my audio
unit are rendering every time and when i want to pause one I use the trick
I described. I do this because I manage to stop one with `AudioUnitReset`
but I don’t see any other function to play except `AudioUnitRender`but ask
many parameters that I don’t have like `AudioBufferList* ioData` since I
use AUGraph to handle it…

2017-07-20 22:27 GMT+02:00 Brian Willoughby <email@hidden>:

>
> On Jul 20, 2017, at 4:02 AM, Laurent Noudohounsi <
> email@hidden> wrote:
> > But I've some question about the behaviour of a custom callback within
> an AUGraph.
> > Indeed, I've the feeling that the AUGraph use default settings for the
> callback options. Like all the graph is in 44100kHz with 2 channels.
>
> Yes, the documentation states that all AudioUnits have 44.1kHz stereo
> 32-bit float as the format. You must change the format after connecting all
> nodes, but before starting the graph. Note that each AU has both an input
> format and an output format. Those should all be set (there are some
> shortcuts, but when in doubt set them all).
>
>
> > I use a file with a sampling rate of 11025 (= 1/4 * 441000). The
> callback tell me that the frame position reach the number of frames too
> early. For a 16sec file, I reach the end at 4sec (btw the 1/4 of 16sec)
>
> It seems that 99% of your problem is the mismatch of sample rates.
> However, even after you solve this problem you should be wary of using this
> technique for file playback. The FilePlayer AudioUnit will still load from
> your file in advance of the playback time, which can lead to your code
> reacting too early. You need to account for the latency of your graph, and
> not stop the audio until all the samples are flushed. If you do not do
> this, your code will cut off the end of the audio file, which won't be
> heard. In other words, even after you get rid of the 1/4 rate error, you
> will still see the frame position reach the number of frames too early.
>
>
> > So how can I handle this problem? Can I set global setting to the
> AUGraph or should I set the format for every audio units?
>
> There is no global setting for an AUGraph with regard to sample rate or
> bit depth. A global setting is impossible because some nodes can have
> sample rate conversion, such that their input and output are different.
>
> You need to choose either 44.1 kHz or 11.025 kHz, and then set all of the
> AU nodes to have your chosen rate on both input and output. If you run your
> graph at 44.1 kHz, then the FilePlayer should provide sample rate
> conversion. If you run your graph at 11.025 kHz, then your output AU will
> handle conversion to the hardware sample rate.
>
> Brian Willoughby
>
>
 _______________________________________________
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

References: 
 >How to setup the sample rate in an AUGraph (From: Laurent Noudohounsi <email@hidden>)
 >Re: How to setup the sample rate in an AUGraph (From: Brian Willoughby <email@hidden>)

  • Prev by Date: RE: EXS24/SF2 sample limits on iOS
  • Next by Date: Re: why is ExtAudioFileSetProperty raises c++ exception?
  • Previous by thread: Re: How to setup the sample rate in an AUGraph
  • Next by thread: What's the correct way to measure latency of audio input and output?
  • Index(es):
    • Date
    • Thread