Я пытаюсь смешать некоторые сэмплы с помощью следующего алгоритма:алгоритм микширования аудио изменение объема
short* FilterGenerator::mixSources(std::vector<RawData>rawsources, int numframes)
{
short* output = new short[numframes * 2]; // multiply 2 for channels
for (int sample = 0; sample < numframes * 2; ++sample)
{
for (int sourceCount = 0; sourceCount < rawsources.size(); ++sourceCount)
{
if (sample <= rawsources.at(sourceCount).frames * 2)
{
short outputSample = rawsources.at(sourceCount).data[sample];
output[sample] += outputSample;
}
}
}
// post mixing volume compression
for (int sample = 0; sample < numframes; ++sample)
{
output[sample] /= (float)rawsources.size();
}
return output;
}
Я получаю выход я хочу за то, что, когда один из источников сделано, другой, кроме источники начинают играть громче. Я знаю, почему это так, но я не знаю, как правильно его решить.
Кроме того, это скриншот из Audacity с выхода аудио I:
Как вы можете видеть, что есть определенно что-то не так. Вы можете видеть, что звук больше не имеет нуля в центре, и вы можете видеть, как звук становится громче, как только один из источников проигрывается.
Больше всего я хотел бы исправить проблему с громкостью, но любые другие хитрости, которые я могу сделать, очень ценятся!
Дополнительная информация: Я знаю, что этот код не позволяет использовать моно источники, но это нормально. Я только собираюсь использовать стереоперемещенные аудио-образцы.
Это не полный ответ, но вы должны выделить буфер один раз и повторно использовать его. Вы хотите избежать выделения памяти в критическом для производительности коде. (Я предполагаю, что это направлено на звуковую карту, а не файл.) –
Это заголовок в файл. Я редактирую аудио не в реальном времени. Я знаю, что я могу сделать некоторые вещи более результативными, но сейчас это не проблема. Он делает то, что я хочу очень быстро на данный момент – Dries
@JohnK: Не потейте. Современные распределители удивительно эффективны, а звук очень медленный по сравнению с процессорами. Выделение 1 кБ-буфера легко в тысячу раз быстрее, чем его воспроизведение. – MSalters