Здравствуйте vl80, Вы писали:
V>Есть такая задача — необходимо разложить звук, выходящий со звуковой карты, в спектр.
V>Поскажите, пожайлуста, как взять звук, в каком виде он вообще выходит со звуковой карты( в виде частот и аплитуд, или еще как-то).
А зачем тебе знать, в каком виде звук
выходит со звуковой карты?
А входит он (для программиста) почти всегда в виде PCM (Pulse Code Modulation). Ты при захвате аудио задаешь частоту дискретизации (11, 22, 44, 48 кГц), число каналов (1/2 — моно/стерео) и размер сэмпла (8, 12, 16, 20, 24 бит). Звуковая аппаратура обеспечит преобразование входящего (как правило, аналогового) сигнала в требуемый формат. В результате ты получишь буфер, заполненный, к примеру, 16-битными (размер сэмпла) числами. Каждое число — это результат измерения амплитуды (громкости) сигнала в единицу времени, например, в 1/44100 секунды (частота дискретизации). Если каналов больше 1, то сэмплы для соответствующих каналов чередуются.
Это все теория (по поводу формата звука), а захватить звук для дальнейшей обработки можно средствами WaveInput (см. MSDN).
V>Где найти документацию по этому, возможно ли это сделать на DirectSound?
Можно и на Direct Sound. Смотреть в сторону IDirectSoundCapture, IDirectSoundCaptureBuffer. Чисто субъективно — WaveInput проще, хотя... кому как. Воспроизводить звук, напротив, мне проще через DirectSound
Потом ты спрашиваешь про разложение в спектр. Не знаю, есть ли для этого средства в каком-либо DirectShow. Но рабочий подход — это использовать Fast Fourier Transform (FFT). Исходники у меня где-то были, если нужно — пиши.