Saturday, February 14, 2026

Introducing the new better MakePlaylist

MakePlaylist is a computer program I started writing in 2022 to generate playlists for background music, which I like to play nearly all the time since then.  Every day, at the click of a mouse, I create a playlist chosen randomly from all the folders of music I consider good for background music.  I generally use Roon to do the actual playback, but many if not most music playing programs will read the standard .m3u playlist files MakePlaylist generates.

I never thought any random playing system before mine worked correctly, and now I see why.

Unlike most random play functions, MakePlaylist by default uses Random-Without-Replacement (RWOR) meaning I will hear everything once before anything is played twice, and this is true not for just one playlist but every playlist you make until you have actually heard everything in your collection (or selected folders).  The effect of this is profound.  More typical Random-With-Replacement (RWR) (or RWOR in just one session) can take 7 times longer to actually play everything at least once, and some things will by random chance be played dozens of times more than that.*  Those things being played a lot may well be the things you like least.  And if the random drawing system is biased, it could be worse.  

Managing RWOR across multiple sessions requiring keeping a history, and that is one thing MakePlaylist does.

MakePlaylist has many other features, including 4 different random modes in all, folders can be weighted relative to one another, and you can select subsets of files based on creation date and/or file type.  You can make playlists with either Albums or individual Songs.

Although MakePlaylist is built around the idea of random selection, you can easily prepend chosen titles, or shuffle in favorites and fairly new items.  MakePlaylist comes with another program ShufflePlaylist to shuffle multiple playlists together.  And TrimPlaylist lets you trim the early part of a playlist that you have actually played, or remove the following items you didn't play from the played history--which is crucial in keeping the RWOR system working as well as it can, but only if you only listen to a handful of titles in very long playlists with huge libraries will RWOR give slower coverage than typical RWR.  I've determined there is a set of parameters where that happens using another included program TestPlaylist which runs coverage tests using as many runs of MakePlaylist as necessary to get to full coverage of a set of folders.

I routinely build my playlists like this: a header section containing the newest files less than 3 days old, and a middle section which combines randomly selected items from my entire library shuffled with favorite items and further shuffled with items less than 60 days old.  An alternative to mixing in favorite items would be to use folder weighting, which I do in some cases.

Using such a method (illustrated in one of the scripts) one doesn't need to manually create header playlists for new items, a header is automatically prepended with the newest files.

In addition to making standard .m3u playlists, MakePlaylist can make folders of "links" pointing to the original files.  These folders take very little space and can be deleted later.  Some playing programs can't read playlists, but they can either load a folder of files, or you can cut and paste files from that folder into the playing program. 

So then there is another program to shuffle links-folders ShuffleLinks, and one to pre-pend one links folder to another PreLinks.  (With ordinary playlists, you can append and prepend them with the terminal cat command, but a special program was needed to "prepend" ordered links folders that MakePlaylist creates.)

MakePlaylist requires Tcl, which is generally available on MacOS and linux systems.  On MacOS you can simply download the MakePlaylist distribution and run the programs right away.

On Microsoft Windows you must load something like Windows Subsystem for linux, and then install Tcl from Hombrew or other online source.

You can download MakePlaylist at SourceForge here.  MakePlaylist is Free Software.

Since the Tcl source code is the program, it's entirely transparent, even with a very basic understanding of programming you can see what it is doing, and the code is very well documented.

You will download a .zip file, and if it was not unzipped automatically during download, you can just click on it and it will unzip into a folder now named:

MakePlaylist_all_10131

(or whatever the latest version is)

Open that folder in Finder, and it looks like this:


If you want to read the installation instructions, open 1st.README.txt.

At this point, you can simply open the bin folder and click on (or use Open With Terminal) to run any of the included programs.  The first time, MacOS will refuse to run them, but then you go to the Privacy and Security panel of your System Settings, and it will say MakePlaylist was blocked, and you can give it permission to run.

Formal installation is described step by step in the file 1st.README.txt, which you can click on to read.  It is just moving the files in the bin folder to your HOME bin folder, if you have one,  or use the included bin folder as the beginning of a new one.  And then adding that bin folder to your shell startup, which is now .zshrc on macs, if it isn't already there.  And then you can customize as needed and move the User Scripts ... files to your Desktop or other location.  And then to run those scripts from the Desktop, you can just click on them, to construct basic playlists you might want daily (these are non-interactive).  That is how I use MakePlaylist, through scripts that often combine playlists in different ways.

