Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2014, 16:35   #11
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Duke Nukem под ДОСом работал и было все нормально
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 27.08.2014, 16:44   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
waleri кусочковая музыка на спектруме меня и навела на эту мысль.
но в досе то она нормальная.
там грузится буфер, а не по одному пику.
но если приложение затупит то новый кусок не поступит.
(кстати со звуком по сути ничего не изменилось особо)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.08.2014, 19:32   #13
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

the_deer_one, рекомендую почитать исходники ID Software. Открыты все игры до Doom 3, в инете можно найти также разбор исходников. Главный цикл лежит в файле *_main.c[pp], вот пример из DOOM / linuxdoom-1.10 / d_main.c:

Код:
void D_DoomLoop (void)
{
    if (demorecording)
	G_BeginRecording ();
		
    if (M_CheckParm ("-debugfile"))
    {
	char    filename[20];
	sprintf (filename,"debug%i.txt",consoleplayer);
	printf ("debug output to: %s\n",filename);
	debugfile = fopen (filename,"w");
    }
	
    I_InitGraphics ();

    while (1)
    {
	// frame syncronous IO operations
	I_StartFrame ();                
	
	// process one or more tics
	if (singletics)
	{
	    I_StartTic ();
	    D_ProcessEvents ();
	    G_BuildTiccmd (&netcmds[consoleplayer][maketic%BACKUPTICS]);
	    if (advancedemo)
		D_DoAdvanceDemo ();
	    M_Ticker ();
	    G_Ticker ();
	    gametic++;
	    maketic++;
	}
	else
	{
	    TryRunTics (); // will run at least one tic
	}
		
	S_UpdateSounds (players[consoleplayer].mo);// move positional sounds

	// Update display, next frame, with current state.
	D_Display ();

#ifndef SNDSERV
	// Sound mixing for the buffer is snychronous.
	I_UpdateSound();
#endif	
	// Synchronous sound output is explicitly called.
#ifndef SNDINTR
	// Update sound output.
	I_SubmitSound();
#endif
    }
}
В общем, всё как написал waleri. Системные таймеры у них не используются, поэтому их игры всегда загружают одно ядро процессора на 100%. Многопоточность - до сих пор продвинутая фича, используемая не во всех движках.

Комментарии к звуковым функциям:
Код:
//
// This function loops all active (internal) sound
//  channels, retrieves a given number of samples
//  from the raw sound data, modifies it according
//  to the current (internal) channel parameters,
//  mixes the per channel samples into the global
//  mixbuffer, clamping it to the allowed range,
//  and sets up everything for transferring the
//  contents of the mixbuffer to the (two)
//  hardware channels (left and right, that is).
//
// This function currently supports only 16bit.
//
void I_UpdateSound( void )
{
    ...
Код:
// 
// This would be used to write out the mixbuffer
//  during each game loop update.
// Updates sound buffer and audio device at runtime. 
// It is called during Timer interrupt with SNDINTR.
// Mixing now done synchronous, and
//  only output be done asynchronous?
//
void I_SubmitSound(void)
{
    ...
ds.Dante вне форума Ответить с цитированием
Старый 28.08.2014, 08:07   #14
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

ds.Dante я помойму исходники кваки глядел.

Ну т.е. в современных компах в один фрейм в звуковуху кладётся мелодия, и она её автономно играет.

А в спектрумах всем заведовал один процессор, и получалось такое стрёмное звучание.
http://www.youtube.com/watch?v=0rv4JweYn3M#t=41
the_deer_one вне форума Ответить с цитированием
Старый 28.08.2014, 09:55   #15
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

О, сразу вспомнился Goody...
waleri вне форума Ответить с цитированием
Старый 28.08.2014, 23:03   #16
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
кусочковая музыка на спектруме меня и навела на эту мысль.
но в досе то она нормальная.
Изначально все звуки на Спектруме рождались установкой или сбросом определенного бита на определенном порту вывода. Устанавливаем - на динамик подается напряжение, сбрасываем, снимается. Если это делать с определенной частотой, то динамик будет издавать звук этой частоты. В итоге крутой музыки в играх не было, а где была какая-то музыка, сами игры тормозили. Но в более поздних версиях Спектрума был музыкальный сопроцессор. А в ДОС'е проще, потому как там задаешь нужную частоту, и динамик пищит, пока не отключишь, в это время процессор занимается другими делами.

На счет поточности, ну ясное дело, что однопоточные. Прерывания маскируемые можно было перепрограммировать разве что, типа второго потока получалось.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ужасная ссылка для DMaster HellMercenariess Свободное общение 4 02.07.2012 18:05
Ужасная ошибка в делфи nikityan Общие вопросы Delphi 3 02.02.2012 09:44
Invalid floating point operation ужасная ошибка ВСЁПРОСТО Помощь студентам 3 24.08.2010 15:32
Операция "Массив". Великая и ужасная :) Mindwar Помощь студентам 6 17.02.2010 07:27
Посещаемость ужасная!!! Anticoors Свободное общение 18 04.05.2007 08:41