This is a development branch of the PM123 sources. The new features will most likely be part of PM123 1.40. Some components may be used with older PM123 versions too.
The PM123 components on this page may not be stable. If you are looking for stable versions go to ftp://ftp.ptv.ru/pub/glass/pm123/ or http://pm123.ptv.ru/ respectively.
However, if you want to contribute to the further development, detailed bug reports would be appreciated.
| Task | Description | State |
|---|---|---|
| Filter plug-in interface: improved potentials | The old filter plug-in
interface offers very few
options. Each block has to be processed synchronously. This may cause
unwanted latency as well as bad performance. A new version should offer a full proxy interface to the output plug-in or the next filter plug-in respectively. This gives you the chance to reduce the latency of large filters, change the sampling rate and so on. |
beta |
| Gapless playback in playlist mode | When playing files in a
playlist PM123 now starts
fetching and decoding the next file before the last sample of the
current file is played. (I am not talking about a cross fader
plug-in or
any
crap like that.) This enables absolutely gap-less playlists of continuous albums. Of course, the files have to be cut correctly. This is a bit tricky for MPEG audio files that normally do not this out of the box. |
beta |
| Merge playlist manager and playlist into one hierarchical structure with 2 views | A playlist now may contain other playlists. This offers plenty much of new features including sub menus in the bookmarks and so on. | beta |
| All decoder plug-ins: Add custom entries to the context menu "Load...". |
The decoder plug-in interface
provides now a function to extend the Load.../Add... context menu. There were some hard-coded stuff in the PM123 core which is related to the CDDAplay decoder plug-in. This is now in CDDAplay using the new interface. |
stable |
| Plug-in interface for playlist-like objects | Beyond the decoder plug-in it would be helpful to have plug-ins that decode enumerable objects like cue sheets and so on. | alpha |
| Split decoder plug-ins into connection and decoder plug-ins. | This enables different codecs to be used for streaming sources. | stopped |
| Better performance with many
decoder plug-ins |
Currently each decoder opens
the target to check whether it can play it. This could cause heavy load
if there is no file system cache, like with http streams. The decoder plug-ins should be able to share a single I/O stream when detecting compatibility. Furthermore extended attributes and file extensions can improve the selectivity for file system objects and MIME types for internet objects. |
in progress |
| Flexible extension of GUI by plug-ins |
Currently each plug-in has it's own
configuration dialog. From the users point of view it is not obvious
where to seek for a setting. A flexible GUI interface should enable plug-ins to subclass the PM123 GUI and extend configuration dialogs as well as menus or drag and drop. |
not started |
| Task | Description | State |
|---|---|---|
| RealEQ
1.21 FFT-Convolution, improved filter kernel design |
The FFT
convolution is many
times faster than any
hand-optimized MMX code. So using FFT convolution is the prerequisite
to use larger, more accurate filter kernels. The original kernel design function created FIR kernels with very bad locality and unreasonable sharp transitions at high frequencies. Furthermore low frequencies are processed very poorly even at the maximum FIR order. The new implementation cures most of the problems and allows 3 times larger filter kernels (due to the FFT convolution). |
discontinued, stable, included in PM123 1.32 |
| RealEQ
1.22 using new plug-in interface of PM123 1.40 |
The equalizer plug-in causes a
filter delay in the
order of
200ms. The new plug-in-interface allows to hide this delay resulting
virtually in
a zero phase filter. The new plug-in responds very
fast
to any user actions like seek and jump. Furthermore, enabling and
disabling the EQ and changing the FIR order does not longer cause jumps
in the playback. |
stable |
| Analyzer Added spectroscope |
Added a very pretty spectroscope function to the built-in analyzer plug-in. Furthermore a optional high precision mode is now available to get more reasonable results. | stable |
| OS2rec
1.0 decoder plug-in to record from line-in |
This sounds crazy, but it can be useful under certain circumstances, e.g. to use the filter plug-ins in on the fly mode or to feed the analyzer with external data. | stable |
| PM123 core,
MPG123 MP3 tag stuff moved to MPG123, see PM123 1.40 |
There was many MPEG audio related stuff in the PM123 core which should be moved to the MPG123 plug-in. | done |
| New filter
plug-in: digital room correction |
A plug-in that
accepts a custom FIR filter kernel to do
a digital room
correction. Since this requires quite large filter kernels,
there is a strict dependency to the improved filter plug-in interface
above. Otherwise a latency in the order of one second is introduced and
the same amount is cut at the end of each file. Future versions may include the software to calibrate your room by utilizing the OS2rec plug-in. |
not started |
| LogVolum
1.0 filter plug-in to give the volume bar of PM123 a logarithmic characteristic requires PM123 1.40 |
Many
sound cards and/or
drivers have linear volume controls for the mixer channels. Only the
master volume is logarithmic on the better ones. This is not very
helpful
with respect to our acouesthesia. This very small plug-in provides a good work-around for this issue. |
stable |
| New Ogg Vorbis plug-in | The new plug-in is superior to
the old one in any way. Thanks to Dmitry A.Steklenev who did the work for PM123 1.32. |
stable |
| New parametric equalizer plug-in | With PM123 1.40a3 the simple equalizer has been removed. An always working replacement simpler than RealEQ would be nice. | not started |
| Compressor plug-in | Some sources like radio streams
do not support ReplayGain values. They are usually extremely loud. This
plug-in compensate for that. |
not started |
| PulseAudio plug-in |
Plug-in to support PulseAudio
output. Recording might also be nice, but is not yet addressed. |
in progress |
| Flac plug-in with support for embedded
CUE sheets |
Using the new playlist plug-in interface of
PM123 1.41 and object slicing embedded CUE sheets are no longer a
no-go. The most popular one, flac should be supported. |
not started |
Develpoment of this release is in progress. The main goals are
performance improvements and stabalization. The latter requires a major
change in the core engine because the newly introduced engine of PM123
1.40 had some serious draw-backs.
1.40 alpha4 Binary
1.40 alpha4 Binary (logging support)
1.40 alpha4 SourceNote that the 'logging' build is slower, but it provides support for detailed error tracking and bug reports. Furthermore the logging can cause drop outs in the audio at heavy system load because of the reduced priority of the logging output during DART events.
Unzip the binary zip file to a new folder. You may use configuration files from older PM123 releases. Most of your settings will survive. But do not copy an PM123.INI file from PM123 1.32 to another folder. There are restrictions when using older plug-ins.
If you encounter problems with this release you may send a bug report to the contact address below. A bug report should contain
- a short description of the problem,
- the release and the time stamp of PM123.exe and
- an exact description how to reproduce the problem with a newly started PM123.
If it is not straight forward to reproduce the problem please try enabling the logging to capture useful information. You get the log file by starting PM123 (binary with logging support only!) from the command line with:
C:\app\pm123>pm123 2>log.txt
Please keep the playing time as short as possible, when creating a log for a bug report, because the log file grows rapidly. If you manage to reproduce the problem with a hopefully small log please compress it and attach it to the bug report. Mails with some megs of attachments may not reach their target.
Playlists may now be nested - even recursive. More the one playlist window can be open at the same time. Now Playlist Manager, playlists and bookmarks are basically the same.
The playback controller now prefetches songs of playlists and keeps the output device open. This avoids gaps between items in playlists.
Furthermore you can navigate within the playlist with the slider using the Alt key.The plug-in interface has been significantly improved. This interface allows more flexibility to buffer handling and filter plug-ins. This is required for future plug-ins like digital room correction. The new plug-in manager checks whether the PM123/plug-in pair is likely to work. It can load all old plug-ins except for visual plug-ins through a virtualization layer. The visual plug-in compatibility is broken since PM123 1.32 anyway.
Online help
Plug-in development kit documentation
1.40 alpha3 Binary
1.40 alpha3 Binary (logging support)
1.40 alpha3 Source
Binary (REALEQ.DLL, requires PM123 version 1.40a2 or higher)
Source (requires PM123 1.40 source tree to build)Download the PM123 1.40 files to get the plug-in. RealEQ 1.22 is included.
Copy the DLL to your PM123 folder and add the plug-in using the properties dialog.
This file is included in PM123 version 1.40 and should already be in-place.
Comparison
of the different RealEQ versions.
Frequency response of the equalizer at 44,1kHz sampling
rate when all sliders are set
alternating to +12dB and -12dB and the FIR order is at the maximum for
the particular version.
X-axis: frequency [Hz]
Y-axis: amplitude [dB]
Black line: RealEQ version 1.20, FIR
order 4096
Green
line: RealEQ
version 1.21, FIR order 12288
Red
line: RealEQ
version 1.22, FIR order 16384
Blue
line: RealEQ
version 1.22, FIR order 4096
Even at the same filter order of 4096 the new equalizer performs better by nearly a factor of two.
Binary (LOGVOLUM.DLL, requires PM123 version 1.40 or later)
Source (requires PM123 1.40 source tree to build)Download the PM123 1.40 files to get the plug-in. LogVolum is included.
Copy the DLL to your PM123 folder and add the plug-in using the properties dialog.
This file is included in PM123 version 1.40 and should already be in-place.
This small plug-in turns the characteristic of the volume control in PM123 from linear to logarithmic.
You may use this plug-in to compensate for the linear characteristic of the volume controls of the many common sound devices.
Do not use this plug-in if your sound card already has a mixer with a logarithmic characteristic.
Response of the PM123 volume control.
X-axis: relative position of the volume slider [%]
Y-axis: gain [dB]The red line is the response function with the correction.
Instead of an exponential function the plug-in uses the polynomial:
The green line is the response function of usual sound devices without this plug-in.
with x and y in the range [0,1] for the transformation. This gives an approximately exponential function with a usable dynamic range of almost 30dB while keeping the zero point at -∞dB.
y = x 1 + sqrt(10) · (1 - x)
Recording plug-in for PM123.
Binary (OS2REC.DLL)
Source (requires PM123 1.40 source tree to build)Download the PM123 1.40 files to get the plug-in. OS2rec is included.
Copy the DLL to your PM123 folder and add the plug-in using the properties dialog.
This file is included in PM123 version 1.40 and should already be there.Note: Although OS2rec does not strictly depend on a recent PM123 version bugs in older PM123 builds makes it nearly impossible to use the plug-in. PM123 before 1.32 simply does not accept URL inputs which do not start with http://. The only way to get it working is to edit a playlist file and insert an URL with record:///...
To start the recording right click PM123, choose Load..., Record... and follow the dialog. Alternatively choose Load..., URL... and enter an URL of the following style:
record:///[sounddevice][?param1=value1[¶m2=value2[&...]]]
sounddevice is either a device ID (integer number) or a name of a mixer device usually AMPMIXxx. The Device ID 0 is the default MMOS2 sound device.
The parameters below may be used to control the recording parameters.
Parameter Value Default Remarks samp[lerate] Sampling rate in kHz 44100
ch[annels] Number of channels (usually 1 or 2) 2
mono - none -
Alias for channels=1 stereo - none -
Alias for channels=2 bit[s] Number of bits per sample and channel 16
share[d] y[es]|n[o], default: yes yes Using the non-shared mode will also block other mixers from working. in[put] l[ine]|m[ic]|d[igital] line
Examples:
record:/// Start recording from the default sound device with default parameters: 44,1kHz, stereo, use line in record:///ampmix01 Start recording from the specified sound device record:///0?samplerate=48000&mono Start recording from the default sound device with 48kHz sample rate and only 1 channel record:///0?input=mic Start recording from the default microphone input.
Binary (REALEQ.DLL, should work with all versions of PM123)
Source (requires PM123 1.32 source tree to be build, see http://pm123.ptv.ru/)
Replace REALEQ.DLL in your PM123 directory by the one above. PM123 must not run meanwhile.
The new plug-in give you an additional choice how to do the convolution: FFT convolution. I strongly recommend to use the new FFT convolution, since it is far superior. Furthermore it does not depend on CPU features like MMX. It scales with O(log n) with the FIR kernel length whereas the other methods scale O(n).
Now the maximum FIR kernel length is 12288. I recommend to use this maximum together with the maximum FFT plan size of 16384 unless your CPU sets you a more restrictive limit. Otherwise the first three sliders at 16, 20 and 25Hz will not perform very well. But do not try to use these values without FFT convolution.
You may reduce the FIR kernel length if (and only if) the low frequency sliders are set to the same value or at least very close together. For each consecutive slider which has the same value than the 16Hz one you may shorten the FIR kernel length by about 26%.The FFT plan size in the settings dialog has now no more meaning unless you choose FFT convolution. The plan size for the FIR kernel design is now chosen automatically.
The new FIR kernel design derivate in three main aspects from the old one:
- The desired frequency response function is now interpolated between the supporting points with a sine² function. This avoids unreasonable sharp jumps in the frequency response and makes the filter kernel shorter.
- The filter designer does no longer create 32 base functions in the time domain which are mixed when an equalizer slider changes. Instead, the FIR kernel is always created from scratch. This reduces the memory footprint by 1,6MB. Instead of that a DCT transformation is required now on each parameter change. However, this is required anyway to support the FFT convolution.
- The windowing function is much more aggressive now. The results in a worse stop band attenuation. However, since the equalizer does not provide more than 24dB dynamics anyway this is reasonable. Additionally the sine² interpolation above acts like a window function too.
Frequency response of the equalizer with an FIR length of 12288 at 44,1kHz sampling rate when all sliders are set alternating to +12dB and -12dB.
X-axis: frequency [Hz]
Y-axis: amplitude [dB]The black line is the intended frequency response.
The red line is the achieved frequency response.
The green dots are the (first) supporting points used for the filter design.
Comparison of the new implementation.
Frequency response of the equalizer at 44,1kHz sampling rate when all sliders are set alternating to +12dB and -12dB.X-axis: frequency [Hz]
Y-axis: amplitude [dB]Black line: real frequency response of the old implementation with the maximum FIR order of 4096. Nothing reasonable happens below 100Hz!
Red line: real frequency response of the new implementation with the maximum FIR order of 12288.
Green line: extrapolated frequency response of the old implementation with an FIR order of 12288. This is only to compare the filter design, since the old convolution core was too slow for this filter order.
Spectrum AnalyzerDiscontinued. Newer version included in PM123 1.40.
Binary (ANALYZER.DLL, requires PM123 1.32beta or above, ftp://ftp.ptv.ru/pub/glass/pm123/)
Source (requires PM123 1.40 source tree to build. PM123 1.32 or above works with minor source changes, see http://pm123.ptv.ru/)
Replace ANALYZER.DLL in the sub folder visplug of your PM123 directory by the one above. PM123 must not run meanwhile.
The new plug-in version adds two more visualization types:
- a linear spectroscope, scrolling from bottom up and
- a logarithmic spectroscope, scrolling right to left.
The spectroscope shows the amplitude as the color, the frequency as screen location and the time as screen location in the other direction. The dynamic range of the spectroscope is 40dB. Due to the usual nature of the frequency distribution in common music an additional weight function which scales with the square root of the frequency is multiplied to the amplitude before visualization.
This version of the analyzer also offers a new option called "high precision mode". This will take twice as much samples for analysis. Of course, the CPU load will increase. However, I recommend this at least for the logarithmic spectroscope to get more reasonable results.
| Plug-in | |
|---|---|
| Crossfader plug-in (fade.dll) | The plug-in loads as expected,
but does
not do it's job anymore. Most likely because it makes assumptions about
undocumented properties of older PM123 versions. The new plug-in interface features of PM123 1.40 should allow to write a more sophisticated solution using a filter plug-in. However, somebody has to do the job. But since PM123 1.40 supports gapless playback out of the box, it is no longer that important. |
| Normalizer plug-in (normal.dll, normhelp.dll) | Will not work because it
utilizes the visual plug-in interface which has changed with PM123 1.32. It also is superseded by the built-in Replay-Gain handling since 1.32rc1. |
| Monkey's Audio decoder (macplay.dll) | May work, but neither I have a file nor I can create one with OS/2. |
| True Audio decoder (ttaplay.dll) | May work, but neither I have a file nor I can create one with OS/2. |
| Module files decoder (DPMikMod.dll) | Crashes with pm123 1.40 sooner or later when the playback starts, mostly on the 2nd usage. Reason unknown. Looks like undefined bahavior because of a dangling reference to some structure on the stack. No source available. |
| older Ogg Vorbis plug-in (oggplay.dll) |
Works as expected. But since PM123 1.32rc1 a Ogg-Vorbis plug-in is included anyway. Unfortunately it has the same name. But it is entirely different and superior. |
| Musepack decoder (mpcplay.dll) | Untested. I have no such files. |
| WavPack decoder (wvplay.dll) | Untested. I have no such files. |
| FLAC play 1.2.1 (flacplay.dll) | Works as expected. |
Note: When loading older decoder plug-ins you might want to add some extended attributes file types to the plug-in in the properties dialog. This enables you to play files without the standard extensions.
Suggestions, help, complaints
(but not
too much:-):
Original homepage: http://www.maazl.de/project/pm123/index.html