You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have an issue similar to #11724 on Windows.
I'm placing two sine waves of different frequencies on each channel of a stereo pair.
When I create the stream (16 bit setero) I get callbacks for 1920 bytes per call, and fill up the buffer then add 480 sample frames of 4 bytes each with sine wave (using a continuing phase to make sure the audio is smooth).
In the first seconds I hear a strange deformation on both channels, which disappears after a few seconds, first on the left, and a few seconds later on the right channel. After that the sounds is what I'd expect.
I tried clearing the buffer first, but that does not help.
I have the feeling either SDL_PutAudioStreamData writes more or less data to the buffer than specified, or that later on something else messes up the audio.
To be clear, I do not open a device first, I just create as stream:
I have an issue similar to #11724 on Windows.
I'm placing two sine waves of different frequencies on each channel of a stereo pair.
When I create the stream (16 bit setero) I get callbacks for 1920 bytes per call, and fill up the buffer then add 480 sample frames of 4 bytes each with sine wave (using a continuing phase to make sure the audio is smooth).
In the first seconds I hear a strange deformation on both channels, which disappears after a few seconds, first on the left, and a few seconds later on the right channel. After that the sounds is what I'd expect.
I tried clearing the buffer first, but that does not help.
I have the feeling either SDL_PutAudioStreamData writes more or less data to the buffer than specified, or that later on something else messes up the audio.
To be clear, I do not open a device first, I just create as stream:
SDL_AudioSpec spec { SDL_AUDIO_S16LE, 2, 48000 };
m_stream = SDL_OpenAudioDeviceStream(id, &spec, callback, nullptr);
Callback:
static uint8_t audioBuffer[65536];
float phaseL = 0.0F;
float phaseR = 0.0F;
float sampleFreq = 48000.0F;
float freqL = 1000.0F;
float freqR = 2000.0F;
float twoPI = 2 * SDL_PI_D;
float stepL = freqL / sampleFreq * twoPI;
float stepR = freqR / sampleFreq * twoPI;
void audio_callback(void */userdata/, SDL_AudioStream *stream, int additional_amount, int total_amount)
{
size_t offset{};
int sampleFrames = additional_amount / 4;
for (int i = 0; i < sampleFrames; ++i)
{
int16_t sampleL = static_cast<int16_t>(32768.0F * sin(phaseL) + 0.5F);
int16_t sampleR = static_cast<int16_t>(32768.0F * sin(phaseR) + 0.5F);
memcpy(audioBuffer + offset, &sampleL, 2);
offset += 2;
memcpy(audioBuffer + offset, &sampleR, 2);
offset += 2;
phaseL += stepL;
phaseR += stepR;
if (phaseL > twoPI)
phaseL -= twoPI;
if (phaseR > twoPI)
phaseR -= twoPI;
}
// Put the audio data into the stream
//std::cout << "Get audio, size " << additional_amount << "\r\n";
SDL_PutAudioStreamData(stream, audioBuffer, sampleFrames * 4);
}
I play sound for about 10 secs, then pause and destroy the stream.
After about 2 seconds the left channel sounds normal, after about 4 seconds the right is also normal.
The text was updated successfully, but these errors were encountered: