Skip to content

Commit 8c38299

Browse files
committedJan 24, 2016
Added bug fix for properly setting the EZMicrophone's bufferByteSize
1 parent a4ea920 commit 8c38299

File tree

1 file changed

+37
-12
lines changed

1 file changed

+37
-12
lines changed
 

‎EZAudio/EZMicrophone.m

+37-12
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,9 @@ - (void)setAudioStreamBasicDescription:(AudioStreamBasicDescription)asbd
430430
numberOfChannels:self.info->streamFormat.mChannelsPerFrame];
431431
}
432432

433-
// set new stream format
433+
//
434+
// Set new stream format
435+
//
434436
self.info->streamFormat = asbd;
435437
[EZAudioUtilities checkResult:AudioUnitSetProperty(self.info->audioUnit,
436438
kAudioUnitProperty_StreamFormat,
@@ -447,18 +449,21 @@ - (void)setAudioStreamBasicDescription:(AudioStreamBasicDescription)asbd
447449
sizeof(asbd))
448450
operation:"Failed to set stream format on output scope"];
449451

450-
// allocate float buffers
452+
//
453+
// Allocate scratch buffers
454+
//
451455
UInt32 maximumBufferSize = [self maximumBufferSize];
452456
BOOL isInterleaved = [EZAudioUtilities isInterleaved:asbd];
453457
UInt32 channels = asbd.mChannelsPerFrame;
454458
self.floatConverter = [[EZAudioFloatConverter alloc] initWithInputFormat:asbd];
455459
self.info->floatData = [EZAudioUtilities floatBuffersWithNumberOfFrames:maximumBufferSize
456460
numberOfChannels:channels];
457461
self.info->audioBufferList = [EZAudioUtilities audioBufferListWithNumberOfFrames:maximumBufferSize
458-
numberOfChannels:channels
459-
interleaved:isInterleaved];
460-
461-
// notify delegate
462+
numberOfChannels:channels
463+
interleaved:isInterleaved];
464+
//
465+
// Notify delegate
466+
//
462467
if ([self.delegate respondsToSelector:@selector(microphone:hasAudioStreamBasicDescription:)])
463468
{
464469
[self.delegate microphone:self hasAudioStreamBasicDescription:asbd];
@@ -528,10 +533,14 @@ - (void)setDevice:(EZAudioDevice *)device
528533
operation:"Couldn't set default device on I/O unit"];
529534
#endif
530535

531-
// store device
536+
//
537+
// Store device
538+
//
532539
_device = device;
533540

534-
// notify delegate
541+
//
542+
// Notify delegate
543+
//
535544
if ([self.delegate respondsToSelector:@selector(microphone:changedDevice:)])
536545
{
537546
[self.delegate microphone:self changedDevice:device];
@@ -603,15 +612,27 @@ static OSStatus EZAudioMicrophoneCallback(void *inRefCon,
603612
EZMicrophone *microphone = (__bridge EZMicrophone *)inRefCon;
604613
EZMicrophoneInfo *info = (EZMicrophoneInfo *)microphone.info;
605614

606-
// render audio into buffer
615+
//
616+
// Make sure the size of each buffer in the stored buffer array
617+
// is properly set using the actual number of frames coming in!
618+
//
619+
for (int i = 0; i < info->audioBufferList->mNumberBuffers; i++) {
620+
info->audioBufferList->mBuffers[i].mDataByteSize = inNumberFrames * info->streamFormat.mBytesPerFrame;
621+
}
622+
623+
//
624+
// Render audio into buffer
625+
//
607626
OSStatus result = AudioUnitRender(info->audioUnit,
608627
ioActionFlags,
609628
inTimeStamp,
610629
inBusNumber,
611630
inNumberFrames,
612631
info->audioBufferList);
613632

614-
// notify delegate of new buffer list to process
633+
//
634+
// Notify delegate of new buffer list to process
635+
//
615636
if ([microphone.delegate respondsToSelector:@selector(microphone:hasBufferList:withBufferSize:withNumberOfChannels:)])
616637
{
617638
[microphone.delegate microphone:microphone
@@ -620,10 +641,14 @@ static OSStatus EZAudioMicrophoneCallback(void *inRefCon,
620641
withNumberOfChannels:info->streamFormat.mChannelsPerFrame];
621642
}
622643

623-
// notify delegate of new float data processed
644+
//
645+
// Notify delegate of new float data processed
646+
//
624647
if ([microphone.delegate respondsToSelector:@selector(microphone:hasAudioReceived:withBufferSize:withNumberOfChannels:)])
625648
{
626-
// convert to float
649+
//
650+
// Convert to float
651+
//
627652
[microphone.floatConverter convertDataFromAudioBufferList:info->audioBufferList
628653
withNumberOfFrames:inNumberFrames
629654
toFloatBuffers:info->floatData];

0 commit comments

Comments
 (0)
Please sign in to comment.