Форум: "Система";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизКак проиграть звук через 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 вся ветка
Форум: "Система";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c