MakePlaylist programs run in 3 different ways.  You can just click on programs to run them.  You can open a Terminal and give MakePlaylist commands.  Or you can write scripts that use MakePlaylist and other programs.  Once created, those scripts can be just clicked on to run.

Although I myself have generally been using MakePlaylist based scripts, I realized recently I could make the program accessible to more people by making all the programs interactive so beginners can get used to them before writing scripts.

One cool thing that MakePlaylist can do is list either the files which have been played, or the files that have not yet been played.  Or it can show how many files have been played each number of times, either from the beginning of MakePlaylist history or in the current epoch (since that last time that all files were played and a history reset was done).  In my background music folder (~/itunes) this looks like this:

itunes% MakePlaylist -epoch -statc *


Played   Titles

------   ------

     1   126

     0   610

This shows that I am using the default RWOR mode, since all files have been played either once or twice since the last reset.

With TestPlaylist, one can run tests on MakePlaylist to see when and if it will actually play all the files.  With the default RWOR mode, this is pretty boring.  The "1" plays number gets larger until the "0" number goes away, and you get a result that looks like this:

Iteration 25

Played   Titles

------   ------

     2   18

     1   714


Options are -albums

Length is 30

Thus, it took 25 playlists of 30 albums each to cover the entire collection of albums at least once, and only the last 30 album playlist started playing some playlists a second time.

Using RWR (MakePlaylist option -wrd) the result is very different:

 Iteration 164

Played   Titles

------   ------

    14   4

    13   7

    12   11

    11   33

    10   43

     9   65

     8   104

     7   119

     6   115

     5   92

     4   66

     3   32

     2   32

     1   8


Options are -wrd -albums

Length is 30


With RWR, it took 164 playlists until full coverage was achieved.  When it was finally achieved with the 164th playlist, some albums had been played as many as 14 times.


Monday, January 26, 2026

Fixing the Image Center

THE PROBLEM

Nowadays I mostly use the "Movie EQ," which optimizes the back of the room listening position.  It definitely works best for background music anywhere in the house.  The "Hotseat EQ" only works good at the "Hotseat" a few feet from the speakers, where I do really really serious listening.  But I've hardly had any time for that recently, and it also requires dragging the listening chair into the Hotseat position and putting it back afterwards, which I'm generally too lazy to do.  I've been keeping the living room ready to show a movie on short notice, and I've typically been watching one movie per week with friends.  And most of the listening I do is background music listening anyway, for which the Movie EQ works best.

Back when I last fixed the Movie EQ in September 2025, I simply removed the midrange EQ's  from 200-1000 Hz which had been worked up for the Hotseat EQ in 2024.  At the back of room position, they did more harm than good.  I didn't really have time to cook up a new Movie EQ for the midrange, as I had done for the Hotseat EQ a few years before.  I left unchanged the upper frequency EQ's, whose basis was mostly subjective (objectively they caused some rolloff above 2k, which I rationalized as the "extended Gundry/Linkwitz dip" needed for large dipolar panel radiators like my Acoustat 2+2's).  The resulting response looked flat enough and it sounded great in the back of the room.  I felt it was nearly as good as the Hotseat EQ is at the Hotseat position, but without all the fiddly midrange adjustments.  Anti-EQ fans would naturally think it better with less EQ also.

But there was a very annoying flaw in the ointment.  If I adjusted the two channels so they were at the same measured SPL level on pink noise, AND the same subjective loudness when played one speaker at a time, the center of a stereo image often seemed to be on the right side, just about at the position of the right Acoustat speaker!  Often lead performers who I knew had to be in the center was coming from the right.  That kind of thing bugs the crap out of me.

I just had to correct that somehow.  The quick fix I came up with then was to attenuate the right channel by a whopping 3.4dB in the Tact digital preamp.  By mid January 2026, 4 months later, I had found no better way to center the stereo image at the movie seating position.  No other change seemed to help enough, and when I went back to a test of some kind to re-set the "balance" I still end up having to attenuate the right side by 2-4dB.

