Okay, I took your code and cleaned it up a bit more.
I simplified some structures. You used value signalling property nodes in some places. This isn't necessary as you aren't using event structures. So I redefined them as local variables.
One thing I wonder about is the task ID wire running through your producer loop. (I realigned the loops to show better left to right reading of hte wires.) It passes in, through the read sound VI, then out the top, then it goes to the top two sequences. Where as other device ID is passed in from outside the loop. This may be by design, but something seems out of place with the architecture.
I think your big problem is that you may have a race condition if the ping and send command sequences are running simultaneously. I don't know if both configure VI's create the same task ID. But if they did, it would get cleared at the end of one sequence while the task ID in the other sequence is still executing through some of the other VI's.
You may want to put all of the sound configure VI's outside of the main program loop and just feed in the task ID's and keep them through shift registers. Clear the task's outside of the main program loop. Use the stop functions instead of clear task at the end of the sequences.
I suspect why you may have an erratic error (and I don't know exactly how the configure sound VI's work) is that you may occasionally get the same task ID created between those two loops and one gets cleared while it is still needed in the other loop. It looks like task ID's are created sequentially.
Just some ideas, but I ran the program for a while and didn't have any errors pop up.