Просмотр полной версии : Нужна помощь в эмуляции звука
denpopov
09.04.2014, 11:46
Попробовал написать для теста небольшую прогу, которая:
-инициализировала эмулятор
-записывала в регистр АУ данные, и чтобы звук менялся
исходников эмулятора AY8910 много, но ничего не компилируется.
Нужна помощь.
Kakos_nonos
09.04.2014, 11:54
Есть YMEngine от Сергея бульбы. Вставляется в делфи на раз-два. Я, правда, не пробовал, как там в регистры писать, но .ym файлы играть легко.
denpopov
09.04.2014, 12:10
.YM меня не интересует, как раз интересно было бы записывать в AY отдельные значения регистров.
.YM меня не интересует, как раз интересно было бы записывать в AY отдельные значения регистров.
Чтоб играть .ym файлы как раз нужен эмулятор AY с возможностью записи регистров. Так что посмотри YMEngine.
denpopov
10.04.2014, 17:32
Так что посмотри YMEngine.
оно елееле компилится и я не вижу записей данных в регистры.
я не вижу записей данных в регистры.
А может не смотрел?
CYmGlobals.pas:
SetMixerRegister
SetEnvelopeRegister
SetAmplA/B/C
RegisterAY.Noise
RegisterAY.Index[...]
denpopov
10.04.2014, 17:54
А может не смотрел?
не смотрел, запутался просто..
SetAmplA/B/C
а с этим мало понятно.
не смотрел, запутался просто..
Ну вот посмотри сначала. Там всего 5 файлов.
а с этим мало понятно.
Что именно непонятно?
denpopov, посмотри еще Ayumi. https://github.com/true-grue/ayumi
denpopov
10.04.2014, 18:23
Что именно непонятно?
непонятно вот это:
// Defines the AY register structure
TRegisterAY = packed record
case Integer of
0: (Index: array [0..15] of byte);
1: (TonA, TonB, TonC: word;
Noise: byte;
Mixer: byte;
AmplitudeA, AmplitudeB, AmplitudeC: byte;
Envelope: word;
EnvType: byte);
end;
синтаксис Делфи я не знаю.
---------- Post added at 18:23 ---------- Previous post was at 18:22 ----------
denpopov, посмотри еще Ayumi. https://github.com/true-grue/ayumi
много возни с Питоном. хочется все-таки гуевину с фичами, которые описал выше.
синтаксис Делфи я не знаю.
Ну тогда ayumi. Питон там для гуи и конверсии, можно без него обойтись.
denpopov
10.04.2014, 18:52
Питон там для гуи и конверсии, можно без него обойтись.
то есть весь движок переписать?
имхо проще в Delphi разобраться.
то есть весь движок переписать?
имхо проще в Delphi разобраться.
facepalm.jpg
Ты хоть внятно опиши что тебе надо и для каких целей.
то есть весь движок переписать?
там на си движок, вроде бы генерит сигнал как раз по регистрам. написано очень даже внятно.
denpopov
10.04.2014, 19:38
Ты хоть внятно опиши что тебе надо и для каких целей.
просто нужно запись данных в регистры AY, чтобы получить результат.
Цель? эксперимент, наверное...
написано очень даже внятно.
мне непонятно, я в Сях не шарю(
Откуда эти данные будут поступать?
Куда пойдет результат генерации?
Какие языки ты вообще знаешь?
denpopov
10.04.2014, 20:31
какой-то молчок после набранного кода:
procedure TFrmYmPlayerExample.FormCreate(Sender: TObject);
begin
// Create a player instance
m_player := CYmEngine.Create;
// Get the current mixer mode
m_mode := m_player.MixerChannels;
lblMixerMode.Caption := mixerModeToString(TYmMixerMode(m_mode));
RegisterAY.Noise:=6;
SetMixerRegister(31);
SetAmplA(255);
SetAmplB(255);
SetAmplC(255);
SetEnvelopeRegister(31);
нашел ещё одну:
http://www.codeforge.com/article/217474
наверняка фейк какой-то, скачать нельзя.Зарегистрировался, гноворят - ждите 3 дня, когда одобрят для пойнтов ваш *****код..
Может, кому повезет?
---------- Post added at 20:31 ---------- Previous post was at 20:29 ----------
Откуда эти данные будут поступать?
Скажем так я буду пересылать.
Куда пойдет результат генерации?
результат нужен звук. Т.е. нужен эмулятор - пишешь в регистры, получаешь звук.
Какие языки ты вообще знаешь?
Си знаю немного, но в разработке я полный нуб.
По почте пересылать будешь?
Кароч как обычно- хочу чего не знаю кого.
denpopov
10.04.2014, 21:24
Кароч как обычно- хочу чего не знаю кого.
Ты знаешь, как AYfly работает?
вызываешь .dll для инициализации, отправляешь данные музона, молча сидишь, .dll-ка воспроизводит.
я хочу то же самое - инициализация,запись данных(регистр=значение), тогда получается звук.
и в идеале нужна была бы очистка памяти.
не знаю, как по-другому объяснить.,
Ну так бери ayfly и вперед. Раз там все что надо.
denpopov
11.04.2014, 10:12
Коекак получилось запустить дамп через ayfly, хотя это не решение..
и с функцией
void *ay_initsongindirect(unsigned char *module, unsigned long sr, AY_CHAR *type, unsigned long size, AbstractAudio *player = 0);
выходит косяк...
denpopov
13.04.2014, 12:49
http://www.codeproject.com/Questions/358822/callback-funtion-in-waveOutOpen-API
непонятно, зачем мне WIM_DATA?
по идее проще пересчитать буфер вывода при смене параметров.
непонятно, зачем мне WIM_DATA?
Тебе- незачем. Кури мануалы:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743869(v=vs.85).aspx
denpopov
13.04.2014, 16:46
Тебе- незачем. Кури мануалы:
кажется, теперь я врубаюсь про waveOutProc...
denpopov
14.04.2014, 08:33
у ayumi render недоделанный, параметр frame_rate принимает за 48.828125.
или это так и задумано?
у ayumi render недоделанный, параметр frame_rate принимает за 48.828125.
или это так и задумано?
все он доделанный. параметр как у настоящего пентагона, но всяко его можно менять.
Пентагона какой версии? На версии от Микроарта стоит кварц на 14.3 МГц. http://alonecoder.nedopc.com/zx/pent_1.jpg
denpopov
14.04.2014, 12:52
все он доделанный. параметр как у настоящего пентагона, но всяко его можно менять.
У меня из psg Wav странный выходит..
Пентагона какой версии?
сгинь.
denpopov
14.04.2014, 14:23
psb, между делом, а не мог бы ты написать такую программу, которая по состоянию данных регистров выводила звук, или генерировала правильный .WAV?
между делом, а не мог бы ты написать такую программу, которая по состоянию данных регистров выводила звук, или генерировала правильный .WAV?
так ayumi именно вав и генерит из регистров (из psg, но его он распаковывает на регистры).
denpopov
14.04.2014, 16:48
ясна. никто намеков не понимает(
/*всем влом..
Без четкого ТЗ результат- ХЗ.
denpopov
14.04.2014, 18:05
Без четкого ТЗ результат- ХЗ.
как минимум нужна GUI:
вводишь значения регистров, в зависимости от данных меняется звук.
Как объяснить я не знаю уже..
вводишь значения регистров, в зависимости от данных меняется звук.
Т.е. программа постоянно звучит, но характер звучания меняется после обновления значений регистров?
denpopov
14.04.2014, 18:51
Т.е. программа постоянно звучит, но характер звучания меняется после обновления значений регистров?
да. наподобие генератора тона - меняешь параметры, звук меняется.
denpopov
15.04.2014, 14:57
уважаемый Vitamin, есть прогресс?
уважаемый Vitamin, есть прогресс?
Прогресс чего?
denpopov
15.04.2014, 15:34
Прогресс чего?
ТЗ, что я описал
ТЗ, что я описал
1) не ты описал, а я из тебя вытянул
2) нахрена там гуй?
denpopov
15.04.2014, 15:42
2) нахрена там гуй?
эмуляция звука же с разными параметрами.
эмуляция звука же с разными параметрами.
И что? Без гуя никак? Указательный палец к мышке прирос?
denpopov
15.04.2014, 15:52
И что? Без гуя никак? Указательный палец к мышке прирос?
а какой есть вариант? cli-интерфейс?
а какой есть вариант? cli-интерфейс?
Он самый. Минимум трудозатрат, максимум гибкости.
denpopov
15.04.2014, 15:56
Он самый. Минимум трудозатрат, максимум гибкости.
хотелось бы увидеть, если не затруднит, конечно же..
хотелось бы увидеть, если не затруднит, конечно же..
1) Интерактивный. Команды start/stop запускают/останавливают звучание. Команды вида xx=yy записывают в регистр xx значение yy.
2) Потоковый. На вход поступает текстовый файл, каждая строка которого размером 26 символов и содержит hex значения, записываемые в регистры или пробелы, если записи нет.
Выбирай. Только предупреждаю сразу- если я возьмусь это сделать, никаких допиливаний в стиле "я хотел совсем другое/а теперь вот эту хрень сделать".
denpopov
15.04.2014, 17:20
Выбирай. Только предупреждаю сразу- если я возьмусь это сделать, никаких допиливаний в стиле "я хотел совсем другое/а теперь вот эту хрень сделать".
вариант 1 устраивает.
вариант 1 устраивает.
На скорую руку (1 час) под 64 битную винду:
https://dl.dropboxusercontent.com/u/2393036/zxtune/aycli/aycli.exe (2.5Мб)
denpopov
15.04.2014, 18:49
Версия "C:\lcc\projects\ayfly\aycli.exe" не совместима с версией Windows, работа
ющей на этом компьютере. Проверьте сведения о системе, чтобы узнать, какая версия программы x86 (32-разрядная) или x64 (64-разрядная) вам нужна, и получите ее у поставщика программного обеспечения.
у меня 7ка..можно для 32?
у меня 7ка..
У меня тоже. Разрядность какая?
denpopov
15.04.2014, 18:54
32
32
Перевыложил с тем же урлом (360кб). Если потребует msvc120.dll или чтото наподобие, ищи их в 32-битной версии zxtune под windows.
denpopov
15.04.2014, 19:04
заработало кажись.
глянуть бы на исходники..
глянуть бы на исходники..
Исходники проекта открыты. Исходники тулзы пока не заливал- там ничено интересного, тупо *****код обвязки вокруг имеющихся компонентов.
denpopov
15.04.2014, 19:07
Исходники тулзы пока не заливал- там ничено интересного, тупо *****код обвязки вокруг имеющихся компонентов
ну меня тулза больше интересует. кинь в личку, если не жалко, пожалуйста..
ну меня тулза больше интересует. кинь в личку, если не жалко, пожалуйста..
Не понимаю что ты там хочешь найти
https://github.com/vitamin-caig/zxtune/blob/develop/src/devices/test/aycli/main.cpp
denpopov
15.04.2014, 19:15
Не понимаю что ты там хочешь найти
может, повезет и тогда попробую собрать то, что планировал... А какая среда разработки?
А какая среда разработки?
Никакой. FAR+make
denpopov
15.04.2014, 19:27
Никакой. FAR+make
miniGW?
С ним тоже можно собрать. Не понимаю нахрена тебе это? Ты же получил что заказывал.
denpopov
15.04.2014, 20:04
С ним тоже можно собрать. Не понимаю нахрена тебе это? Ты же получил что заказывал.
Ты развиваешь во мне комплекс косноязычия. спасибо за утилитку.
denpopov
16.04.2014, 08:27
Как я ни пытался, но без стакана тут не разберешься...:v2_dizzy_facepalm:
Системе не удается найти указанный путь.
Building
MAKE Version 5.3 Copyright (c) 1987, 2008 CodeGear
Error makefile 13: Command syntax error
*** 1 errors during make ***
Failed
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\home\AppData\Roaming
arch=x86
COMMANDER_DRIVE=C:
COMMANDER_INI=C:\tools\Total_Commander_7.55_PowerP ack_2010.5a_Portable\wincmd.in
i
COMMANDER_PATH=C:\tools\Total_Commander_7.55_Power Pack_2010.5a_Portable
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=HOME-ПК
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\home
include=C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:\Program Fil
es\Microsoft Visual Studio\VC98\mfc\include;C:\Program Files\Microsoft Visual St
udio\VC98\include
lib=C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Micro
soft Visual Studio\VC98\lib
LOCALAPPDATA=C:\Users\home\AppData\Local
LOGONSERVER=\\HOME-ПК
MOZ_PLUGIN_PATH=C:\tools\FoxitReaderPortable\App\F oxit Reader\plugins\
NUMBER_OF_PROCESSORS=4
OpenXXApp=C:\tools\openXX\OpenXX.exe
OpenXXDir=C:\tools\openXX\
OpenXXDll=C:\tools\openXX\OpenXX.dll
OS=Windows_NT
Path=\git\bin;C:\Build;C:\Program Files\ImageMagick-6.8.7-Q16;C:\Windows\system3
2;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\S ystem32\WindowsPowerShell\v1.0
\;C:\Program Files\EmEditor;C:\PBWin70\BIN;C:\Program Files\MySQL\MySQL Server 5
.5\bin;C:\PROGRA~1\TIEDUC~1\TI-83P~1\UTILS;C:\Program Files\ASAP\;D:\!!_________
___prj\GUItasm\BIN;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland
\Delphi7\Projects\Bpl;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinN
T;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\M
icrosoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC9
8\bin;C:\Program Files\Boriel Tm\ZX Basic Compiler\;C:\Program Files\Borland\Del
phi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WS F;.WSH;.MSC
platform=windows
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2a07
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell \v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TARGET=C:\MinGW\zxtune-develop\src\devices\test\aycli
TEMP=c:\Temp
TMP=c:\Temp
USERDOMAIN=home-ПК
USERNAME=home
USERPROFILE=C:\Users\home
VBOX_INSTALL_PATH=c:\Program Files\Oracle\VirtualBox\
windir=C:\Windows
windows_tracing_flags=3
windows_tracing_logfile=C:\BVTBin\Tests\installpac kage\csilogfile.log
Для продолжения нажмите любую клавишу . . .
Не влезай- убъет.
Ты и с более простыми вещами справиться не смог, на что сейчас надеешься?
denpopov
16.04.2014, 09:07
Ты и с более простыми вещами справиться не смог, на что сейчас надеешься?
на то же самое, о чем и начал разговор: нужна dll-ка, где доступен в функциях вызов:
1.ctrl->Play();
2.data->Data[static_cast<Devices::AYM::Registers::Index>(reg)] = val;
3.ctrl->Stop();
Т.е. тулза тебе была не нужна?
denpopov
16.04.2014, 09:22
Т.е. тулза тебе была не нужна?
Тулза как раз нужна, просто на все цели её не зватит.
Забыл упомянуть, что static library нужна.
Тебя обременять просто неудобно.
Тулза как раз нужна, просто на все цели её не зватит.
Забыл упомянуть, что static library нужна.
Тебя обременять просто неудобно.
Так тебе dll нужна или static library?
Кури каналы ввода-вывода, поймешь как заюзать тулзу вместо длл.
denpopov
16.04.2014, 10:30
Так тебе dll нужна или static library?
в идеале обе
Кури каналы ввода-вывода, поймешь как заюзать тулзу вместо длл.
ну если я с простой задачей не справился, то я не знаю, что и курить.
denpopov
16.04.2014, 14:15
Vitamin, будб добр, сделай доброе дело, пожалуйстаhttp://www.picgifs.com/smileys/smileys-and-emoticons/praying/smileys-praying-000125.gif
среди моих знакомых никто в сях не шарит
Может ты конечную цель опишешь?
denpopov
16.04.2014, 16:54
Может ты конечную цель опишешь?
что описать?
нужна .dll, чтобы из нее можно вызвать три функции:
1.ctrl->Play();
2.data->Data[static_cast<Devices::AYM::Registers::Index>(reg)] = val;
3.ctrl->Stop();
функция 2 - запись в регистр значение.
что описать?
нужна .dll, чтобы из нее можно вызвать три функции:
1.ctrl->Play();
2.data->Data[static_cast<Devices::AYM::Registers::Index>(reg)] = val;
3.ctrl->Stop();
функция 2 - запись в регистр значение.
Нахрена все это нужно, включая длл. Тулзу я согласился делать потому что сам могу ее юзать для тестов. Писать вслепую ненужный *****код на выброс не хочу.
denpopov
16.04.2014, 17:12
Писать вслепую ненужный *****код на выброс не хочу
т.е. ты не знаешь, как написать .dll?
и потом, зачем на выброс?
и потом, зачем на выброс?
Затем что ты сам не знаешь что хочешь и будет постоянно просить допилить что-то (уже начинается). А мне это нахрен не надо.
denpopov
16.04.2014, 17:23
Затем что ты сам не знаешь что хочешь и будет постоянно просить допилить что-то (уже начинается)
ну.. если сделаешь, то это наверняка то, что было изначально в треде.
Тогда уж я от тебя отстану.
ну.. если сделаешь, то это наверняка то, что было изначально в треде.
Вот я и сделал то, что было изначально в треде- прогу-эмулятор аука с возможностью записи в регистры и прослушивания результата.
Если ты не знаешь С, на каком языке собрался писать клиента для длл?
denpopov
16.04.2014, 18:04
Если ты не знаешь С, на каком языке собрался писать клиента для длл?
хоспаде, какая разница? PureBasic или ассемблер - оба позволяют юзать гуи и обращаться к библиотекам.
Вот я и сделал то, что было изначально в треде- прогу-эмулятор аука с возможностью записи в регистры и прослушивания результата
да, верно, но простой сэмпл как будет выглядеть в тулзе?
хоспаде, какая разница? PureBasic или ассемблер - оба позволяют юзать гуи и обращаться к библиотекам.
Ну вот с тем же успехом PureBasic позволяет обращаться к бинарям, переопределяя их stdin.
да, верно, но простой сэмпл как будет выглядеть в тулзе?
Поток команд на входе stdin. А как ты собрался выдерживать темп записи в регистры?
denpopov
16.04.2014, 18:33
А как ты собрался выдерживать темп записи в регистры?
ой, это наверное медленно, да?
Ну вот с тем же успехом PureBasic позволяет обращаться к бинарям, переопределяя их stdin.
ни разу не видел примера.
ой, это наверное медленно, да?
Нет, это быстро. Очень. В этом и проблема- тебе надо писать от 0 до 13 регистров и держать паузу. Как ты это все собирался делать?
ни разу не видел примера.
Поищи в документации.
denpopov
16.04.2014, 18:53
Как ты это все собирался делать?
делать паузу? sleep() например.
Поищи в документации.
ну функцию я нашел, примера - шишь.
ну функцию я нашел, примера - шишь.
Экспериментируй. Дллку я делать не буду- считай что не умею.
denpopov
16.04.2014, 19:15
Экспериментируй
с моей тз это будет *****код.
Дллку я делать не буду- считай что не умею.
жаль( будем ждать подходящего момента значит..
---------- Post added at 19:15 ---------- Previous post was at 19:00 ----------
может, таки найдешь время?
denpopov
02.05.2015, 17:43
Славочка newart так и не поделился тем, что написал. Однако сервис заработал:
http://www.codeforge.com/dlpre/217474/319b2c7a4ec8.zip__.html?go_blog_box=1
кроме эмуляции в исходнике ГОВНОКОД!
Vitamin, спасибо, что ты сделал утилитку, мы с Гоблином так и не осилили её использовать:(
Хотелось бы твое мнение о качестве движка, как специалиста.
Vitamin, спасибо, что ты сделал утилитку, мы с Гоблином так и не осилили её использовать
Хотелось бы твое мнение о качестве движка, как специалиста.
Ммммм, а может это вы не смогли запустить мелодию?
denpopov
02.05.2015, 17:55
Ммммм, а может это вы не смогли запустить мелодию
а ты большой специалист штоле?
Vitamin, спасибо, что ты сделал утилитку, мы с Гоблином так и не осилили её использовать
Сочувствую.
Потратили кучу своих сил на уговаривание, несколько моих сил на выполнение, а на использование утилиты по своему же собственному ТЗ сил уже не хватило.
Хотелось бы твое мнение о качестве движка, как специалиста.
Я не специалист в качестве движков. И скачать хоть что-то с вышеупомянутого *****ресурса так и не смог.
denpopov
02.05.2015, 18:23
Потратили кучу своих сил на уговаривание, несколько моих сил на выполнение, а на использование утилиты по своему же собственному ТЗ сил уже не хватило
лана, пропущу шпильку так и быть. Одних экспортированных функций хватает.
а ты большой специалист штоле?
Нет. Но раньше у Витамина кое-чего не правильно работало. Однако всё было сделано как надо, а ущербные вроде тебя, пускай проходят мимо. Надоели вы... Вот ZXTune сделайте для начала.
denpopov
02.05.2015, 18:38
Однако всё было сделано как надо, а ущербные вроде тебя, пускай проходят мимо. Надоели вы...
прими эфтаназии жывотворящей и вали спать, пьянь:)
прими эфтаназии жывотворящей и вали спать, пьянь:)
Что, правда глаза заколола? :) Я не обижаюсь, просто. Просто на всякую хрень внимания не обращаю.
denpopov
02.05.2015, 18:43
Что, правда глаза заколола
какая правда-то? ты каждой бочке затычка что ли?
какая правда-то? ты каждой бочке затычка что ли?
Ну вот и обидеть хочешь. Не взлетит. Я не пробиваем. ;)
denpopov
02.05.2015, 18:58
Не взлетит. Я не пробиваем.
Желаешь быть умным - вали кукарекать во флейме.
52321
Вот моя эмуляция, на С простая по сути в одну функцию + одну структуру с контекстом
Пашет норм ваще =)
Если кому надо - юзайте не жалко
в коде ZXMAK2 можно посмотреть эмуляцию AY, код там из двух частей - одна общая для всех звуковых устройств - ресэмплер в SoundDeviceBase и вторая, PsgChip - собственно сама эмуляция счетчиков и миксера AY. Раздельный код будет легче понять. Т.к. в эмуляции AY не накручено фильтров и всяких мэджик функций - только сама логика AY. На выходе набор вызовов UpdateDac, с указанием частоты дискретизации, времени относительно фрейма и сэмплами. Остальным занимается ресэмплер, формируя из набора этих вызовов выходной поток с нужной частотой дискретизации.
Пашет норм ваще =)
Есть косяки:
1) шум сделан неправильно.
2) ЕМНИП, счетчики с периодом 0 работают как с периодом 1 (а не с периодом 2^32).
3) перезапись регистров делителей не сбрасывает счетчики
denpopov
28.05.2015, 15:29
в коде ZXMAK2 можно посмотреть эмуляцию AY, код там из двух частей - одна общая для всех звуковых устройств - ресэмплер в SoundDeviceBase
на #z80 видел утверждение, что ты стырил код с Унрыла. Это так?
на #z80 видел утверждение, что ты стырил код с Унрыла. Это так?
Эмуляция проца тоже с анрила попячена. Пруф: https://dlcorp.nedopc.com/viewtopic.php?p=35811#p35811
А вот пруф про тыренье кода AY: https://dlcorp.nedopc.com/viewtopic.php?p=33362#p33362
"Мегабугага, код воспроизведения звука тоже взят из унриала, и даже алко-говна заботливо скопированы:"
zxmak>>вг93, hdd и фильтр для звука из unreal взяты. Еще миксер каналов для AY тоже из unreal, но в миксере каша, нужо переделывать. Сам AY свой.
Фильтр для звука не так и давно был прикручен - после жалоб на некачественный бипер. Сейчас на AY в unreal посматриваю...
Оказывается, программисты иногда используют чужие исходники. Какой кошмар! А мужики-то не знают!
Lethargeek
28.05.2015, 19:39
СКАНДАЛЫ ИНТРИГИ РАССЛЕДОВАНИЯ
на #z80 видел утверждение, что ты стырил код с Унрыла. Это так?
да, часть кода взята из Unreal - таблицы для флагов z80, код реcэмплера для звука, также недавно заюзал миксер AY, т.к. в старом ZXMAK2 миксер работал некорректно. Код ресэмплера и миксера отрефакторен, ресэмплер был немного пофикшен т.к. в оригинале индекс иногда вылетал за пределы массивов. В ресэмплере unreal были какие-то костыли, насколько понял для обхода проблем с индексами, но они не работали при изменении частот. Ну и "говна" выброшены :smile:
Да, еще амплитуда AY выровнена до полного диапазона, т.к. в оригинале используется только половина диапазона, поэтому звук тихий.
Так что звук в ZXMAK2 сейчас такой-же как в Unreal, есть какие-то мелкие отличия из-за фиксов и рефакторинга, но в общем должно быть одинаково.
Захардкоженые таблицы z80 хотел заменить на вычисляемые, но пока до этого не дошел.
Сейчас сделал новый многопоточный рендерер для видео, проблемы с ошибками при ресайзе удалось полностью устранить. Тестирую... :smile: нужно еще пофиксить детектирование перемещения окна на другой дисплей, чтобы рендерер автоматически перестраивался на другой адаптер. Новый вариант пока не комиттил, в процессе тестирования :)
Новый рендерер цепляется за HWND и поток UI может вообще не использовать - все плавненько и красиво :smile:
Решение оказалось простым - сабклассинг hwnd для перехвата сообщений, поэтому странно что несмотря на обилие вопросов в инете по проблемам Direct3D в многопоточном режиме, ни одного решения не опубликовано.
Теперь рендер видео, рендерер звука, эмуляция машины и UI - все работают асинхронно, в отдельных независимых потоках синхронизируясь только во время смены кадров :smile:
После фикса для поддержки смены видеоадаптера на лету, хочу добавить интерполяцию цвета для ресемплера частоты кадров дисплея и поддержку фильтров на шейдерах, которые можно будет просто подсовывать эмулятору в виде исходного текста на HLSL. Будет типа эмуляция сетки ЭЛТ трубки, всякие цветовые эффекты (black'n'white, sepia, inverse, etc), motion blur и т.п. :biggrin:
Дальше планирую отрефакторить архитектуру, в особенности UI, т.к. сейчас все слишком сложно и запутано.
прошло пару лет и я нашел этот пост ахахах слушай а как шум правильный сделать? в чем неверность?
- - - Добавлено - - -
Есть косяки:
1) шум сделан неправильно.
2) ЕМНИП, счетчики с периодом 0 работают как с периодом 1 (а не с периодом 2^32).
3) перезапись регистров делителей не сбрасывает счетчики
напиши если помнишь что не так с шумом - поправлю счас как раз понадобилось =))
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot