Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-13299
KA-87
2003-05-24 12:45
2003.06.05
А как в программе можно реализовать подсветку синтаксиса?


3-13043
BackStabber
2003-05-16 16:40
2003.06.05
DBLookUpCombobox


3-13017
me2
2003-05-14 17:07
2003.06.05
Большой размер базы


14-13392
Till
2003-05-16 07:39
2003.06.05
Oracle Data Access Components Net 4.05.1.8 for Delphi 6


7-13494
Замученный
2003-04-02 17:38
2003.06.05
Работа с com портом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский