• 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: Seeking advice for modifying audio input source
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Seeking advice for modifying audio input source


  • Subject: RE: Seeking advice for modifying audio input source
  • From: Waverly Edwards <email@hidden>
  • Date: Thu, 8 Jun 2017 22:00:36 +0000
  • Thread-topic: Seeking advice for modifying audio input source

>>
To answer re “drive audio source(1) using audio source(2)” - have you tried
using AudioUnitAddRenderNotify()

Recently, as a test, I successfully sub-classed and used AVAudioUnitEffect with
the following init:
<<

I had not considered using AudioUnitAddRenderNotify() because I’ve been unsure
of a safe place to use it.
It actually took me weeks to figure out how to use a callback on the input node
but seeing your response has revived my interest.  Why did it take weeks?  I
don’t know if this is a bug or just different behavior for iOS versus MacOS but
95% of the time, my code would crash, so after repeatedly getting BAD_EXEC
errors in the debugger, I tracked the issue to a single line.  What I found is
that it I needed to pass the retained reference to self to the callback on
MacOS.


AudioUnitAddRenderNotify(testNode!, renderCallback,
Unmanaged.passUnretained(self).toOpaque()) # This works on iOS (passUnretained)

AudioUnitAddRenderNotify(testNode!, renderCallback,
Unmanaged.passRetained(self).toOpaque())  # This works on MacOS Sierra
(passRetained)


During my research weeks ago, I came across this thread
https://forums.developer.apple.com/thread/72674
This mostly waived me off from subclassing AVAudioUnitEffect but I had been
thinking about it A LOT yesterday – wondering if I should do it anyway or use
AUAudioUnit.
I was concerned that all properties and methods may not be present that I
needed or that when I performed a super init, there would be an unpleasant
surprise by something additional that I didn’t want.

Again, seeing this response has also renewed my interest in subclassing and I
think that I will subclass AVAudioUnitEffect and if I’m successful, I will
pursue subclassing AUAudioUnit

BTW, I love your mission and values statement.

Thank you VERY much,

W.


From: Leo Thiessen [mailto:email@hidden]
Sent: Wednesday, June 07, 2017 3:58 PM
To: email@hidden
Subject: Re: Seeking advice for modifying audio input source

Hello W.,

To answer re “drive audio source(1) using audio source(2)” - have you tried
using AudioUnitAddRenderNotify()

Recently, as a test, I successfully sub-classed and used AVAudioUnitEffect with
the following init:

- (instancetype)init {
    AudioComponentDescription component =
VEComponentDescriptionMake(kAudioUnitManufacturer_Apple,

kAudioUnitType_Effect,

kAudioUnitSubType_PeakLimiter);
    if ( (self=[super initWithAudioComponentDescription:component]) ) {
        _audioUnit = self.audioUnit;
        _didAddRenderNotify =
VECheckOSStatus(AudioUnitAddRenderNotify(_audioUnit,

VEAVLimiterRenderCallback,

(__bridge void * _Nullable)(self)),
                                              "AudioUnitAddRenderNotify");
    }
    return self;
}


…with a render function like:

OSStatus VEAVLimiterRenderCallback(void *inRefCon,
                          AudioUnitRenderActionFlags *ioActionFlags,
                          const AudioTimeStamp *inTimeStamp,
                          UInt32 inBusNumber,
                          UInt32 inNumberFrames,
                          AudioBufferList *ioData) {
    if ((*ioActionFlags & kAudioUnitRenderAction_PostRender) && (inRefCon)) {
        __unsafe_unretained VEAVLimiter * THIS = (__bridge
VEAVLimiter*)inRefCon;
        // This is essentially a “tap” do something, e.g. here you could do
some calculations such as
        // determine peak amplitude, or whatever, then store those values and
use them to do something like
        // “modulate" the “pan” on the source(1) AVAudioNode
    }
    return noErr;
}

If I understand you correctly, I think this could work.

Kind regards,
Leo Thiessen
http://visionsencoded.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

References: 
 >Re: Seeking advice for modifying audio input source (From: Leo Thiessen <email@hidden>)

  • Prev by Date: Re: Seeking advice for modifying audio input source
  • Next by Date: Re: Seeking advice for modifying audio input source
  • Previous by thread: Re: Seeking advice for modifying audio input source
  • Next by thread: Re: Seeking advice for modifying audio input source
  • Index(es):
    • Date
    • Thread