Also no other device in my chain lets me control the relative channel levels, something I find very annoying as I think all the digital processors I have should do that, especially the Behringer 2496's which does have a digital gain compensation but only for both channels at once, which it should have because it has per-channel EQ's.

Sadly it seems I have rarely paid any attention to the LEVEL controls in the Tact that can be used to set the L-R balance.  I didn't take a single picture of the Tact settings in September 2024 when I did a big system re-tune for the hotseat.  I think I have long attenuated the right channel by something like at least 2dB without paying any attention to it.  So, perhaps the "off balance" thing is not new, I'm just paying more attention to it, and I think it has gotten worse in the Movie EQ scenario than it was before.

Even that 3.4dB right attenuation is a conservative estimate.  If I just play with the right attenuator using my remote control, and go back and forth until I get the most centered image with a mono signal, I typically end up with something more like 6.5dB.  I'm horrified by having it set that high, so I then back off until just before the image solidly flips to the right again.  And that point is about 3.4dB.   If I want to dial it in so that it starts seeming to come from the left, it takes a whopping 9dB attenuation on the right side.

Early Thoughts

Likely Room Acoustics, but how?

At first I strongly suspected that room acoustics is weirdly involved in this, including the kitchen doorway a few feet to my right (I think that allows energy to leave the room from the left speaker which is more aimed to it, whereas the corner on the left amplifies the right more.  But any explanation involving "amplification" by room acoustics has to contend with the issue of why when the channels are set to the same level, with 0dB of attenuation for both, the channels sound equally loud when played by themselves*, and there is no weakness at all on the left side, and at -3.4 dB the right yet by itself sounds clearly muted compared with the left.  And yet, with the two channels sounding obviously different in level, that attenuation is required to get a solid centered center image.

(*To listen to each channel by itself is hard in my system, and I put that obvious test off until recently.  I have no buttons to do this kind of test easily, I can't even just disconnect a speaker wire because there are also the subs.  I have to run down the attenuator on the Tact digital preamp for one channel in the LEVEL menu to -99.9 dB, which takes quite awhile, and worse is that I have to try to remember what the attenuator was previously set to, which I nearly always forget to do, or don't bother to write it down.  Doing so requires crouching down, I now avoid getting on my knees, and remembering which button is the menu button to pull up the level menu.  Then finding piece of paper and pen to write it down, because I'll immediately forget.  So doing this requires a lot of time and steps.  It would sure be nice to have Left-only and Right-only buttons. But I don't see such a thing, only in rare cases (like the Marantz 2270) buttons that will play the left or right input from one channel to two channels, which is not at all what I want nowadays.)

I think perhaps the greater room amplification of the right side could mean that if the room modified levels are the same, the direct response is actually lower on the right.  Putting my ear up to the speaker, however, there appears to be no weakness on the left side either, it seems clearly louder than the right side when the right side is attenuated by 3.4dB.  So why oh why must it be louder so I can get a centered image?

 Frequency Response Differences

Another explanation is that there may be certain unbalanced bands in the frequency response, like the suckout which I can't easily fix on the left side around 125 Hz (but it's narrow).  That suckout is related to the rear wall reflection and the inevitable finite baffle of the planar speaker.  It is not related to things that could be different about the speakers themselves.  But there could be other band differences that do relate to differences between the speakers.

Dynamic and Non-Linear effects

And there could even be, I am thinking now, certain non-linear effects.  The right side might have dynamic loudness increases due to distortions of some kind, such as could be introduced by failing electrolytic capacitors or transformers in the speaker interface.   Counterintuitively, distortion can make things sound louder because harmonics are being added.

I hardly want to get into the differences between the two speakers.  I generally think of them as quite minor.  They both feature the final Acoustat 2+2 "C Mod" modified interface, one side has a stock interface originally made that way (in the small Hafler designed box) and the other has an interface modified to be C Mod by a famous Acoustat restorer/upgrader.  So they're both C Mod, which is the most important thing, that affects the frequency response, the loading, and many other factors.  Now the factory C Mod box also has the Medallion transformers, and the other side does not, but those transformers were not said to affect the static performance, including the loading, frequency response, anything like that, only the higher output capability from freedom from overloading.  So in just that way, as an example, dynamic response could be a factor.  But the improvement wrought by the Medallion Transformers is said to be only at the highest listening levels, and I'm no where near those, so I discount the possibility that this is the issue, but it could be.  Also the C Mod itself reduces the transformer overloading issue too, further making the possibility that this is the issue unlikely.

