ios - Trying to understand why mDataByteSize property of AudioBuffer is changing -
i have following code i'm using read contents of wav file sint16 array:
audiobufferlist *buffers; uint32 ablsize = offsetof(audiobufferlist, mbuffers) + (sizeof(audiobuffer) * 1); buffers = malloc(ablsize); buffers->mnumberbuffers = 1; buffers->mbuffers[0].mnumberchannels = 1; buffers->mbuffers[0].mdatabytesize = databytesize; uint32 datasize = (uint32)filelengthframes * sizeof(sint16); self.extractedsamples = malloc(datasize); self.extractedbytecount = databytesize; uint32 totalframesread = 0; { uint32 framesread = (uint32)filelengthframes - totalframesread; buffers->mbuffers[0].mdata = self.extractedsamples + (totalframesread * sizeof(sint16)); extaudiofileread(eaf, &framesread, buffers); totalframesread += framesread; } while (totalframesread < filelengthframes); free(buffers); this working fine files of < 0.5 seconds duration. longer file i'm testing, app crashes bad access error inside do loop. file, databytesize 60472, , @ start of loop buffer->mbuffers[0].mdatabytesize 60472. when crash occurs, see buffer->mbuffers[0].mdatabytesize has changed 57300, presumably why crash occurring.
anybody know how/why value changing in middle of loop? 1 guess have i'm not retaining audiobufferlist , memory space mdatabytesize somehow getting overwritten.
edit: when code run on simulator same file, works fine.
mdatabytesize should set framesread * sizeof(sint16) * channelcount before each call extaudiofileread
Comments
Post a Comment