#include #include #include #include #include #include #include #include #include static _Atomic unsigned callbacks; static unsigned phase; static OSStatus tone(AudioDeviceID device,const AudioTimeStamp* now, const AudioBufferList* input,const AudioTimeStamp* inputTime, AudioBufferList* output,const AudioTimeStamp* outputTime,void* user) { (void)device;(void)now;(void)input;(void)inputTime;(void)outputTime;(void)user; for(unsigned b=0;bmNumberBuffers;++b) { float *samples=output->mBuffers[b].mData; unsigned channels=output->mBuffers[b].mNumberChannels; unsigned count=output->mBuffers[b].mDataByteSize/sizeof(float); for(unsigned i=0;i1 && !strcmp(argv[1],"--tone")) { AudioDeviceIOProcID proc=0; status=AudioDeviceCreateIOProcID(device,tone,0,&proc); if(status) return 6; status=AudioDeviceStart(device,proc); printf("AUDIO_START status=%d\n",status);fflush(stdout); if(status) {AudioDeviceDestroyIOProcID(device,proc);return 7;} for(unsigned i=0;i<150;++i) usleep(20000); printf("AUDIO_CALLBACKS count=%u\n",(unsigned)callbacks);fflush(stdout); OSStatus stopped=AudioDeviceStop(device,proc); AudioDeviceDestroyIOProcID(device,proc); printf("AUDIO_STOP status=%d\n",stopped); if(stopped || !callbacks) return 8; } return 0; }