Shifting by 28 samples isn't a whole lot. It's likely inaudible with a 44,100KHz wave. Secondly, you're clearing the stream bytes to 0 at the beginning and reassigning that 0 later in the loop. This mixer would effectively silence out your sound. Thirdly, you're shifting the stereo channels incorrectly. Wave data is treated as follows:
Assume an 8bit stereo audio stream at 44,100 samples per second.
data size: 1 byte * 44,100 1 byte * 44,100
<left_channel> <right_channel> <left_channel> .......
Some other debugging tips:
1) Try something simpler. Divide each value in stream by 2 (effectively reducing the volume). See if that works. If it doesn't, perhaps SDL_mixer is not correctly handling your wave or something somewhere else is wrong.
2) Here's a much more efficient way to shift channels.
// Get the total number of sound chunks
unsigned int blockSize = bytesPerSample * samplesPerSecond;
unsigned int numBlocks = (sizeOfWaveInBytes / blockSize) / 2;
unsigned int blockShift = 100; // Must be an even number for left channels
// Shift the left channel first
for (unsigned int i = 0; i < (numBlocks - blockShift); i += 2)
memcpy(&stream[i * blockSize], &stream[(i + blockShift) * blockSize], blockSize);
As an exercise, you will need to create another loop to clean out the last part of the stream's left channel data and repeat the step for the right channel data.