Investigations

Mono Mode


I began investigating the issues in December.

The first thing I did was put the Tact into Mono mode.  Then there should be a center image at the exact midpoint between the two speakers on every recording.

I left it that way mostly until the present as I am writing this report.

I noticed even with 3.4dB attenuation on the left, sometimes some things still seemed to be coming from the left, and those things tended to be higher pitched, like flute, though not cymbals.

Adjusting the EQ

So I then though I should use some kind of banded stimulation test.  I used to hand sweep 1/3 octave pink noise, but I haven't used the equipment I used for that purpose in a very long time.  What's more commonly available now is warble tones, Stereophile Test Disk 3 has a nice set for the Bass Decade, Midrange Decade, and High Decade.


Both sides have pre-existing cuts at 2.7kHz, 5.2kHz, and 9.0 kHz, though they differed in amplitude.  Back in September, when I took these photos, they had varying midbass boosts, one at 133 Hz and the other at 183 Hz.  Those seemed to be required in the back listening position.  I don't like EQ boosts, but I thought this was needed and OK.  Sometime later, however, I removed the 183 Hz boost from one channel but not the 133 Hz from the other.

Left Channel "Movie EQ" September 2025


Right Channel "Movie EQ" September 2025


Since it seemed the image pulled to the right, the obvious thing to do seemed to be to be to reduce the sizes of the HF cuts on the right.  I did so by a few dB on each cut.  That seemed to help on the warble tones themselves.

Still, it seemed I couldn't quite balance the tones at 9kHz and above.  I cranked up the HF control all the way to maximum.  That seemed to balance the highest tones.

It was only then that I decided to listen to the speakers themselves.  With the new adjustments, the left side sounded loud and bright, the right side sounded way softer and heavily rolled off.

I then tried reducing the cuts on the right side.  I cannot easily change the attenuator on the right side, so I didn't do that.  That made the right sound more like the left when played by itself.

Now thinking the right to be slightly bright, and unbalanced there, I reduced the HF attenuator back to the midway position it had been at before.  I was totally mistaken in thinking the right side needed boosting, or less cut, because it was wearing out or something.

And even with modified boosts, blindly setting the balance by adjusting the left attenuation still seemed to end up around 3dB.

Speaker Angle and Position

I started to notice the angle of the right speaker was just a tad more on axis.  With the Acoustats, you generally never want to be exactly "on-axis."  That was certainly true with the 1+1's, maybe less so (or not?) with the 2+2's.  You want to be off the axis of the speaker.  Acoustat specifically recommended listening off axis by some amount up to you. 

Many people do this by having the speakers parallel to the wall behind them.  I prefer to call this "Zero Toe In," though some people define the toeing relative to the listener rather than the rear wall, which might not be a straight wall.   My friend George was a true believer in the Zero Toe In principle as I'm defining it (and he called it that too) and that anything else was infidelity.  That was one of his most foundational rules, going back to the early 1980's if not before, so he hardly ever talked about it, except when visiting anyone who did otherwise.

I've never seen any particular reason for Zero Toe In, but if you do it of course you will be off axis from the speaker, by some amount varying as to how far you are sitting back.  And there's the rub.  You might need to get very far back for the Zero Toe In to be correct relative to you.  An easy solution is to toe in the speakers by some amount, but never by enough to put them on axis with you, the listener, at the hot seat position.  That way you have more freedom to determine how far back your are going to listen, and therein is an even longer story.

I ended up choosing both the serious listening position AND the toe-in following the advice of another friend, Tim.  Tim emphasized getting as wide a stereo angle as possible, but just short of being too wide for the stereo image to collapse.  Unless you have a very wide room, and I have a rather narrow room after you account for bookcases and furniture, this means sitting rather close to the speakers.  This gives me about 45 degree angle to the center of each speaker.  If I go in closer to the speakers, the stereo image begins to "collapse" (actually, it begins to lose a center, everything seems to be coming from everywhere, so perhaps it would be better to say it "explodes").

