Many, many thanks @matthias.geier for solving the problem in this pull request!
In PsychoPy3 Beta 11, the crackling can be fixed by changing line 192 in C:\Program Files (x86)\PsychoPy3\Lib\site-packages\psychopy\sound\backend_sounddevice.py from for thisSound in self.sounds:
to for thisSound in self.sounds.copy():
In PsychoPy 2 1.90.2, however, this change (line 185 in this case) produces the following error:
From cffi callback <function callback_ptr at 0x1554F170>:
Traceback (most recent call last):
File "C:\Program Files (x86)\PsychoPy2\lib\site-packages\sounddevice.py", line 1008, in callback_ptr
return _wrap_callback(callback, data, frames, time, status)
File "C:\Program Files (x86)\PsychoPy2\lib\site-packages\sounddevice.py", line 2773, in _wrap_callback
callback(*args)
File "C:\Program Files (x86)\PsychoPy2\lib\site-packages\psychopy\sound\backend_sounddevice.py", line 185, in callback
for thisSound in self.sounds.copy():
AttributeError: 'list' object has no attribute 'copy'