I2C crashes code

Why is soundSignal an int on one end and a byte on the other?

receiveEvent() is an interrupt service routine (ISR). Interrupts are disabled when it is running. You can NOT use delay() in an ISR.

There is NO point in making loop() wait with it's thumb up its ass for any length of time. You are not charged for every iteration of loop().