sin () вернет значение от -1 до 1, поэтому при умножении на число x результат будет варьироваться от -x до x.
Если x больше или меньше числовых границ типа массиваэто вызовет артефакты.
Похоже, что буфер - это массив символов, который на самом деле не является обычным для аудиобуфера.
Обычно это целые или двойные числа.Когда это массив целых чисел, амплитуда должна быть между INT_MIN и INT_MAX.Когда это массив двойных, амплитуда обычно будет варьироваться от -1 до 1.
В вашем случае я бы попытался использовать CHAR_MAX?(РЕДАКТИРОВАТЬ: и потерять "/ 100")
Но я предполагаю, что вызывающая функция не ожидает массива char, потому что есть максимум 256 дискретных возможных значений для амплитуды, что приведет к плохойКачество звука.Этот термин называется разрядностью.
Также взгляните на синусоиды