Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_vis_milk2 (Read 84397 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Re: foo_vis_milk2

Reply #25
Tested v0.0.230-alpha with a subset of Geiss's favorite presets & textures extracted into milkdrop2/presets and milkdop2/textures directories and can confirm this works as expected! Whatever the code quality, you really did a nice job.

I just noticed few hints that could be nice to improve/fix:
  • The preset loader is rather broken when invoked with the help opened
  • The song title seem to come straightly from the playlist. I would love to get an evaluated one in the mood of the Window title for example, in order to get the details from streams
  • The title animation at song change doesn't seem to work
  • Changing basic component parameters while it is working doesn't seem to make it crash most of the time, but the changes often require a foobar restart to be applied
  • The framerate limiter doesn't seem to work above 40 fps which seem the highest I could get

Re: foo_vis_milk2

Reply #26
Thank you @Dfaure.
  • I'll look into the preset loader rendering. It was working fine for me and could navigate the whole directory tree up/down--scary enough that I put a limiter so it can't easily jump out the foobar2000 profile directory. I'll try hard to make it look bad so that I can fix it.
  • Not exactly, the song title field comes from the metadata and simply grabbing "%title%". Am I understanding correctly that what you want is to be able to customize that into say any arbitrary metadata display? Complex stuff like these or something else?
    Code: [Select]
    [%album artist% - ]['['%album%[ CD%discnumber%][ #%tracknumber%]']' ]%title%[ '//' %track artist%]
    %codec% | %bitrate% kbps | %__bitspersample% bit$ifequal(%__bitspersample%,1,,s) | %samplerate% Hz | $caps(%channels%) | %playback_time%[ / %length%]
    May be a nice addition to the preferences.
  • Do you mean the 3D flying animated song title that is in the DirectX 9 version? If so, I haven't ported that yet and forgot to grey out that and the custom messages which are definitely works-in-progres.
  • Unless you're changing the advanced preferences the changes should take without restarting on the next frame render. Some might be unstable if changed during running. If I'm not mistaken Winamp makes you stop the visualization to launch the configuration window. (BTW, have not found how foobar2000 lets components know changes have been applied in advanced prefs).
  • The frame rate runs off the Win32 timer, you're seeing basically the limit of how fast that can pump messages into the window. I don't think it'll run in single-digit milliseconds. If the limiter is faster, it will not be the limiting factor. I'm looking into migrating to the threadpool timer, a timer queue or (my preference) the StepTimer that uses QFC directly. Just be careful to not burn out your GPU.

Thanks for the feedback.

Re: foo_vis_milk2

Reply #27
Many thanks for the effort!
Unfortunately Foobar freezes and doesn't even make a crash report when I can get it to close (on Win10 x64 on v0.0.230).
Any hints on what I can do to make it run?

Re: foo_vis_milk2

Reply #28
Nevermind, deleting the 'config.sqlite' file did the trick!
So the presets have to be downloaded externally?

Re: foo_vis_milk2

Reply #29
My apologies for not reading properly, I found in the component description the link to the Milkdrop author's favorite presets which is more than adequate.
Many thanks again!!

Re: foo_vis_milk2

Reply #30
I'll look into the preset loader rendering. It was working fine for me and could navigate the whole directory tree up/down--scary enough that I put a limiter so it can't easily jump out the foobar2000 profile directory. I'll try hard to make it look bad so that I can fix it.
Indeed, that's working as expected, but as soon as the milkdrop window is displaying both the help message and the preset browser, the latter doesn't handle very gracefully the scrolling, leading to overlapping preset names.

Not exactly, the song title field comes from the metadata and simply grabbing "%title%". Am I understanding correctly that what you want is to be able to customize that into say any arbitrary metadata display? Complex stuff like these or something else?
Code: [Select]
[%album artist% - ]['['%album%[ CD%discnumber%][ #%tracknumber%]']' ]%title%[ '//' %track artist%]
%codec% | %bitrate% kbps | %__bitspersample% bit$ifequal(%__bitspersample%,1,,s) | %samplerate% Hz | $caps(%channels%) | %playback_time%[ / %length%]
May be a nice addition to the preferences.
That's it. While playing streams saved as playlist entries, I couldn't get the artist+title which is dynamically defined along the streaming.

Do you mean the 3D flying animated song title that is in the DirectX 9 version? If so, I haven't ported that yet and forgot to grey out that and the custom messages which are definitely works-in-progres.
This explains that.

Unless you're changing the advanced preferences the changes should take without restarting on the next frame render. Some might be unstable if changed during running. If I'm not mistaken Winamp makes you stop the visualization to launch the configuration window. (BTW, have not found how foobar2000 lets components know changes have been applied in advanced prefs).
I'm far from familiar with the Foobar SDK. Could'nt really help here, but I noticed that crashes occurred mainly when altering the mesh size.

The frame rate runs off the Win32 timer, you're seeing basically the limit of how fast that can pump messages into the window. I don't think it'll run in single-digit milliseconds. If the limiter is faster, it will not be the limiting factor. I'm looking into migrating to the threadpool timer, a timer queue or (my preference) the StepTimer that uses QFC directly. Just be careful to not burn out your GPU.
In fact, I was limiting it to 60Hz and couldn't have it reaching that frequency.

Thanks for the feedback.
You're welcome

PS: I'll PM you a crash dump

Re: foo_vis_milk2

Reply #31
Source code posted publicly. The URL is on the component page.

Some notes:
  • This is a personal project for which I had never had any intention to grow beyond a single user (me). All development has been done in my spare time, outside of my professional obligations.
  • I am not a graphics programmer nor have any professional experience in that area.
  • I have only tested the component on a single machine, a single graphics card and a single monitor.
  • I do not code sign the DLL, so be cautious of the provenance of your builds.
  • While the DLL is linked to NOT have any UAC or elevated privileges beyond what the application loading the DLL has, foobar2000 does try to elevate during install and at other times. Be mindful of security and run your applications and this DLL in the most isolated environment practicable.
  • I am not affiliated with the foobar2000 developers, the projectM developers, the Winamp team or Nullsoft.
  • Regarding licensing, I tried to be thorough in documenting provenance of all source code. Nevertheless, there might be some oversights.

-oops

Re: foo_vis_milk2

Reply #32
Well I'm far too stupid to compile that / attempt CUI support. Someone else can have a go.

I can't even add references to the fb2k SDK/CUI SDK projects after adding them in the right place. VS is saying nope. :/

Also, I have no idea what this crapola is.

Code: [Select]
1>-- Could NOT find BISON (missing: BISON_EXECUTABLE) (Required is at least version "3.8")
1>-- Could NOT find FLEX (missing: FLEX_EXECUTABLE) (Required is at least version "2.6")

cmake is alien to me. Could google it but... nah. :P

Re: foo_vis_milk2

Reply #33
Those messages come from the ProjectM evaluator. It uses CMake. Bison and Flex are the parser and lexer that generate Compiler.[ch] and Scanner.[ch] in that subrepo. But this project is purely MSBuild-based. I'll break down step-by-step how to set up and compile the component. However, if you can follow the GitHub Actions workflow, you'll find all you need.

Re: foo_vis_milk2

Reply #34
A step-by-step on how to compile:
  • Install Visual Studio 2022 and Git. Clone the repository. "Open a project or solution" and point it to the foo_vis_milk2.sln file.
  • Ensure you have all you need for Visual Studio by doing Tools->Get Tools and Features... In the installer that comes up hit the More dropdown and select Import configuration. In the file selection dialog, point it to .vsconfig in the repo to install things like NuGet, ATL and a few other things.
  • In Solution Explorer, if the "foo_vis_milk2" project is not bold font, right click on it and select Set as Starter Project
  • In Solution Explorer again, right click on the Solution 'foo_vis_milk2' line at the top and select Manage NuGet Packages for Solution. Use the tab that comes up to install DirectXTK and WTL; they should be pre-populated but you can search if not. I ignore dependencies, but you can install XAudio if you find it simpler than tinkering with the options.
  • Download the foobar2000 SDK and place it in the external directory according to the file layout in the README. Then use the CLI (PowerShell below) to patch it:
    Code: [Select]
    Set-Location -Path "path\to\repo"
    Set-Location -Path "$(Get-Location)\external"
    git init
    git add foobar2000\ libppui\ pfc\
    git commit -m 'Initial commit'
    git apply --ignore-whitespace --whitespace=nowarn --verbose "$(Get-Location)\fb2ksdk.patch"
    Remove-Item -Path "$(Get-Location)\.git" -Recurse -Force
  • Clone the projectm-eval repo into the external directory and patch it in a similar manner to the SDK:
    Code: [Select]
    Set-Location -Path "path\to\repo"
    Set-Location -Path "$(Get-Location)\external\projectm-eval"
    git apply --ignore-whitespace --whitespace=nowarn --verbose "$(Get-Location)\..\pmeel.patch"
  • Then just select your desired build configuration, for example Debug x64 and do Build->Build Solution.
  • For quick debugging I have this in my foo_vis_milk2.vcxproj.user (obviously all configs but only including Debug x64 to illustrate--obviously your install locations may be different). It includes how to attach foobar2000 to the debugger and update the version of the component DLL with the most recent build:
    Code: [Select]
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
        <LocalDebuggerCommand>$(LocalAppData)\Programs\foobar2000_x64\foobar2000.exe</LocalDebuggerCommand>
        <LocalDebuggerDebuggerType>NativeOnly</LocalDebuggerDebuggerType>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
      </PropertyGroup>
      <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
        <PostBuildEvent>
          <Command>copy "$(TargetPath)" "$(LocalAppData)\Programs\foobar2000_x64\profile\user-components-x64\foo_vis_milk2"</Command>
        </PostBuildEvent>
        <PostBuildEvent>
          <Message>Copying "$(TargetFileName)" to components directory...</Message>
        </PostBuildEvent>
      </ItemDefinitionGroup>
    </Project>
  • As a bonus, for the Columns UI SDK you can download it and place it in the external directory. Then in Solution Explorer, right click on the Solution 'foo_vis_milk2' line at the top and select Add->Existing Project.... In the file picker find columns_ui-sdk-public.vcxproj and click the Add button. Then follow their documentation.

Re: foo_vis_milk2

Reply #35
Okay, I've been trying out the component for a bit. At first the problem appeared to persist despite the update; adding the UI element froze foobar and I had to close it using task manager, however, after tinkering around for a bit, I decided to mess around in the settings before adding the UI element, this fixed the issue. Just to make sure, I checked returning to the previous settings, which didn't replicate the issue, so I assume there must've been some leftover glitched out configuration from the previous version that was cleaned up when playing with the settings (It may have been the same thing Wabznazm was experiencing).

Some other issues I've observed:
  • It appears that setting mesh size to anything other than minimum (8x6) consistently crashes foobar for me (If I'm not mistaken, this is default, despite 48x36 being labeled as default)
  • The "Reset page" button on the context menu doesn't appear to work
  • It's a minor detail, but the time between automatic preset changes and the threshold for hard cuts were both set to minimum when I finally got the component working, so the display was initially strobing like crazy.
  • The keyboard menus can cause crashes. Pressing L twice or scrolling to the bottom of the presets menu consistently crash foobar for me.
  • The "previous preset" button on the context menu appears to make the preset title in the context menu get stuck.

Regardless, I'm really enjoying this component, all the patches I've tried seem to work pretty well and run very smoothly and I've been having lots of fun trying them out! Thanks for sharing this great work and even making it open source! :)

Re: foo_vis_milk2

Reply #36
there is something called milkdrop3. it works on ANY audio source.

Re: foo_vis_milk2

Reply #37
Couple of issues trying this here today.

Firstly, right clicking on the Milkdrop window instantly crashes Foobar (bug report sent).

Secondly, changing the default preset folder in the Advanced Preferences doesn't stick. Change it, hit Apply, OK, then go back to the same setting and it changes itself back to the default: C:\Users\...\AppData\Roaming\foobar2000-v2\milkdrop2\presets\

Re: foo_vis_milk2

Reply #38
there is something called milkdrop3. it works on ANY audio source.

Yea but I like in the UI as its on a tab below my playlist where I can pick other visualizers.

I have it working. I had to just export all the presets to the correct appdata roaming folder on a fresh x64 install. One thing I noticed is that if I right click on the tab of milkdrop it crashes foobar every time. I used to run an older integration of milkdrop and I think that used to have a right click menu where you could pick the option to go fullscreen.

One other issue at the moment, when I set foobar to always on top, when I double left click on milkdrop tab then it goes a type of fullscreen but foobar is still over the top. In the old version it would go fullscreen and over ride that. It looks like its in fullscreen windowless mode which is fine. I just have to remember if I want fullscreen to disable always on top.

Other than that its working perfect.

Re: foo_vis_milk2

Reply #39
Only one suggestion for this component so far: An option to skip conversion to 8-bit samples (thus skipping mapping from 0...255 to -1...+1 values since floating-point samples already have -1...+1 range to begin with)

Since foobar2000 obviously gives an array of 64-bit floating point samples to visualizations, which contains some samples outside -1...+1 range (aka. above 0dBFS samples) and aren't clipped nor wrapped-over, and AFAIK the effects of directly using floating-point samples rather than a downconverted one (especially where it is ported to a player that gives floating-point samples to visualizations rather than 8-bit integers) are noticeable on some presets (e.g. waveform visualizations that are very sensitive like high "size" value for simple waveform and/or extreme "scaling" value for custom waves) and in case of highly-amplified or extreme bass boosted audio input (exceeding +6dBFS), the waveform no longer clips nor wraps around

Re: foo_vis_milk2

Reply #40
Thanks for all the effort.  Really nice to have these visualizations

Is there a way to adjust the resolution of the full screen?  There is a thin white pixelated border around the visualization window, even with a dark theme installed.   My concern is screen burn in.   Any tips would be greatly appreciated

Re: foo_vis_milk2

Reply #41
Released 0.0.250-alpha! There is a lot in there and most of the changes are due to your comments so let me add some clarifications.

... I assume there must've been some leftover glitched out configuration from the previous version that was cleaned up when playing with the settings (It may have been the same thing Wabznazm was experiencing). ...

  • It appears that setting mesh size to anything other than minimum (8x6) consistently crashes foobar for me (If I'm not mistaken, this is default, despite 48x36 being labeled as default)
  • The "Reset page" button on the context menu doesn't appear to work
  • It's a minor detail, but the time between automatic preset changes and the threshold for hard cuts were both set to minimum when I finally got the component working, so the display was initially strobing like crazy.
  • The keyboard menus can cause crashes. Pressing L twice or scrolling to the bottom of the presets menu consistently crash foobar for me.
  • The "previous preset" button on the context menu appears to make the preset title in the context menu get stuck.

Regardless, I'm really enjoying this component, all the patches I've tried seem to work pretty well and run very smoothly and I've been having lots of fun trying them out! Thanks for sharing this great work and even making it open source! :)
  • On the mesh sizes, I don't know much about them. I'll have to read the original MilkDrop source to have an answer. The preferences page simply aims to pass the "original" INI file options directly to the library; the defaults were taken from the assignments in the source code.
  • The "Reset page" button and the change detection does appear to work in the MilkDrop preferences page. This has been untouched for a bit so not sure if I can reproduce this.
  • This is likely due to my mishandling of the preferences version update. Should not be an issue going forward and new installs should have "safe" defaults.
  • I believe I've fixed these preset loading menu navigation and crashes in version 250.
  • The previous preset behavior you see is a strange one. You need to create a history/stack of presets before you can go back to previous. But your observation is correct, the context menu preset name can go out-of-sync with the actual visualizer state. I believe this is a bug in the original. I've added a few extra calculations to keep the preset loading menu as well as the context menu in sync with the state in version 250.

there is something called milkdrop3. it works on ANY audio source.
Looks nice, thanks for bringing it to my attention. It looks like just the original MilkDrop released wrapped with an audio capture shim to pass the data down. Fun times.

... Firstly, right clicking on the Milkdrop window instantly crashes Foobar (bug report sent).

Secondly, changing the default preset folder in the Advanced Preferences doesn't stick. ...
I can't reproduce it on my machine so it might be fixed. Try version 250 as that is built with the latest Visual Studio version and SDK; I hope that didn't make it worse. And thanks for noticing this Advanced Preferences bug, I think it is fixed in version 250. However watch out that the changes to advanced preferences are only applied if/when the visualization is not running. If the visualization is running it appears that the changes are made but they will revert when the component exits. For 2 reasons:
  • There is no change notification in the SDK for Advanced Preferences.
  • Consequently, changes are only detected during initialization and (for now) those initial values are written back on quit. My reasoning for this is that the Advanced Preferences are sensitive values and easy to cause misbehavior, so all of the validation happens at the start and a working configuration should not be overridden at runtime.

Yea but I like in the UI as its on a tab below my playlist where I can pick other visualizers.

... One thing I noticed is that if I right click on the tab of milkdrop it crashes foobar every time. I used to run an older integration of milkdrop and I think that used to have a right click menu where you could pick the option to go fullscreen.

One other issue at the moment, when I set foobar to always on top, when I double left click on milkdrop tab then it goes a type of fullscreen but foobar is still over the top. ...

Other than that its working perfect.
I prefer to have it in the UI as well! The right click context menu is in the component with the fullscreen option. But I'm sorry to hear it crashes. See if version 250 fixes your crashes. That said, I think I've fixed the "Always on Top" issue. Most of the other visualizations experience the same bug because in Default UI using SetWindowPos (the standard Win32 way) does not work because foobar2000 appears to reset itself to TOPMOST forcefully when this setting is enabled. Hooking into foobar2000's main window might get this component blacklisted. So, in version 250 I'm trying to figure out what foobar2000's window is up to at the time of fullscreening then unsetting and resetting the program's setting accordingly as a workaround. Definitely a case of this.

Only one suggestion for this component so far: An option to skip conversion to 8-bit samples (thus skipping mapping from 0...255 to -1...+1 values since floating-point samples already have -1...+1 range to begin with)

Since foobar2000 obviously gives an array of 64-bit floating point samples to visualizations, which contains some samples outside -1...+1 range (aka. above 0dBFS samples) and aren't clipped nor wrapped-over ...
I've added the option in the preferences to enable this without a backing implementation. If you want to submit a patch/pull request feel free. Some notes:
  • With foobar2000 there is no "obviously". While the SDK is very thorough, it is not documented at all so there is nothing obvious about any of the things it does. See fullscreen being different between embedded and windowed or the very aggressive topmost behavior as examples.
  • Looked into this and it requires changes to the `vis_milk2` audio processing internals. I'm not experienced enough in DSP to get this even remotely close to correct without many attempts.
So, if you know how or can point to a reference implementation/library I can consider it. Otherwise, we'll have to live with the "smoke and mirrors" following in the grand tradition of computer audio.

Thanks for all the effort.  Really nice to have these visualizations

Is there a way to adjust the resolution of the full screen?  There is a thin white pixelated border around the visualization window, even with a dark theme installed.   My concern is screen burn in.   Any tips would be greatly appreciated
I see the border too. Agree on it being really annoying. There are 2 issues here:
  • At the bottom and right side there is some flashing/strobing. I managed to isolate it to the blending of the comp[osite] shader. This one, I don't know whether it's a rounding error or something else. I'll let someone more familiar with graphics programming chime in.
  • The 1 pixel border around all 4 screen edges. This one does not seem to come from the DirectX rendering. I tried many ways to get rid of it such as blacking out the screen before drawing each frame and adjusting the viewport a couple of pixels to hide it but haven't zeroed in on the right code. Think I stumbled on the solution by accident in version 250. Let me know if it's gone.

Happy many of you are enjoying playing with the visualization!

Party on.
-oops

Re: foo_vis_milk2

Reply #42
@oops
Hi.
It seems to crash if the path of "foobar2000.exe" contains double-byte characters (Japanese).
"C:\foobar2000 Portable\foobar2000\foobar2000.exe" doesn't crash.

MilkDrop 2 Visualisation 0.0.250-alpha (foo_vis_milk2) 2024-08-16
foobar2000 v2.2 preview 2024-08-14 | 64-bit
Windows 11 Pro 23H2 22631.4037

"C:\foobar2000 Portable\foobar2000\foobar2000.exe"

SHURE SRH1840, SENNHEISER HD660S2, SENNHEISER HD620S, SENNHEISER HD 490 Pro Plus, beyerdynamic DT 1990 PRO, HiFiMAN Edition XS, HIFIMAN ANANDA, Bowers & Wilkins P7, FiiO FT5, FiiO FT1 Pro, 水月雨 (MOONDROP) 空鳴 - VOID, SONY WH1000XM5 (made a Upgrade/Balanced Cable by myself)

Re: foo_vis_milk2

Reply #43
@oops
Hi.
It seems to crash if the path of "foobar2000.exe" contains double-byte characters (Japanese).
Thanks for letting me know Air KEN and sharing the dump. I think I was able to fix the problems, at least the initialization and basic functionality. But only have done minimal testing. Watch for a new release (251 or above) shortly. Though I'm surprised not more components face similar issues because the core API of the foobar2000 SDK returns the profile directory path as single-byte characters. So Win32 it is! Since there is much of the old file manipulation still in the MilkDrop2 library, my advice is to keep your file and directory paths under 260 characters.

Re: foo_vis_milk2

Reply #44
Perhaps you should take a moment before releasing a new version and study the SDK a bit closer. All strings in foobar2000 use UTF-8 encoding and all the SKD file access methods handle things properly. And they are not limited by ancient path length restrictions.

Re: foo_vis_milk2

Reply #45
@oops and @Case
Thanks.
SHURE SRH1840, SENNHEISER HD660S2, SENNHEISER HD620S, SENNHEISER HD 490 Pro Plus, beyerdynamic DT 1990 PRO, HiFiMAN Edition XS, HIFIMAN ANANDA, Bowers & Wilkins P7, FiiO FT5, FiiO FT1 Pro, 水月雨 (MOONDROP) 空鳴 - VOID, SONY WH1000XM5 (made a Upgrade/Balanced Cable by myself)

Re: foo_vis_milk2

Reply #46
Case can you please share the UTF-8 equivalents for get_profile_path() and get_my_full_path()? Please believe that I made an honest search (in these forums, the SDK itself and the debugger) before coding std::wstring alternatives.

As for the second part, breaking the MAX_PATH limit would be a bad assumption because not all of us have overridden LongPathsEnabled in our OS. Further, independent of how foobar2000 might handle things internally, this component still must find, list, compile, modify and validate presets and shaders for which there is no functionality inside foobar2000 and lots of this code predates Windows 10--the bug Air KEN uncovered was that the component is using get_profile_path()'s return value as the base directory for all operations. That return value contained mangled replacements for the multi-byte characters.

Re: foo_vis_milk2

Reply #47
@oops
MilkDrop 2 Visualisation 0.0.260-alpha (foo_vis_milk2) 2024-08-18

Perfect. Thanks.
SHURE SRH1840, SENNHEISER HD660S2, SENNHEISER HD620S, SENNHEISER HD 490 Pro Plus, beyerdynamic DT 1990 PRO, HiFiMAN Edition XS, HIFIMAN ANANDA, Bowers & Wilkins P7, FiiO FT5, FiiO FT1 Pro, 水月雨 (MOONDROP) 空鳴 - VOID, SONY WH1000XM5 (made a Upgrade/Balanced Cable by myself)

Re: foo_vis_milk2

Reply #48
Like I said, strings in foobar2000 are in UTF-8 encoding. You get profile path in UTF-8 simply by calling core_api::get_profile_path();
All SDK file access methods you can find for example in filesystem.h take these UTF-8 encoded strings.

If you for some reason want to bypass foobar2000 file access you can convert the UTF-8 string to OS-native strings with functions in PFC's string_conv.h. Note that the paths returned by foobar2000 have a protocol marker at the beginning so you'll need to check if string starts with "file://" and skip that.

The long path support in foobar2000 predates the manifest + policy method introduced in Windows 10. NTFS has supported 32768 character long paths since the dawn of NT days as long as path is prefixed with \\?\. That's how foobar2000 does it. There are no 260 character length limits in foobar.

Re: foo_vis_milk2

Reply #49
I'm seeing a few cosmetic issues.

My system has two monitors, both set to 1920x1080, with "Extend" desktop turned on. FB2K always runs windowed on monitor A.

If I maximize Milkdrop, by double-clicking on its docked window. It looks good full screen. But if I press [win+shift+right], or [win+shift+left], to move it between monitors, it shows a window border. Does anyone else see this behavior? Maybe the maximized window style needs to be changed to no frame or border? Or the origin changed? Hope you can figure it out.

Also, it would be great if the docked window inside FB2K could get smaller than 320x200. Maybe 200x200, or even 150x150.

And if Milkdrop is full screen, task switcher shows a generic icon. Would it be better if it showed a FB2K, or a Milkdrop, icon? And also the docked window place holder shows a frozen Milkdrop image - maybe indicate somehow it's running full screen.

Anyway, thanks for your great work on getting Milkdrop running in 64bit FB2K. It's really appreciated!

Take care.