Once you have that chosen, you angle a pair of electrostats outward from being on the listener axis, just before the highs begin to really roll off, Tim advised.  The point was also to enable as much stereo separation as possible.  The more off-the-listening-axis the speaker is, the more it's going to stimulate the ear on the other side of the head even less.

Tim's advice gives me astonishing realism, when I'm willing to bother to move the listening chair into the exact correct position.

From the more semi-casual listening position in the back of the room, the speakers might be better aimed more off-the-listening-axis, which is to say less toed in.  George's zero toe-in strategy might even be correct...for the back of the room.

Here the stereo angle has also already been reduced from around 45 degrees to more like 22 degrees, so there is far less stereo spread.  You might think this would make the center "tigher" but actually it has the effect of making everything "looser," probably especially because of room acoustics.

But I'd really rather not have a special toe in for each listening position.  I'd rather leave speaker toeing at what's best for the 'serious' position in front, and try to cope with that somehow in the back.  The back is never going to have the astonishing stereo spread of the front.

I did correct the angle of the right speaker, so it's slightly less on-axis, and matching the right side, and that did seem to improve things, but not enough to change the right channel attenuation needed more than a fraction of a dB.

I tried pushing the right speaker back by a very tiny amount (there is not much space and they are incredibly hard to move now that they've sunken down into the carpet for a few years...and they have built-in cork feet).  But counterintuitively, that only seemed to make the image center even more to the left, so I quickly tired of that kind of adjustment.  That and I'm strongly inclined to believe the timing is near perfect to begin with, so I actually haven't experimented with that yet, and it would also be something to consider.

It's hard to measure the exact speaker to wall distances, because there are different things on the wall in either case, such as the window on the right side.  But with the angle corrected now, the two speakers measure the same to the closest inch if not half inch, comparing both speakers on the inside and on the outside.

Digital Delay

After all that, I finally got around to playing with the digital delay.  When I did this, I had a modified version of the HF eq's, and the 133 Hz boost on the right side.

Based on the effect when moving the speaker about 1/2 inch back, I didn't expect much, but right away, as little as 0.3 msec delay on the right seemed to fix the warble tones around 2khz, but less so higher up.

I wouldn't expect a phase difference to have an effect so great, after all we don't localize based on phase above 2kHz or so.

Starting All Over


If a phase difference is involved, I reason I really needed to start all over.  I set all the parametric EQ's to zero, I set no attenuation Left or Right, and No Delays either, now guess what.  Roughly speaking, it sounds pretty well centered!

It sounds wonderful in other ways too.  Far more dynamic among them.  I'm thinking I'm going to keep it with no panel EQ for awhile.

From this starting point, a small amount of delay seems to lock in the center even better.  Playing a cello concerto, I seemed to get the best center around 0.13 ms delay on the left side. Yes, the Tact allows me to adjust delay in 0.01 ms increments.  0.13 ms is about an 1.76 inches of delay.  This is so much easier to do than moving the speakers, and I can do it from the listening position, and lock in the exact right amount of delay.  Not that's it's always easy to do, or I can come up with the exact same number every time.  I can also seem to get it centered by delaying the right side...

Weirdly. playing either wideband music like a symphony orchestra, or pink noise. what happens as I advance the left channel delay is that the sound moves from the left speaker grudgingly toward the center, the sticks to the center for awhile until it almost jumps to the right, then doesn't stay there very long but wraps around again to the other side, and then around and around.  So it seems the entire bit of localization by delay discrimination has an effect centered at some frequency I could calculate from the distance between the two speakers.  Since it's a repeating pattern, you could be off by enough for it to seem "right" again, at least in part.  But that would be a pretty significant amount of offness, which would probably be noticeable in other ways.

So it seems that adjusting the delay is the number one step in fixing the center image, after the two speakers are pretty well balanced etc.  Also peculiar to electrostatics, getting the angle enough off axis to avoid beaming.

*** Update

I'm frequently adjusting the delay by ear to 0.2 to 0.3 ms now.  That would be like less than 2-5 inches of physical adjustment, which would be near impossible.

I wonder why it should be that big because the speaker distances from the wall are as close as I can measure, and they look that way.  Perhaps level and frequency response still need to be made closer.  Perhaps just as I was using channel level as a cure-all, perhaps I am now using delay as a cure-all.

I can't move the right speaker straight back because that would interfere with the preamp and related electronics.  I could move it back sideways perpendicular to the listening position...but that would require a comparable adjustment on the other side which is impossible--the right speaker is as far to the right as I can possibly get it without making it impossible to work on the electronics there, I can barely squeeze past it now.

It's still shocking to me how easily as little as 0.03 ms can be heard when you are at the listening position with remote control.  This is one more possibility of digital "preamplification" as in my system, and I believe it is the way to go.  The Tact 2.0 is a pretty good digital preamplifier, though it frustratingly lacks a few features I'd like.  It does have the essential digital volume (and with digital "gain"), digital per-channel attenuation and delay, and even Mono (though all buried in menus) along with the signature Room Correction System I only used briefly, preferring to do my own thing, and even the rarest of the rare Polarity (but per-channel, and inconveniently there is no way to switch the polarity of both channels simulatenously, to instantaneously A/B Absolute Polarity).

I've been progressively toeing the speakers away from the back listening position.  It's clear now that the right speaker was too much on-axis compared to the left and even in absolute terms.  Both speakers have a micro-beaminess just around the dead center.  One needs to be off-axis by at least 1 degree to get around that, and probably more is better up to somewhere between 2 and 5 degrees.  I have limited experience with this on the 2+2, which are entirely different from the 1+1 I explored more.  Internally the 2+2's have two stacks of vertical panels which are angled from one another.   The 1+1 is just a single stack of panels.  With the 1+1's you needed to be way off axis to get away from beaming.  Zero Toe In might be good for that speaker.  With the 2+2's you can be pretty close to on axis and it's pretty good, just not exactly on axis.  Before these investigations I never paid much attention to how much the speakers were on-axis in back.  Before I started, the Right speaker was almost exactly on axis, a very bad situation.  On axis, it sounds like everything is coming from the speaker, you just can't get around that.

This is compromise stuff because if I toe the speakers to optimize the back position it will screw up the front "serious" listening position.

The ideal compromise is probably somewhere around 1-2 degrees off axis in the back, and 3-4 in front, 3-4 degrees probably being optimal.

When you get both delay and speaker angle correct, movement across the hot seat causes the image center to shift slowly to the right as you move right, and slowly to the left as you shift left.  

It doesn't flop over to the right with the slightest right head movement like it did before, nor resist moving to the left until you were way on the left side after which it would go all the way to the left speaker in one go, just like it was doing on the right but taking a much longer distance than for the right.  (That requires getting both the speaker angle AND the delay correct.)

I may have to do EQ to the top end again, though for now I'm enjoying the added dynamics, immediacy and excitement.  Just once in awhile it seems too much, when I get the "turn it off" feeling.  Also the midbass, I might bring back some boosting.

*** February 9, 2026

I moved the speakers a tad more off axis to nearly eliminate the flopping over to the right (mostly) about a week ago.  If I move my head more than 8 inches or so, it will flop over, and once in a blue moon it might flop over to the right anyway but hardly ever.  Moving head from left to right the image seems to move as it should equally on both sides.

And now I'm happy to report, the delay has been reduced to 0.07 ms on the right to make it click.  That's just under one inch, it's very reasonable to believe I could be off that much, for one thing the two different Acoustat 2+2's, from slightly different vintages, have different setbacks from the front of the base, making it very confusing to get this right (you have to compare the actual speaker panels, not their bases).

The speakers look to be about 5 degrees off axis from the listenter, and 10 degrees out of perpendicular to the walls.

I'm tempted to try the fully perpendicular orientation my friend George always recommended.  But this is still a "compromise" with the front "serious" listening position, and I don't want to screw the front up.  So I'm following the rule that if it ain't broke, don't fix it.  And it seems to be not broken now.  And it's not at all easy to move these big heavy speakers (which also have cork feet on bottom which buries itself into my carpet) and get them angled exactly the same, so I'm not going out of my way to try every possibility.

The channel balance is now precisely at 0.0db attenuation in both channels.  I should re-check that the output levels actually match this way, but haven't.  I think they're pretty close.

It's hard to believe I was trying to center the image with the channels 3.4dB out of balance, just because of angling issues.  (And if I did the adjustment blind I could end up at 6dB.)