Хорошо, поэтому у меня есть небольшая программа, в которой пользователь может управлять выходной частотой аудиосигнала и воспроизводить песни (теоретически :)).Вывод звука (Windows Audio API) - низкие частоты тихие
Я генерирую синусоидальную волну самостоятельно в коде, выясняя, сколько точек она займет в течение одного периода этого сигнала, учитывая, что она отбирается на частоте 44100 Гц. Например:
for (int k = 0; k < points_sine_wave; k++)
{
// Generate sine wave
sineWave[k] = pow(2.0,10) * (sin(2*3.14159*f*td*k + old_angle) + 1);
}
td является delta t (постоянным), f является частотой, k является просто индексом. Чтобы обеспечить непрерывность синусоидальной волны при изменении частоты, я использую old_angle, который сохраняется, чтобы запомнить, с какого угла можно возобновить. Я проверил генерируемые здесь колебания, и он работает (синусоида остается непрерывной, но меняет частоту). +1 должен сделать все положительным.
Теперь, в зависимости от того, что я положил в эту полосу (2.0, x), я не могу слышать низкие частоты. Кажется, что в 2^7, я могу слышать все просто отлично (100 Гц - это что-то интересное), но если я перейду к 2^6 или 2^5, я больше не слышу низкочастотную частоту.
Я посмотрел на свой результат через Audacity и заметил, что высокочастотные компоненты всегда занимают весь вертикальный диапазон (от -1 до 1), а низкая частота - от -0,4 до 0,4.
Почему? Сигнал, который я пишу в буфер, имеет одинаковую максимальную амплитуду (проверен в Matlab - может опубликовать это, если хотите).
Формат установлен на PCM, число бит равно 32, а число допустимых бит равно 32 (хотя 32, похоже, все рельсы).
Я бы поставил на последнюю проблему. Тот факт, что Audacity не показывает смещение по постоянному току, означает, что он должен быть передан через какой-либо фильтр, возможно преобразование D/A-A/D. Снимите «+ 1». «32 бита, похоже, все рельсы» - еще один показатель той же проблемы. 32 бит PCM имеет амплитуду 31 бит, потому что для знака необходим один бит. Игнорируйте это, и у вас неприятное переполнение, возможно, обертывание до отрицательных значений. Если вы используете синусовую кривую от 1,9 миллиарда до 2,0 до 2,1-2,1 и до 2,1, у вас очень неприятный громкий щелчок. – MSalters
Спасибо, я думаю, вы были правы относительно смещения постоянного тока, которое я ему давал. Я удалил «+1», и теперь он работает! – Mewa