The next step would be now to cut into single TAudioSample chunks of 100msecs. It is reacting faster but you will get more artifacts:Code: BlitzMax...'workaround: now you can set B back to 255 (or remove this code line) B=255 Repeat ' until B=0 (at 37642) OUT_CHUNKS(254,A) '37624 OUT (254),A ... Function OUT_CHUNKS(Port%, Value%) Const SAMPLE_RATE%=44100 Global NextSample:TAudioSample, PlayTime% If Counter=0 Print "Sample created" NextSample = CreateAudioSample(4410, SAMPLE_RATE, SF_MONO8 ) EndIf Select Value & 8 Case 0 NextSample.Samples[Counter]=50 Case 8 NextSample.Samples[Counter]=200 End Select Counter=Counter + 1 If counter=4408 NextSample.Samples[4408]=0 NextSample.Samples[4409]=0 Local Audio:TSound = LoadSound( NextSample ) Repeat Delay 1 Until PlayTime<MilliSecs() Print "play TSound" PlayTime=MilliSecs()+100 PlaySound Audio Counter=0 EndIf End Function