Как можно генерировать аудио во время выполнения, используя C ++? Я просто ищу отправную точку. Кто-то на форуме предложил мне попытаться заставить программу воспроизводить прямоугольную волну с заданной частотой и амплитудой.
Я слышал, что современные компьютеры кодируют аудио с использованием сэмплов PCM: при заданной частоте в течение определенной единицы времени (например, 48 кГц) амплитуда звука записывается с заданным разрешением (например, 16 бит). Если я создаю такой семпл, как мне заставить его воспроизводить мои динамики? Я в настоящее время использую Windows. Я бы предпочел избегать любых дополнительных библиотек, если это вообще возможно, но я бы остановился на очень легкой.
Вот моя попытка создать образец прямоугольной волны с использованием этого принципала:
signed short* Generate_Square_Wave(
signed short a_amplitude ,
signed short a_frequency ,
signed short a_sample_rate )
{
signed short* sample = new signed short[a_sample_rate];
for( signed short c = 0; c == a_sample_rate; c++ )
{
if( c % a_frequency < a_frequency / 2 )
sample[c] = a_amplitude;
else
sample[c] = -a_amplitude;
}
return sample;
}
Я делаю это правильно? Если это так, что мне делать с сгенерированным семплом, чтобы мои колонки воспроизводили его?
Ваш цикл должен использовать c < a_sample_rate, чтобы избежать переполнения буфера.
Для вывода звука вы вызываете waveOutOpen и другие функции waveOut …. Все они перечислены здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743834(v=vs.85).aspx
Других решений пока нет …