вот логСообщение от SMT
вот логСообщение от SMT
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
большая часть из-за неподдержки nameless structs/unions в описании Z80. а так мелочи
ну да, по крайней мере это вроде единственное, что требует вмешательства в код, а не только в декларации.Сообщение от SMT
не только. ещё проскочила разок переменная, объявленная в for и ещё кое-какие мелочи
пофиксен глюк с рассинхронизацией AY и других звуковых источников (bepeer, tape, etc), добавлен класс SNDCOUNTER для определения, сколько семплов полностью готово (при генерации от нескольких источников) и откуда из внутреннего буфера надо брать эти семплы. пример использования - в файле sndcounter.h
ура, все работает
кстати, предложение -- а почему бы не сделать режим EXTERNAL_BUFFER штатным? то есть передавать в start_frame указатель на буфер и его длину. ИМХО при таком раскладе больше ничего и не надо -- он полностью заменяет нынешний умолчальный режим. а то сейчас чтобы EXTERNAL_BUFFER врубить, приходится лезть в сорцы (тк дефинить его, а потом инклюдить *.h и *.cpp в файл -- неудобно, особенно если такой файл не один ,)
типа: void start_frame(SNDSAMPLE *dst, unsigned dstlen, unsigned dstpos=0);
Последний раз редактировалось boo_boo; 09.03.2006 в 04:20.
потому что 1) могут передавать размер - не степень двойки и 2) потеряется несколько десятков тактов внутри цикла заполнения буфера из-за переменных вместо констант (действия с константами MSVC оптимизирует на отлично)кстати, предложение -- а почему бы не сделать режим EXTERNAL_BUFFER штатным?понятно, я специально вынес это в отдельный файл sndbuffer.h - достаточно исправить там 1-2 строки - указать, в какой переменной лежит буферсейчас чтобы EXTERNAL_BUFFER врубить, приходится лезть в сорцы
з.ы. теперь можно немного упростить обработку звука - start_frame вызывать без параметра, результат end_frame игнорировать (см. пример), объект SNDCOUNTER сам всё считает
не степень 2ки и дефайном можно указатьСообщение от SMT
тогда еще надо #include "sndcounter.h" в sndcounter.cpp вынести на самый верх, а в sndcounter.h добавить #include "sndbuffer.h" перед ifdef'омСообщение от SMT
хмм... если важно быстродействие, можно сделать темплейтами с параметрами-константами: медленней не станет, при использовании код править вообще не придется, и если понадобиться с несколькими буферами работать (может пригодиться в плеерах и тп) ничего не помешает.
ЗЫ извини за занудство, просто я маньяк по части интерфейсов, когда вижу отличный код, безумно хочется, чтобы и интерфейс был весь из себя
Последний раз редактировалось boo_boo; 09.03.2006 в 12:07.
это я уже добавил в sndrender.h:не степень 2ки и дефайном можно указатьКод:#ifdef SND_EXTERNAL_BUFFER #if ((SND_EXTERNAL_BUFFER_SIZE & (SND_EXTERNAL_BUFFER_SIZE-1)) != 0) #pragma error("SND_EXTERNAL_BUFFER_SIZE must be power of 2") #endif #endifсогласентогда еще надо #include "sndcounter.h" в sndcounter.cpp вынести на самый верх
включается через #include "sndrender.h", который надо вынести наверха в sndcounter.h добавить #include "sndbuffer.h" перед ifdef'ом
можно, но это надо думать - надо ещё заводить класс-буфер и юзать его как параметр шаблона, что-ли, чтобы все SNDRENDER'ы c одним буфером были одним классомхмм... если важно быстродействие, можно сделать темплейтами с параметрами-константами: медленней не станет, при использовании код править вообще не придется, и если понадобиться с несколькими буферами работать (может пригодиться в плеерах и тп) ничего не помешает
а хуже того, могут с каждым разом передавать разные буферы и размеры, когда всё должно быть одинаково, чтобы SNDCOUNTER правильно работалне степень 2ки и дефайном можно указать
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)