audio — генерация звука во время выполнения в C ++ в Windows

Как можно генерировать аудио во время выполнения, используя 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;
}

Я делаю это правильно? Если это так, что мне делать с сгенерированным семплом, чтобы мои колонки воспроизводили его?

1

Решение

Ваш цикл должен использовать c < a_sample_rate, чтобы избежать переполнения буфера.

Для вывода звука вы вызываете waveOutOpen и другие функции waveOut …. Все они перечислены здесь:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd743834(v=vs.85).aspx

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]