correctly affect speed/reversing when shuttling audio

This commit is contained in:
itsmattkc
2020-01-07 16:41:30 +11:00
parent c938055293
commit a616aaa182
11 changed files with 433 additions and 27 deletions
+22 -2
View File
@@ -80,9 +80,9 @@ void AudioManager::PushToOutput(const QByteArray &samples)
output_manager_.Push(samples);
}
void AudioManager::StartOutput(QIODevice *device)
void AudioManager::StartOutput(QIODevice *device, int playback_speed)
{
output_manager_.PullFromDevice(device);
output_manager_.PullFromDevice(device, playback_speed);
}
void AudioManager::StopOutput()
@@ -147,6 +147,8 @@ void AudioManager::SetOutputParams(const AudioRenderingParams &params)
if (output_params_ != params) {
output_params_ = params;
output_manager_.SetParameters(params);
// Refresh output device
SetOutputDevice(output_device_info_);
}
@@ -168,6 +170,24 @@ const QList<QAudioDeviceInfo> &AudioManager::ListOutputDevices()
return output_devices_;
}
void AudioManager::ReverseBuffer(char *buffer, int buffer_size, int sample_size)
{
int half_buffer_sz = buffer_size / 2;
char* temp_buffer = new char[sample_size];
for (int src_index=0;src_index<half_buffer_sz;src_index+=sample_size) {
char* src_ptr = buffer + src_index;
char* dst_ptr = buffer + buffer_size - sample_size - src_index;
// Simple swap
memcpy(temp_buffer, src_ptr, static_cast<size_t>(sample_size));
memcpy(src_ptr, dst_ptr, static_cast<size_t>(sample_size));
memcpy(dst_ptr, temp_buffer, static_cast<size_t>(sample_size));
}
delete [] temp_buffer;
}
AudioManager::AudioManager() :
input_(nullptr),
input_file_(nullptr),