Вниз
Скачать: CL | DM;

Как проиграть звук через sound blaster   Найти похожие ветки 

 
zirus ©   (2003-04-03 06:38) [0]

Надо чтобы было 2 буффера заданной длины(пусть будет 1024 байта); 1й буффер закончился - программа получила сообщение, что его можно заполнять новыми данными(то же самое и со вторым буффером), частота дискретизации задаётся вручную - любое значение, разрядность 8/16 бит, моно. Как такое можно организовать?


 
Digitman ©   (2003-04-03 08:37) [1]

смотри спецификацию Microsoft DirectSound


 
Ruslan Solovyev ©   (2003-04-03 09:41) [2]

см MSDN:

waveOutOpen, waveOutPrepareHeader, waveOutWrite.

т.е.:

открываеш: waveOutOpen
создаеш 2 буффера: waveOutPrepareHeader
посылаеш оба буфера: waveOutWrite

когда буффер проигрался - получаеш нотификацию (CallBack параметр в waveOutOpen) -
готовиш буффер снова и waveOutWrite

etc.



 
zirus ©   (2003-04-03 11:06) [3]

Всё сделано, но есть одно "но":
Рисуем, например меандр(квадратные импульсы 1-0-1-0)
Записываем sound forge-м
Смотрим на график звука - и что же видим?
Звук сильно искажается, т.е. переход из +1 в 0 не квадратный, а такой:
Линия идёт из 100 в 0, идёт до -5, до +4, до -3... т.е. по затухающей синусоиде. Из 0 в 100 нарастает тоже не мгновенно: -1 +2, -3, +4, -5, +100.
Запись веду из stereomixer.
Искажения наблюдаются не только при меандре.
Как можно решить проблему искажений?


 
Digitman ©   (2003-04-03 11:43) [4]

у тебя, вероятно, происходит фазовое искажение.
при получении нотификации об освобождении буфера (желательно использовать пре-нотификацию, извещяющую о том, что до конца воспроизведения тек.буфера осталось столько то дискретных интервалов) заполнять его следует с той фазы, на которой закончилось заполнении текущего воспроизводимого буфера.


 
zirus ©   (2003-04-03 12:00) [5]

НЕТ! фаза здесь не при чём! искажения происходят не между буфферами, а внутри них! то есть в одном буффере несколько периодов меандра, но на каждом периоде - одни и те же искажения.

Так... Обращаюсь к знающим людям:
Я рассчитал спектр меандра(на бумажке), сгенерировал его из синусоид. График сгенерированного меандра получился очень похож на тот, что записал мне sound forge! Тогда искажения происходят из-за ограничения верхней частоты 22050Гц. Правда, при суммировании гармоник до 22050Гц - график более похож на меандр, а если гармоники суммировать до 11025Гц - то как раз наблюдаемая картина... Мои рассуждения верны насчёт того, что искажения из-за ограниченной полосы пропускания бластера? Кстати: винамп при проигровании меандра даёт такие же искажения...


 
Digitman ©   (2003-04-03 12:11) [6]


> zirus


А скажи, зачем такие сложности - генератор меандр-функции, синтезирующий последнюю по спектральному методу ? Почему не реализовать простую булеву функцию от времени ? Чем обоснован выбор именно алгоритма гармонического синтеза ?


 
zirus ©   (2003-04-03 16:38) [7]

Нет, это я просто изучал спектры, то есть расчитывал, как будет выглядеть меандр, если обрезать его гармоники до 20 кГц! Почему такие искажения?


 
Digitman ©   (2003-04-04 08:53) [8]

приведи-ка здесь свои расчеты


 
MBo ©   (2003-04-04 09:05) [9]

>Почему такие искажения?
А что удивительного?
Спектр меандра - бесконечный ряд, выглядящий, ксли не ошибаюсь, так:
A1*sin(x)+A3*Sin(3x)+A5*sin(5x)....
(Ряд Фурье)
Если наложить на него окно, обрезав высшие гармоники, и сделать обратное Фурье преобразование, низшие гармоники будут нескомпенсированы, и будут биения вблизи перехода.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.067 c
7-13499
Askik
2003-04-02 18:48
2003.06.05
Как подступиться к системному динамику(PC Speaker) через Win2K


1-13132
grusty
2003-05-24 17:16
2003.06.05
Как создать директорию?


6-13344
kerrik
2003-04-02 20:35
2003.06.05
Как определить траффик под Win9x во время нахождения в сети


14-13423
Nick-From
2003-05-19 13:27
2003.06.05
Посоветуйте тему для диплома


1-13321
Paylik
2003-05-24 22:32
2003.06.05
Task Bar




   Наверх