Я ранее запутался с этим вопросом.Я сделал это так, как будто я спрашиваю о своей конкретной реализации, но мой вопрос на самом деле касается общей темы.Я довольно уверен, что моя реализация в порядке.Поэтому я переписываю этот вопрос:
WASAPI дает мне информацию о аудиоформате, который аудио движок принимает в режиме совместного использования.Я знаю ожидаемую битовую глубину сэмплов, которые я предоставляю в буфер. Чего я не знаю, так это ожидаемого представления амплитуды сигнала в выборках. Например, если звуковой движок ожидает 32-битные выборки, означает ли это, что я должен представлять амплитуду синусоидальной волны как:
long
в диапазоне [min, max]
unsigned long
в диапазоне [0, max]
float
в диапазоне [min, max]
- или даже что-то вроде
float
в диапазоне [-1, 1]
?
(max = std::numeric_limits<type>::max()
и min = ...::min()
в C++
)
Пока я экспериментировалс этим с различными значениями методом проб и ошибок.Кажется, что только когда мои семплы содержат числа max/2
или -min/2
(как long
), чередующиеся (наряду с другими числами), он производит звук.Четные числа, близкие к этим (+ - несколько целых чисел), дают одинаковые результаты.Когда эти два числа (или числа, близкие к ним) не присутствуют в примерах, результатом является молчание независимо от того, что я делаю.
Это может быть неуместно, но я заметил, что эти числа '(max/2
и min/2
) битовое представление (как long
с) идентично IEEE float
битовому представлению 2.0
и -2.0
.Мне все еще не имеет смысла, почему это так работает.