RIFF/WAV is a little-endian format.

On Thu, Jan 14, 2016 at 11:16 PM, Alexander Bollbach <
[email protected]> wrote:

> thanks for the response.  I will consider a convenience function.  When
> you write convenience functions such as one like that, do you use it across
> multiple projects?  If so, do you do anything to facilitate that?  Just
> create a .c,.h and import the headers wherever?  just curious.   So I was
> finally able to get the audio file to write the data.  I played back the
> file in finder and heard my voice sound checking and it was glorious.
>
> I got it to work by  changing the file type enum to CAF.  I guess that my
> ASBD was not compatible with a wav file format although i'm not certain
> about that.  Here was what I was using with wav and am now successfully
>  passing in as the inStreamDesc when creating the ExtAudioFile.
>
> // asbd for audiofile
> AudioStreamBasicDescription fmt;
> fmt.mSampleRate = 44100.0;
> fmt.mFormatID = kAudioFormatLinearPCM;
> fmt.mFormatFlags = kAudioFormatFlagIsBigEndian |
> kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
> fmt.mBytesPerPacket = 4;
> fmt.mFramesPerPacket = 1;
> fmt.mBytesPerFrame = 4;
> fmt.mChannelsPerFrame = 2;
>
> My guess is that there is something in this that isn't compatible with the
> wav file formatting structure.  Still, it'd be nice not to have to
> construct this at all.  Passing in a reference to the audio stream that I
> have in my struct (which comes from the audio unit) also results in a fmt?
> error.  That stream is obtained like so:
>
>
> // set sample rate between input and output scopes equal and assign stream
> to player struct
>
>  propertySize = sizeof (AudioStreamBasicDescription);
>
>    CheckError(AudioUnitGetProperty(player->inputUnit,
>
>                                    kAudioUnitProperty_StreamFormat,
>
>                                    kAudioUnitScope_Output,
>
>                                    inputBus,
>
>                                    &player->streamFormat,
>
>                                    &propertySize), "Couldn't get ASBD from
> input unit");
>
>
>
>    AudioStreamBasicDescription deviceFormat;
>
>    CheckError(AudioUnitGetProperty(player->inputUnit,
>
>                                    kAudioUnitProperty_StreamFormat,
>
>                                    kAudioUnitScope_Input,
>
>                                    inputBus,
>
>                                    &deviceFormat,
>
>                                    &propertySize), "Couldn't get ASBD from
> input unit");
>
>
>
>    player->streamFormat.mSampleRate = deviceFormat.mSampleRate;
>
>
>
>    propertySize = sizeof (AudioStreamBasicDescription);
>
>    CheckError(AudioUnitSetProperty(player->inputUnit,
>
>                                    kAudioUnitProperty_StreamFormat,
>
>                                    kAudioUnitScope_Output,
>
>                                    inputBus,
>
>                                    &player->streamFormat,
>
>                                    propertySize), "Couldn't set ASBD on
> input unit");
>
> I'm sure there is something in that as well that is not capable with the
> wav format.  Anyway, CAF files are suitable for now.  I would still like to
> know why WAV was such an issue.
>
>
>
> fmt.mBitsPerChannel = 16;
>
> On Thu, Jan 14, 2016 at 9:53 PM Christian Rober <[email protected]>
> wrote:
>
>> Alexander,
>>
>> Let's definitely try to resolve that error first...  If you are getting
>> that error from ExtAudioFileCreateWithURL then my guess is that the ASBD
>> you are passing in does not match the enum type you are also passing in.
>> In other words, if you pass kAudioFileWAVEType to the create function,
>> then your ASBD should probably look something like this:
>>
>> {
>>
>>   AudioStreamBasicDescription streamDescription = {0};
>>
>>   Float64 sampleRate                  = 44100;
>>
>>   int channels                        = 2; // Do you want Stereo?
>>
>>   streamDescription.mSampleRate = sampleRate;
>>
>>   streamDescription.mFormatID    = kAudioFormatLinearPCM;
>>
>>   streamDescription.mFormatFlags  = kLinearPCMFormatFlagIsSignedInteger |
>> kAudioFormatFlagIsPacked;
>>
>>   streamDescription.mBytesPerPacket  = 4;
>>
>>   streamDescription.mFramesPerPacket  = 1;
>>
>>   streamDescription.mBytesPerFrame  = 4;
>>
>>   streamDescription.mChannelsPerFrame = channels;
>>
>>   streamDescription.mBitsPerChannel = 16;
>>
>> }
>>
>> That is just one way to do it (bordering on too manual IMO).  I thought
>> there were handy MACROS for this in the SDK but maybe I am conflating that
>> with something else...
>>
>> Minor related suggestion: consider creating this ASBD as a return value
>> from a static function, it may be handy in the future... it was for me.
>>
>> Lastly, and just for completeness: In terms of the client property, it
>> should probably match the audio buffers you intend to pass into the
>> WriteAsync functions and not necessarily the format of the WAV file
>> itself.  In your snippet you seem to be re-using the ASBD, which may not
>> always apply.
>>
>> --Christian
>> On Thu, Jan 14, 2016 at 7:43 PM, Alexander Bollbach <
>> [email protected]> wrote:
>>
>>> Thank you for the help.
>>>
>>> Fokke,  I have since changed the way i set the stream for my audio
>>> file.  You can that in this gist
>>> <https://gist.github.com/AlexanderBollbach/3b862db17adf240928f8>.
>>>
>>> Christian, I have tried setting that property but since doing that I am
>>> now unable to create the audiofile.  In fact that might have been the
>>> problem to begin with as I was not checking the OSStatus of
>>>
>>> ExtAudioFileCreateWithURL.  I now see that I get a 'fmt?'  ..  but if
>>> you take a look at that Gist I have no idea what could be the reason.  In
>>> the convenience function CreateInputUnit I get the stream off the audio
>>> unit and set it as a member var in my struct.  This is what I use to
>>> instantiate the ext audiofile but it doesn't seem to like the stream/'fmt'.
>>>
>>> On Thu, Jan 14, 2016 at 3:19 PM Fokke de Jong <[email protected]>
>>> wrote:
>>>
>>>> HI Alexander,
>>>>
>>>> I just answered you on stack exchange, it think there is something
>>>> wrong with your stream description. There might be more, but you should
>>>> check that first.
>>>>
>>>> best,
>>>> Fokke
>>>>
>>>>
>>>> On Jan 14, 2016, at 17:31 , Alexander Bollbach <
>>>> [email protected]> wrote:
>>>>
>>>> no one?
>>>>
>>>> On Wed, Jan 13, 2016 at 5:47 PM Alexander Bollbach <
>>>> [email protected]> wrote:
>>>>
>>>>> I am still unable to write audio samples from my AUHAL's input
>>>>> callback to a file.  I have tried a number of things including using the
>>>>> asynchronous version of writing to an audio file in ExtAudioFileServices.
>>>>> Even wrapping the call in a dispatch queue in fear that it was going out 
>>>>> of
>>>>> scope.  Even though it is probably some small obvious thing that is 
>>>>> missing
>>>>> (i'm only a few months into using core audio) I posted a stack
>>>>> question
>>>>> <http://stackoverflow.com/questions/34714832/writing-bytes-to-audio-file-using-auhal-audio-unit>
>>>>>  about
>>>>> it.  Apparently other uses have gotten the  (-50) error.  That is indeed
>>>>> the error I get.  (you can run the GitHub Repo
>>>>> <https://github.com/AlexanderBollbach/AUHAL_Recorder> in xcode to
>>>>> verify this).  I've been casually trying to get this to work over the past
>>>>> few days and I'm not getting any results.  Any idea what I might be doing
>>>>> wrong?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>> 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/fokkedejong%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/recapitch%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/paul%40linuxaudiosystems.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