Hey if you need a few examples of valid AudioStreamBasicDescriptions check out my library's helper functions: https://github.com/syedhali/EZAudio/blob/master/EZAudio/EZAudio.m#L184
I think reading the code and looking at the examples for EZAudio might help...at least that's why I wrote it :) <https://github.com/syedhali/EZAudio/blob/master/EZAudio/EZAudio.m#L184> On Friday, March 20, 2015, Dave O'Neill <[email protected]> wrote: > Here's a suitable AudioStreamBasicDescription for mono SInt16: > > > mSampleRate 44100.000000 > mFormatFlags kAudioFormatFlagIsSignedInteger | > kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked > | kAudioFormatFlagIsNonInterleaved > mFormatID kAudioFormatLinearPCM > mFramesPerPacket 1 > mBytesPerFrame 2 > mChannelsPerFrame 1 > mBitsPerChannel 16 > mBytesPerPacket 2 > > But, I think (not %100 sure) that the effect units want stereo floats: > > One way to get the right format is to do an AudioUnitGetProperty on the > input of the "downstream" unit and then set the output of the upstream unit > to that format; > > But here is a stere float one anyway: > > mSampleRate 44100.000000 > mFormatFlags kAudioFormatFlagIsFloat | > kAudioFormatFlagIsNonInterleaved | kAudioFormatFlagIsPacked > mFormatID kAudioFormatLinearPCM > mFramesPerPacket 1 > mBytesPerFrame 4 > mChannelsPerFrame 2 > mBitsPerChannel 32 > mBytesPerPacket 4 > > > > I was able to get an offline render going, I wasn't quite there in my > current project but knew I would be soon so I'm in the same boat. I found > a really good answer that sums it up on Stack Overflow: > http://stackoverflow.com/questions/15297990/core-audio-offline-rendering-genericoutput > > but I'll paste in the most relevant section here in case the link dies: > > AudioUnitRenderActionFlags flags = 0; > AudioTimeStamp inTimeStamp; > memset(&inTimeStamp, 0, sizeof(AudioTimeStamp)); > inTimeStamp.mFlags = kAudioTimeStampSampleTimeValid; > UInt32 busNumber = 0; > UInt32 numberFrames = 512; > inTimeStamp.mSampleTime = 0; > int channelCount = 2; > > int totFrms = MaxSampleTime; > while (totFrms > 0) > { > if (totFrms < numberFrames) > { > numberFrames = totFrms; > NSLog(@"Final numberFrames :%li",numberFrames); > } > else > { > totFrms -= numberFrames; > } > AudioBufferList *bufferList = > (AudioBufferList*)malloc(sizeof(AudioBufferList)+sizeof(AudioBuffer)*(channelCount-1)); > bufferList->mNumberBuffers = channelCount; > for (int j=0; j<channelCount; j++) > { > AudioBuffer buffer = {0}; > buffer.mNumberChannels = 1; > buffer.mDataByteSize = numberFrames*sizeof(AudioUnitSampleType); > buffer.mData = calloc(numberFrames, sizeof(AudioUnitSampleType)); > > bufferList->mBuffers[j] = buffer; > > } > CheckError(AudioUnitRender(mGIO, > &flags, > &inTimeStamp, > busNumber, > numberFrames, > bufferList), > "AudioUnitRender mGIO"); > > > > > } > > In my test demo I tried looping through some audio in multiple passes, if > you are going to do this you must increment the mSampleTime of the > AudioTimeStamp each render as per the documentation. > > Dave > > > > > > > > On Fri, Mar 20, 2015 at 8:55 PM, Patrick J. Collins < > [email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote: > >> Hi everyone, >> >> So a week or so has gone by, and I feel like I am getting nowhere (or at >> least close to nowhere) with my goal of being able to simply to: >> >> input buffer -> low pass -> new buffer >> >> Can anyone please please please help me? >> >> I have read pretty much all of Apple's documentation on this subject and >> I just do not understand so many things... >> >> At first I was trying to just use the default output so that I could at >> least hear the low pass happening.. Unfortunately all I hear is >> garbage... I figured it's because the asbd is wrong-- so I tried >> setting the asbd on the lowpass unit, and I get "-10868" when trying to >> set the stream format on the low pass unit's input scope or output >> scope... >> >> Then I tried to set the asbd on the output unit, and then I get error >> -50, which says a parameter is wrong-- but.. the parameters are not >> wrong! >> >> AudioStreamBasicDescription asbd; >> asbd.mSampleRate = 8000; >> asbd.mFormatID = kAudioFormatLinearPCM; >> asbd.mFormatFlags = kAudioFormatFlagIsSignedInteger; >> asbd.mFramesPerPacket = 1; >> asbd.mChannelsPerFrame = 1; >> asbd.mBitsPerChannel = 16; >> asbd.mBytesPerPacket = 2; >> asbd.mBytesPerFrame = 2; >> >> There should be absolutely nothing wrong with those parameters, so I >> don't understand why it's giving a -50 error... >> >> Regardless, I ultimately don't want to output to the hardward, I want to >> do a quick offline render to lowpass filter my buffer... So, I change >> my output description from kAudioUnitSubType_DefaultOutput to >> kAudioUnitSubType_GenericOytput >> >> And then suddenly my lowpass input render proc is not getting called-- >> which I assume is because I need to call AudioUnitRender... However, I >> cannot find any documentation or examples anywhere about how to >> correctly do this! >> >> Where do you call AudioUnitRender? I assume this needs to be in a loop, >> but-- clearly I don't want to manually call this in a loop myself... I >> tried adding a InputProc callback to my generic output unit, but it >> doesn't get called either. >> >> Here is my code: >> >> https://gist.github.com/patrick99e99/9221d8d7165d610fd3e1 >> >> I keep asking myself: Why is this so difficult?? Why is there so >> little information out on the internet about how to do this?? All I can >> find are a bunch of people asking some-what similar questions on >> stackoverflow that aren't similar enough to help answer my questions. >> Core audio has been around for a long time, and there are tons of apps >> doing this sort of thing, so I am just really surprised by the lack of >> information and available help for what seems like should be a simple >> thing to do.... >> >> How about if I try this: >> >> HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! >> >> Thank you! >> >> Patrick J. Collins >> http://collinatorstudios.com >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Coreaudio-api mailing list ([email protected] >> <javascript:_e(%7B%7D,'cvml','[email protected]');>) >> Help/Unsubscribe/Update your Subscription: >> >> https://lists.apple.com/mailman/options/coreaudio-api/oneill707%40gmail.com >> >> This email sent to [email protected] >> <javascript:_e(%7B%7D,'cvml','[email protected]');> > > > -- Syed Haris Ali *Website*: http://syedharisali.com <http://www.syedharisali.com> *Github*: https://github.com/syedhali
_______________________________________________ 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]
