# PM123 1.4x

→ PM123 1.41 → Task list → RealEQ 1.22 → OS2rec 1.0 → LogVolum 1.0 → RealEQ 1.21 → Analyzer → Contact

PM123 1.4x is a fork of PM123 1.32 providing many new features. See change log for further details.
The source code is now hosted at github including the history since 2006.

See http://glass.ptv.ru/pm123.html for the 1.3x releases.

The PM123 releases on this page may not be completely stable. If you want to contribute to the further development, detailed bug reports would be appreciated.

### PM123 version 1.41-b3

1.41 beta 3 (3.6 MB, also available at Hobbes)
1.41 beta 3 Debug (6.2 MB, logging support)
1.41 beta 3 Source (18 MB)

Note that the debug 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.

#### Installation

Unzip the binary zip file to a new folder.

Be sure to have libc063 installed on your system. (This is default on eComStation.)

You may use configuration files from older PM123 1.3x releases. Most of your settings will survive - sometimes too much. But it is strongly recommended to force the default settings for all plug-in types in the properties dialog. There are restrictions when using older plug-ins.

#### Bug reports

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 debug 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 recipient.

#### Information

Playlists may now be nested, even recursive. More than one playlist window can be open at the same time. Playlist Manager, playlists and bookmarks are basically the same. Nested entries create sub menus in the bookmarks menu.

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 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 most old plug-ins except for visual plug-ins through a virtualization layer. The visual plug-in compatibility is broken since PM123 1.32 anyway.

FLAC and CUE sheets are now supported natively. Folders can be played directly reflecting changes to the file system.

PM123 can directly stream to PulseAudio servers. This is particularly useful when running OS/2 inside virtual machines to avoid all the drawbacks of virtual sound devices, first of all the latency.

See change log for further details.

#### Documentation

Plug-in development kit documentation

#### Previous versions

Note that some older versions are no longer available in all flavors. Contact me if you really need them.

1.41 beta2 (3.5 MB)
1.41 beta2 Debug (6 MB, logging support)
1.41 beta2 Source (18 MB)

1.41 beta1 (3.5 MB)
1.41 beta1 Debug (6 MB, logging support)
1.41 beta1 Source (18 MB)

1.41 alpha2 (3 MB)
1.41 alpha2 Debug (5.5 MB, logging support)
1.41 alpha2 Source (18 MB)

1.41 alpha1 (3 MB)
1.41 alpha1 Debug (5 MB, logging support)
1.41 alpha1 Source (18 MB)

1.40 alpha4 Binary (1.9 MB, also available at Hobbes)
1.40 alpha4 Debug Binary (2 MB, logging support)
1.40 alpha4 Source (8MB)

1.40 alpha3 Binary
1.40 alpha3 Debug Binary (logging support)
1.40 alpha3 Source

1.40 alpha2 Binary (also available at Hobbes)
1.40 alpha2 Source

1.40 alpha1 Binary
1.40 alpha1 Source

#### PM123 core engine

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 offers 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.
stable
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.
stable
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. stable
All decoder plug-ins:
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. stable
PM123 core: Dealing with object slices To play CUE sheets and similar sources it is necessary to play only slices of a song file. PM123 allows to put a start and a stop position to playlist references. alpha
Split decoder plug-ins into connection and decoder plug-ins. This enables different codecs to be used for streaming sources.
Superseded by the new decoder interface that can share XIO handles.
canceled
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.
stable
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

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. The filter response has also been improved. stable
Analyzer
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 since PM123 1.40
There was many MPEG audio related stuff in the PM123 core which should be moved to the MPG123 plug-in. stable
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.
in progress
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.
discontinued,
moved to os2audio
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 often extremely loud. This plug-in compensate for that.
Replaced by bookmark and playlist specific loudness setting.
canceled
PulseAudio plug-in Plug-in to support PulseAudio output and recording. stable
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.
Embedded CUE sheets do not work. I never managed to create such a file.
beta

### RealEQ Version 1.22

Download the PM123 1.4x files to get the plug-in. RealEQ 1.22 is included.

#### Installation

This file is included since PM123 version 1.40 and should already be in-place.

#### Information

• RealEQ does no longer delay the playback and cut the last samples. It operates now as zero-phase filter using read-ahead. This gives a very fast response to user actions like seek.
• Enabling/disabling the EQ does no longer cause the playback to jump.
• Changing the FIR order does no longer cause large glitches. (Small glitches remain since you effectively changed the transform function.)
• The maximum FIR order is now 16384, giving very accurate results.
• The maximum FFT size is now 32768. This causes reasonable low CPU usage even with large FIR orders.
• The MMX and standard convolution has been finally removed. Both are outperformed by the new FFT convolution.
• The output of the equalizer is now stereo even if the input is mono. This is because the filtering in general gives different results for the two channels.
• The equalizer can equalize the group delay. This is a very powerful feature if you know how to use it. It can compensate for group delays of crossovers, vented enclosures or room resonances.

#### Internals

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, max FIR order of 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.

### LogVolum Version 1.0

Deprecated! Included in OS2AUDIO.DLL since PM123 1.41.

Download the PM123 1.40 files to get the plug-in. LogVolum is included.

#### Installation

This file is included in PM123 version 1.40 and should already be in-place.

#### Information

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.

#### Internals

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.
The green line is the response function of usual sound devices without this plug-in.

Instead of an exponential function the plug-in uses the polynomial:
 y = x 1 + sqrt(10) · (1 - x)
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.

### OS2rec Version 1.0

Recording plug-in for PM123.

Download the PM123 1.4x files to get the plug-in. OS2rec is included.

#### Installation

This file is included since 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:///...

#### Usage

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[&param2=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.

#### Known issues

• The plug-in should introduce a defined latency before passing the buffers to the output.
Since the playback is normally absolutely synchronous you may never get the buffers filled. So drops in the sound are very likely to happen.
• When the recording and the playback is not done on same physical sound device it may get out of sync with time because the two sound devices do not use exactly the same sampling rate. This will cause dropouts or jumps whichever is the faster device. Most likely this will never get fixed.

### RealEQ Version 1.21

Discontinued (see RealEQ 1.22 for newer versions)

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/)

#### Installation

Replace REALEQ.DLL in your PM123 directory by the one above. PM123 must not run meanwhile.

#### Information

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.

#### Internals

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 Analyzer

Discontinued. Newer version included since 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/)

#### Installation

Replace ANALYZER.DLL in the sub folder visplug of your PM123 directory by the one above. PM123 must not run meanwhile.

#### Information

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.

### Contact

Suggestions, help, complaints (but not too much:-):

Original homepage: http://www.maazl.de/project/pm123/index.html