syedhali / EZAudio

An iOS and macOS audio visualization framework built upon Core Audio useful for anyone doing real-time, low-latency audio processing and visualizations.
Other
4.93k stars 821 forks source link

Crash when playing music on iOS 13.0+ #379

Closed Haley-Wong closed 4 years ago

Haley-Wong commented 4 years ago

the log is :Error: Failed to fill complex buffer in float converter ('insz')

IlyaBlinov commented 4 years ago

Hi. This worked for me: In AudioKit I changed in file EZOutput.m constant : Float64 const EZOutputDefaultSampleRate = 48000.0f. By default this constant is 44100.0f

parthjdabhi commented 4 years ago

@IlyaBlinov For me too it is still not working on iOS 13.0.

sasanao commented 4 years ago

EZAudioFloatConverter.m: 218 AudioConverterFillComplexBuffer

If you stop checking OSStatus, it will work. But the waveform is not displayed.

Haley-Wong commented 4 years ago

I found that it just crashed on the real machine and didn't crash on the emulator. If I comment out exit(-1), it won't crash, but the waveform is still a problem. After debugging, I found that sometimes frames are not 512, but 91x, which will cause the OSStatus returned by the AudioConverterFillComplexBuffer function to be incorrect. Hope you fix this bug。

IlyaBlinov commented 4 years ago

I set in file EZOutput.m constant : Float64 const EZOutputDefaultSampleRate = 44100.0f and in EZAudioFloatConverter.m I am changed method:

(void)convertDataFromAudioBufferList:(AudioBufferList *)audioBufferList withNumberOfFrames:(UInt32)frames toFloatBuffers:(float *)buffers packetDescriptions:(AudioStreamPacketDescription )packetDescriptions. At this method I changed: OSStatus status = AudioConverterFillComplexBuffer(self.info->converterRef, EZAudioFloatConverterCallback, audioBufferList, &frames, self.info->floatAudioBufferList, packetDescriptions ? packetDescriptions : self.info->packetDescriptions); if (status > 0 ) { AudioConverterReset(self.info->converterRef); }

sasanao commented 4 years ago

same issue in AudioKit https://github.com/AudioKit/AudioKit/issues/1873

Haley-Wong commented 4 years ago

I set in file EZOutput.m constant : Float64 const EZOutputDefaultSampleRate = 44100.0f and in EZAudioFloatConverter.m I am changed method:

(void)convertDataFromAudioBufferList:(AudioBufferList *)audioBufferList withNumberOfFrames:(UInt32)frames toFloatBuffers:(float *)buffers packetDescriptions:(AudioStreamPacketDescription )packetDescriptions. At this method I changed: OSStatus status = AudioConverterFillComplexBuffer(self.info->converterRef, EZAudioFloatConverterCallback, audioBufferList, &frames, self.info->floatAudioBufferList, packetDescriptions ? packetDescriptions : self.info->packetDescriptions); if (status > 0 ) { AudioConverterReset(self.info->converterRef); }

Great, it works for me! Thank you !

iphonic commented 4 years ago

This is still happening to me, the solution doesn't work..