## PM123's History of changes

### PM123 1.42 beta

- Honor gain adjustment in parent playlist items as well if they are part of the current playback stack.
- Switched build environment to GNU make.

> #### AACPLAY

- Added AAC plugin, i.e. MPEG 4 Audio (M4A) and ADTS streams (Icecast/SHOUTcast used by internet radios).

> ### MPG123

- Fix destroyed meta info when doing stream meta updates

### PM123 1.41

- Moved repository to GitHub.
- Fixed crash when the current song does not have certain meta information fields filled.
- Fixed bug in internal B-Tree implementation. (caused rare crashes)
- Added support for direct title editing in detailed playlist view.
- Fixed crash at drag & drop in debug builds.
- Fixed auto-play when selecting bookmark.
- Honor gain adjustment in parent playlist items as well if they are part of the current playback stack.

> #### MPG123

- Added ID3V1 genres from WinAmp 5.6.
- Fixed destroyed meta information when playing SHOUTcast streams with embedded meta infos.

### PM123 1.41 (beta 3)

> #### XIO123

- Fixed severe file corruption issue when writing OggVorbis comments and rarely some others. Happened when a read access to a synchronously buffered stream happens to end exactly at the end of the ring buffer since 1.41.

> #### WAVPLAY

- Fixed state engine of decoder thread. Caused false decoder aborts in playlist mode.

> #### OGGPLAY

- Upgrade to libogg 1.3.2, libvorbis 1.3.5 and vorbis-tools 1.4.0.

### PM123 1.41 (beta 2)

- Fixed playlist context menu after closing the playlist window once (Bug #44).
- Reactivated save stream as.
- Do not automatically overwrite meta infos with the content of the first entry when editing multiple files at once.
- Edit item information of multiple playlist items at once.
- Close PM123 object info windows on exit.
- Function edit meta info did not refresh the player's display.
- Fixed crash when a decoder reports an error text at decoder_savefile.
- Sorting sets modified bit of playlist.
- Fixed sorting in debug builds.

> #### MPG123

- Removed Error 18 message at the end of MP3 files with incomplete last frame (Bug #43).
- Fixed deadlock when changing ID3V2 meta data while playback is active.
- Upgrade to libmpg123 1.21.1.
- Fixed stream saving.

> #### PLST123

- Fixed initial values for item infos pre/post gap and gain. (caused unnecessary tags in playlists)

> #### XIO123

- Fixed writing of incomplete text lines. (breaks playlist writing)
- Fixed opening files in append mode.

### PM123 1.41 (beta 1)

- Fixed filter plug-in initialization for cascaded filters with virtualized output events.
- Added simple PM123 INI file migration from earlier versions.
- Fixed crash when loading song via command line.
- Several other bugfixes.

> #### FFT123

- Patched fftw3 planner to become thread-safe to remove race condition when more than one plug-in uses FFT123.

> #### OGGPLAY

- Fixed protocol error that can cause PM123 to crash at the end of playback.

> #### MPG123

- Fixed protocol error at DECODER_STOP that can cause PM123 to crash when using Prev/Next button.

> #### DRC123

- Added new plug-in for digital room correction (still alpha)

### PM123 1.41 (alpha 2)

- Fixed decoder plug-in configuration dialog with respect to adding custom extended attribute types.
- Fixed setup of last directory in file dialog.
- Fixed performance issue while testing for wildcard matches of WavPlay plug-in.
- Fixed crash while decoding empty .TYPE EAs.
- Work around for Lxlite last modification time problem on samba shares.
- Option to keep current playlist on load.
- Implemented navigation into playlist item.
- Fixed crash in queue mode and removal of incompletely played items.
- Fixed handling of alternation lists.
- New icons for alternation lists.

> #### OGG123

- Work around for vorbisfile seekability detection.

> #### PLIST123

- Fixed reading of WarpVision and internet playlists.
- Save playlist options.
- Fixed crash when loading playlists from older PM123 versions.

### PM123 1.41 (alpha 1)

- Added playlist plug-in support.
- Switched PM123 engine to 32 bits per sample.
- Added large file support (>2GB).
- Significant speed up when scanning large playlists as long as you do not use old decoder plug-ins. (more than 8500 files per minute over the network if your disk can keep up with that)
- Implemented new shuffle algorithm that can deal with nested playlists. (Fixes bug #1)
- Added alternation list support for alternative URLs of streaming servers.
- Retain playing location within a song after player restart (for audio books).
- Drag & drop support for PM123 skin files.
- Moved replay gain processing to PM123 core. It now works with all output plug-ins.
- Access to meta data through pipe interface.
- Switched to dynamic string library with shared storage to save memory.
- Removed most length restrictions of meta data and reduced memory footprint of song and playlist objects in PM123.
- Support for memory deduplication to conserve even more memory.
- Reset high decoder thread priority after 20 seconds to prevent from unresponsive UI on single core CPUs.
- Reasonable resizing of most dialogs.
- Fixed dealing with playlist slices.
- Added several dozens of new test cases.
- Changed plug-in API to use strongly typed user parameters. (binary compatible)
- Use of B-tree structures for playable object repository for better scalability with very large playlists.

> #### MPG123

- Rewrote MPG123 plug-in. Now uses libmpg123 1.15.1
- Gap-less playback support for MP3.
- Added support for files > 2GB.

> #### FLAC123

- FLAC decoder is now shipped by default. This decoder supersedes `FLACPLAY.DLL`.
- Added support for files > 2GB.

> #### PLIST123

- Moved playlist read/write to a separate plug-in.
- Added support for CUE sheets.

> #### FOLDR123

- Moved support for virtual folder playlists to a separate plug-in.

> #### PULSE123

- Added PulseAudio client support, playback and recording.
- Support configuration by asking the PulseAudio server with introspection API.

> #### OGGPLAY

- Upgrade to libogg 1.3.0 and libvorbis 1.3.3 with some patches.
- Added support for files > 2GB.

> #### OS2AUDIO

- Moved replay gain processing to PM123 core.
- Joined logarithmic volume control plug-in into os2audio.

> #### WAVPLAY

- Upgrade to libsndfile 1.0.23.
- Added support for files > 2GB.

> #### WAVOUT

- Added time stamp naming scheme.
- Added support for WAV > 2GB.

> #### XIO123

- Removed string length restrictions in http communication and meta data.
- Added support for files > 2GB.

### PM123 1.40 (up to alpha 4)

> This is a fork of PM123 1.32.

- Switched code generation to Pentium classic instruction set. PM123 will no longer run on i486.
- Unified ini file (except for CDDAPLAY).
- Save window positions per object.
- Added a bunch of new commands to the remote interface.
- Implemented alternate slider navigation by pressing the Alt key. This allows to seek within whole playlists by using the slider.
- Standard equalizer removed. This one was supported by mpg123 only, so it makes no sense in the PM123 core.
- Gap-less playback in playlist mode. Subsequent songs are prefetched before the current song has finally ended. The output and the filter plug-ins are no longer reinitialized between the songs.
- Navigation across song borders. A seek in playlist mode will restore the previous song if that changed meanwhile.
- Scanning across song borders. A forward or rewind will no longer stop at song borders.
- Optionally retain playing position on player exit/restart.
- Added queue mode that automatically discards played items from the default playlist.
  Furthermore you may append dropped or double-clicked items to the default playlist instead of loading them immediately.
- Playlists, Playlist manager, Bookmarks are now basically the same thing. This offers plenty much of new features.
- Support for nested playlists. Playlists may be nested as deep as you like. This allows structured bookmarks too.
- Properly handling of recursions in nested playlists.
- Support for directories. PM123 no longer needs to expand the folder content at the moment where a folder is dropped to the player or a playlist.
- Added song and playlist slicing. A playlist entry may now reference only a part of a song or another playlist.
- Added support for bookmarks with current playing position.
- Added support for bookmarks to playlists and playlist items.
- Asynchronous workers for dealing with network timeouts or large playlists without locking the user interface.
- Configure the name of the remote pipe to control more than one active player instance.
- Moved the ID3 tag editor to MPG123. Consequently the related settings are now in the plug-ins configure dialog.
- Decoder plug-ins may extend the Load/Add context menu. Moved the load track function into the CDDAPLAY plug-in.
- New plug-in interface with much more flexibility to buffer handling and filter plug-ins.
- The new plug-in manager checks whether the PM123/plug-in pair is known to work. It can load all old plug-ins except for visual plug-ins through an virtualization layer.
- Changed the internal data structures to use always 16 bits per sample to reduce complexity of code and plug-ins.
- Ported resizable file dialog from PM123 1.33.
- Now it is possible to control the wait period in seconds when a new stream connection is requested. (Port from PM123 1.33).
- Wrap around scroller.
- XIO123: properly handling of TCP/IP receive timeouts.

> #### REALEQ

- Realeq does no longer delay the playback and cut the last samples. It operates now as virtually zero-phase filter.
- Enabling/disabling the EQ does no longer cause the playback to jump.
- Changing the FIR order does no longer cause major glitches.
- The maximum FIR order is now 16384, giving very accurate results. The maximum FFT size is now 32768.
- The MMX and ordinary convolution is finally removed. Both are outperformed by far by the new FFT convolution. This will cause low CPU usage even with large FIR orders.
- Save the slider settings by value in REALEQ.INI. Now the restore do no longer depend on the last loaded file and changes to the loaded settings are kept after restart.
- Added master gain and mute controls.
- Added group delay equalization.
- Scale FFT plan size and FIR order with the sampling rate.

> #### MPG123

- Implemented ID3 tag editor (was in PM123 core).
- New ID3 tag editor that takes care of ID3V1 and ID3V2 tags.
- Sort Genres by name.
- Fix: continue playing on side info error. (Message: "Blocktype == 0 and window-switching == 1 not allowed.")
- The decoder now understand Relative Volume Adjustment (RVA2) field of the ID3v2 tag. Therefore Andreas Schosser normalize plug-in is not needed anymore. Configure DART Output plug-in and welcome!
- Removed force 8 bit option.

> #### OGGPLAY

- Update to libvorbis 1.2.2. Fixes problems with some Ogg files.

> #### CDDAPLAY

- Implemented assistant to load CD tracks (was in PM123 core)
- Fixed crash when decoder_trackinfo is called from separate threads (playlist and main).

> #### OS2REC

- New plug-in to play immediately recorded streams.

> #### ANALYZER

- Added two neat spectroscope display modes which offers a graphical representation of the time dependent frequency spectrum of the currently playing music (similar to the spectrum display of audio editors like Audacity).
- Change the analyzer only by double-click to avoid accidental switches.

> #### LOGVOLUM

- New plug-in to compensate for the non-logarithmic behavior of the volume controller of cheap sound devices. (Disabled by default)

### PM123 1.32

- Docking of windows became more accurate and powerful.
- Addition of a bookmark is disabled if is not present a loaded file.
- Added a new option to properties dialog allowing to choose a font used for display of playing titles. All skinned and non skinned fonts are scrolled smoothly, therefore the "smooth scroller" plug-in is removed from PM123 distribution and "-smooth" command line switch is ignored. The skin now can define a color of the non skinned font. The SKINUTIL also define these color during the WinAmp skin conversion.
- Integrated last source codes of the Generalized Bitmap Module.
- Previous song in "random mode" does go to the previous song played, and next song does go back to the same song.
- More there are no messages about missed files at loading the playlist. Missed files are marked with a special icon and skipped at use of the playlist.
- The sources now can be compiled via Open Watcom 1.7.
- The sources now can be compiled via GNU C++. Thanks to Dmitry Froloff.
- Added support of Cyrillic letters (Russian CP866) to the first default skin font. Thanks to ntim.
- The default skin draws a bit rate digit by digit. Therefore all possible bit rates now are displayed correctly.
- Enabled the direct switching between fast forward and rewind. Thanks to Marcel Muller.
- PM123 now accepts URLs dropped from Mozilla or WPS.
- PM123 uses new and powerful i/o engine. The new engine fully supports HTTP and FTP including a seeking feature.
- The playlist can be sorted by the track number.
- The position of the vertical split bar of playlist and bookmarks windows is restored after restart.
- Fixed a lot of stuff related to the playlist manager.
- The type of the saved playlist can be chosen in the save file dialog.
- Added support of the Unicode playlist files (*.M3U8).
- All PM123 parts (playlist, bookmarks, playlist manager and player) now supports drag and drop operations completely. Also you can drag and drop records between us.
- Full support of SMP machines.
- PM123 plays smoothly on heavy-loaded systems.
- Now it is possible to edit the meta-information of group of files selected in the playlist.
- Added a technical information page to the file information dialog.
- The default skin is slightly improved.
- Used new nice and fully colored icons.
- The skin now can define colors of the playlist and other PM123 windows. The SKINUTIL also define these colors during the WinAmp skin conversion.

> #### MPG123

- Improved support of VBR mp3 files having a correct VBR header. Also improved support of VBR files without such header: timers and length of a song can be wrong, but there are no jerks of the seek slider.
- The decoder now correctly skip RIFF headers, ID3v1 and ID3v2 tags during playing a file.
- The decoder now correctly decode mpeg 2.x layer 3 files with low sample rate.
- The decoder now correctly decode mono mpeg 1.0 layer 1 files.
- The decoder any more does not eat the end of the played file.
- Seeking completes correctly when the decoder is close by the end of a played file.
- Supports ID3v2 tags.

> #### REALEQ

- The mute controls of the left and right channel are placed correctly.
- Fixed a behavior of sliders at reaching the topmost position.
  Thanks to Marcel Muller for all following:
- Now used FFT convolution algorithm. The FFT convolution is about 10 times faster than MMX.
- Significantly improved filter kernel design.
- Thread-safe plan size & FIR order changes.
- More aggressive window function.
- Larger FIR size, now up to 12288.

> #### CDDAPLAY

- Now shows correct bit rate and track size at playing a track.
- Seeking completes correctly when the decoder is close by the end of a played file.
- The CDDB cache now use the standard file-based form. Anyone can install the offline version of FreeDB database and use it without Internet connection.
- The CDDB engine uses PM123 proxy settings.

> #### WAVPLAY

- Now shows correct bit rate at playing a file.
- Seeking completes correctly when the decoder is close by the end of a played file.
- Now play AIFF (Apple/SGI), AU (Sun/NeXT), CAF (Apple Core Audio File), IFF (Amiga IFF/SVX8/SV16), MAT4 (GNU Octave 2.0 / Matlab 4.2), MAT5 (GNU Octave 2.1 / Matlab 5.0), PAF (Ensoniq PARIS), PVF (Portable Voice Format), SD2 (Sound Designer II), SDS (Midi Sample Dump Standard), SF (Berkeley/IRCAM/CARL), VOC (Creative Labs), W64 (SoundFoundry WAVE 64), XI (FastTracker 2).
- Now can play files from FTP and HTTP servers.

> #### OS2AUDIO

- The output is more accurate and any more does not eat the head of the played file.
- Can adjust gain of the currently played file according to the recommended replay gain value (if decoder provide it). See plug-in configuration dialog and http://www.replaygain.org.

> #### OGGPLAY

- Can play Ogg Vorbis audio files.
- HTTP and FTP Streaming support including SHOUTcast and icecast.
- Fully supports Ogg Vorbis comment fields.

### PM123 1.31

- The Playlist Manager closes a playlist file after its use.
- Improved some remote control commands.
- Selected files now can be removed from the playlist and deleted from disk.
- Fixed addition of the new playlist to the current playlist.
- The information about supported types of files delivered by the decoders is used now by PM123.
- All open/save dialogs have correct list of file types.
- File names with multiple dots (e.g. "test.now.mp3") are now included in the open/save file dialog list.
- PM123 PDK is included to main program distribution.
- PM123's manual and plug-in developer's guide is converted to OS/2 native format.
- Help system is implemented.
- PM123 accepts directory as command line parameter.
- Player window now can be moved by left click-dragging.
- Integrated last source codes of the Generalized Bitmap Module.
- The playlist manager now remembers the font and colors dropped on it from the font and color palette.
- Now is possible to stop use of the playlist after the beginning of its use.
- Duplicate items will not be added to the lists of recent files.
- Playing of a file does not stop if this file is removed from the playlist and the player is not in a mode of use of this playlist.
- The playlist window don't closes when using alt-f4 to close the ID3 tag editor.
- The name of the loaded playlist file is displayed in a title of the playlist window.
- Added ID3 tag character set conversion.

> #### CDDAPLAY

- The FreeDB online search now can be turned off.
- GUI is not frozen during getting the servers-list.
- If the CD disk is not found in the FreeDB, this negative hit is cached up to restart of the program.
- Settings of the module do not resetting as a result of reinstallation of the program.

> #### ANALYZER

- Fixed the minimal value of update frequency and percent of spectrum display. Zero values caused crash of the program.
- The spectrum analyzer uses new FFT library and works more accurately.
- Added the new display mode with thick bars and using a logarithmic scale of frequencies.

> #### MPG123

- Fixed possible crash during playing local files. Thank to Rafal Szymczak.
- The MP3 decoder does not stop at playing some broken files.

> #### REALEQ

- New preset are used immediately after loading an equalizer from a file.
- If the "zero" has been pressed then the current preset will not be loaded after restart of the program.

### PM123 1.30

- The bit rate of the 320 bps is now displayed correctly.
- Fixed some problems with closing and saving of a position of an equalizer.
- Changed some initial settings.
- The total and time left counters is updated now during of the delete or addition operations.
- The player is not returned to the first record of the playlist after "Use this playlist" in case of if any playlist record is already loaded.
- The fast forward and rewind now can be paused.
- Converting of a WinAmp 2.x skin is made more accurately.
- Now the skin can disable the second font.
- Now small and tiny modes are disabled if the skin does not support them.
- PM123 now use new and nice default skin.
- Fixed loading of bookmarks of CD tracks.
- The dialog of editing of bookmarks now have new and nice design.
- Added warnings about overwriting files at their saving.
- PM123 now can save M3U playlists.
- Now it is possible to use relative paths in saved playlists.
- Added separate associations with a unique icon for each supported type of files. Use makewps.cmd for creation of these associations.
- The output is closed now after end of playing.
- The Spectrum Analyzer continues the current show after loading a new skin.
- Removed the check box of turn off of waiting of the buffer in os2audio.dll properties as it did not do anything really except additional bugs.
- The visual plug-in now can be added from the properties dialog.
- The playlist now allows a user to select one or more records.
- Fixed a lot of stuff related to the drag'n'drop.
- Fixed a lot of stuff related to the ID3 tag editor.
- A loaded playlist file is played automatically if the PM123 already played before.
- The rewind and the fast forward buttons now depressed if the stop button is pressed.
- The size of the player and floating mode now is restored correctly after restart.
- Fixed screwed font in the PM123 original skin.
- The song name does not converts any more to lowercase after sorting the playlist on this field.
- Added keyboard accelerators to the player and playlist menus.
- The playlist now remembers the font and colors dropped on it from the font and color palette.
- All operations on addition of files to the playlist stops immediately at clearing the playlist.
- The play mode don't changed anymore without permission to playlist mode after deleting any file from the playlist.
- Fixed dead lock on addition of directories to the playlist.
- PM123 now save the current playlist and loaded file before exit and restore its during startup.
- Fixed crash at recall of playlist files.
- The Playlist Manager now save and restore the status.
- The Files list box on a Save playlist dialog is enabled now.
- PM123 now understands relative paths of files at loading playlists.
- The currently played file is marked in the playlist and is selected also, if it is specified in PM123 properties.
- The sources now can be compiled via VAC++ 3.6.
- Integrated last source codes of the Generalized Bitmap Module.

### PM123 1.21

- The playlist will now open back automatically if PM123 is closed with the playlist window left opened.
- Added the "window docking" feature to the playlist window as well as to "Slider 123" (see the extras in the source code package). Can be adapted to windows from plug-ins or other processes too.

### PM123 1.2

- PM123 is now free software! It is released under a BSD-style license. The OS/2 market is no longer viable, but thanks to all who paid to make PM123 what it is today, and now have fun playing with the code. If however you would like us to do work on PM123 under a contract, please do contact us.
- Fixed the "New Age" problem where the "New Age" music style could not be used in ID3 tags.
- Added CDDB support to CDDAPLAY.DLL.
- A MikMod DLL was created by Kevin Langman http://go.to/langman .
- PM123 no longer crashes when receiving invalid commands through the pipe such as "echo *status > \pipe\pm123".
- Included "querysong.c", a sample on how to read information from pm123's pipe in C. Also applies to any other languages.
- Updated the ID3 tag genre list to 148 genres.
- Include a "Plug-in" entry in the main pop-up menu, allowing easy access to the plug-ins' configuration dialog. A check mark indicates that the plug-in is enabled or active.
- The entry field in "Load URL" dialog is now selected by default.
- The timer display is now updated every 100 ms instead of 500 ms, so the seconds should not "skip" anymore.
- Fixed a possible crash when an error occurs in wavout.dll.
- Fixed crashing skinutil.exe when displaying help screen.

> #### MPG123

- Added MMX support to use with slow energy conservative CPUs.
- Will now load some corrupted VBR files properly.

### PM123 1.1 beta 4

- Fixed crash when using "add" pipe command.
- Load Plug-in file dialog showed "pm123.exe*.dll" instead of "*.dll"
- Path with no trailing backslash would not work with wavout.dll
- I hope I fixed all crash in os2audio.dll ...
- Fixed a few minor bugs in playlist playback and reduced delays
- Added "don't make PM123 wait on buffer" in os2audio settings. Makes for less delays between songs in playlist, but synchronization is all screwed up... use at your own risk. Might be improved in the future if I come up with any magic ideas.
- Timing problem with "*status" return values from \\PIPE\PM123 fixed!
- "*status" would only work when a song is playing.
- Fix crash and other problems when moving entries in playlist.
- Added support for WM_CHANGEBR to update the bit rate display in real-time to reflect the current bit rate of VBR MP3s.
- Manual updated thanks to Filip Molcan molcanf@seznam.cz
- Filenames longer than 100 characters can now be loaded properly.
- Fixed a bug in playlist recursive add where PM123 would not read some directories at all (giving errors like "can't read x:\dir1\dir1")
- Increased stack size to prevent crash in DOSCALL1.DLL during recursive add.

> #### MPG123

- Fixed some non-MP3 files being recognized as MP3.
- Fixed more floating point crashes (any left?) due to corrupted MP3.
- Fixed a buffer overload crash that would sometimes happen.
- Added support for WM_CHANGEBR
- Enhanced MP3 detection mechanism. Once more less non-MP3 are identified as MP3 files.

### PM123 1.1 beta 3

- fixed unjustified "could not load some bitmap" errors from loading skins.
- wavplay.dll would play part of the last buffer twice.
- fixed another possible crash in os2audio.dll, should be crash less now.
- Everything now compiled with VAC++ 3.08 (instead of GCC/EMX)!!! Gone are the weird PMSHELL hanging stack overflow problems related to thread issues with EMX.
- Skins now load their analyzer .dat file from their respective directory.
- Equalized sound was not updated when loading .EQ file.
- All INI files are now saved in pm123.exe directory, including analyzer.ini and scroller.ini. **DELETE OLD ANALYZER.INI**
- ID3 Tag Editor no longer crashes in PMCTLS.DLL, it updates the main window info display, and the year is now loaded properly.
- Mutes and Preamp were not restored properly in the EQ.
- RealEQ updated to 1.20 -> now you can save your settings in .REQ files.
- Fixed possible crash when unloading skins.
- Fixed possible crash when loading skins missing their .pak bundle.
- Horizontal volume bar did not draw properly when using +/- keys to set volume.
- A crash could occur at the end of a playback with specana_dobands() (analyzer.dll uses it)
- Playlist Manager now indicates "no statistics" when there is none.
- Playlist Manager now opens to the Playlist directory when adding playlists.
- Filenames with a ';' can now be loaded in playlists. An encoding scheme a la URL using % is now automatically so all filenames containing the wildest characters you can imagine coming from your server will load properly.

> #### MPG123

- HTTP content length was not always found from some HTTP servers. fixed in http123.dll 1.04

### PM123 1.1 beta 2

- Song information from the decoder is now loaded in playlist.
- Server name and genre are now loaded in playlist.
- Streaming title is up and running!
- Fixed possible crash on corrupted playlists.
- Reduced flickering when resizing and moving playlist, playlist manager and other windows.
- Implemented bookmark system! Bookmarks are loaded in the main menu directly, making them easy to use.
- Root directories can now be loaded from the file dialog kludge.
- Loaded directories using the file dialog kludge are now saved.
- Defaults and Undo do not double plug-ins entries anymore, although they still do not do anything useful for plug-ins.
- Added "Save stream" in main menu to save data on disk before it is decoded.
- Comments from songs are now loaded in the main window.
- Fixed inconsistency problem when stopping song in playlist and pressing play again.
- Fixed tracking problems for plug-ins configure dialog.
- Added new wavout.dll plug-in.
- Different output plug-ins can now be activated.
- Increased stack size.
- Trying to open various dialogs now get focus when they are already opened.
- Fixed loading Song name in playlist.
- Fixed loading/playing songs using the pipe.
- Fixed annoying crash in OS2AUDIO.DLL.
- Fixed analyzer first and last band (although they don't really show)
- Changed pm123.ini format, now uses safe OS/2 INI APIs. ***DELETE YOUR OLD INI FILE!!***
- Last .EQ file loaded are now reloaded on startup.
- Changed .EQ file format. Now saves the gain in floating point value, instead of system dependent pixel slider values.
- It is now possible to open more than one instance of the PM123 process. Pipes created by the new processes will be \pipe\pm123_2 and \pipe\pm123pl_2, and successive instances will increment that number in their pipe names.
- Visual plug-ins with cx or cy smaller or equal to 0 will no longer be deinit and reinit when changing main window size (tiny, small, normal).
- Load Track dialog now keeps in memory last drive used and automatically refreshes.
- CD Tracks can now be loaded in the playlist.
- analyzer.dll does not crash anymore if DIVE cannot be allocated.
- Playlist entry emphasis is no longer changed on each entry added to the playlist.
- "*volume" pipe command now also returns the current volume.
- fixed +/- keyboard volume hotkeys
- relative paths to plug-ins in skins are now relative to pm123.exe

> #### MPG123

- Implemented title streaming code, and code for "Save stream".
- SHOUTcast and icecast server information now passed on to pm123 with decoder_fileinfo().
- Fixed problem with calculation of average bit rate, and of seeking, for VBR MP3s.
- Increased first MPEG header from 10K to 128K. I hope this is enough for all MP3s with bitmaps (yes images geez) before the MP3 itself.
- Should not crash on corrupted Xing VBR headers anymore.
- Read ahead buffer thread now runs at critical priority, so no more skip when read ahead buffer is activated.

### PM123 1.1 beta 1

- Fixed file with spaces in pipe commands.
- execmode -sp executed on pm123.exe so it now runs in Warp Server 4 SMP
- Patched notebook loading problem with Default display settings.
- Adjusted equalizer dialog frequencies to correspond with new mpg123 values.
- Fixed auto-play on load when another stream is playing.
- Implemented new decoder, filter and output plug-ins. For this beta, very little plug-ins are fully functional.
- Playback of playlist does not close the output plug-in between playback of the entries anymore.
- "Use this playlist" and next/previous now loads the ID3 Tag.
- "Default display" now works everywhere.
- Playlist now continues playing after selecting a song from the playlist.
- Drag and drop from the playlist to main window now works properly.
- Random button does random playback again, not sorting. Random is also much faster than it was in beta 2. Use "Random" in the Sort submenu if you want to do playlist shuffling.
- Repeat and Random playback state are now reloaded after launch.
- Fixed random crash when adding with recurse, I hope...
- Repeat now works in all conditions.
- Adding to a playlist before the current loaded song now updates its index.
- Deleting from a playlist before the current loaded song now also updates its index.
- Directories can now be added from the "Add to list" file dialog. This is basically a hack in the file dialog. Unless you manually type the path, the directory will have to be selected in the directory listbox AND it must be the current directory listed in the file listbox AND the filename entry field must be empty, or "*" or the default "*.*".
- HUGE playlist (~900 songs and more) are now able to load.
- pm123 doesn't crash when loading playlist from the command line for an already opened instance. This includes .m3u since they are now loaded as playlists.
- Fixed problem when loading playlist and a song from the unloaded playlist was already playing.
- Deleting entries from a playlist doesn't auto-use use it anymore.
- Sorting by size and time is now much faster.
- Loading entries from the playlist now actually loads the right entry, not just the one with the same exact filename. but this basically makes it faster...
- Added support for WinAmp style .pls playlist files including SHOUTcast. Titles for SHOUTcast servers are loaded from the .pls so you see all the neat stuff like the load of the servers when you load the playlist.
- Fixed problem loading HTTP URLs with no path like on SHOUTcast.
- Included procedure in netscape.html to properly configure pm123 as a Netscape Navigator helper application.
- Fixed memory leak when removing entries from the playlist.
- Streaming buffer now works properly and continues playing buffered stream even if read operations are stalled.
- Broken HTTP connections are now properly canceled and closed on stop.
- Added workaround for timing problem in DART for setting volume right after the device is opened.
- HTTP URL with no filename like SHOUTcast now show the complete host instead of interpreting it as a filename. Title streaming is on its way...

> #### MPG123

- Fixed streaming audio by adding two in a row header checking.
- Implements new pm123 decoder plug-in interface.
- Fixed floating point exception crashes. Let me know if you can still reproduce any SYS3183.
- Fixed problem with MP3 EQ range calculation with low frequency overflowing table and screwing up memory when MPEG 2.5 Layer III files were played.
- Added support for virtual host names in HTTP123.DLL
- In HTTP123.DLL, fixed seeking (and also loading) problems and glitches, especially with slow media (like CD-ROMs) and big read buffers. But be wise, Read Ahead buffering produces an unnecessary overhead on fast media.
- Added mp3->wav decoder. Command line utility only for now.
- For developers, added a play status semaphore. It can be used to sleep instead of DosSleep() with the advantage of knowing exactly when the player stops.
- Fixed MMPM crash when DART underrun occurs.
- Fixed Equalizer mute crash.
- FileInfo (in playlist) was always reporting 0 length songs.
- Fixed possible infinite loop in read ahead header.
- Added support for Xing Variable Bitrate MP3s.
- Added auto-repause kludge so that when MMOS/2 gives access back to the sound device, the bug in MMOS/2 doesn't unpause mpg123.
- Added new 10 bands ISO normal frequency equalizer for MP3s *only*. The interface (which also needs to be fixed) will not be updated until Taneli has more time on his hands, but here are the bands. Also note that the decibel calculation was wrong before (way too loud).
- 12kHz MPEG 2.5 Layer 3 files now play.
- Added fix for new Xing encoded MP3s from mpg123 0.59q
- Added read ahead header check. This should make ALL valid MP3s even with broken headers work, and should not identify anything else than MPEG audio files as MPEG audio files such as bitmaps lying around in your MP3 directories.
- Added fix for Aurora from dink.
- oops, broke some MP3s for nothing, it's back all right now
- play 48 at 44 works right now
- found some Audio MPEG Header documentation. Should now work with any MP3s other players or decoders play, if not, please contact me. I've also fixed 8000Hz MP3 support, cool.
- patched possible divide by zero when loading corrupted files.
- implemented workaround for bad GUS driver DART buffer timing (it jumps by 250 ms step once in a while instead of incrementing for each buffer). Makes decoderPlayingSamples() work correctly on GUS.
- finally found the proper buffers to flush. no more first buffer trash kludge and now any snap crackle and pop are REALLY only coming from your sound card alone (check the visual plug-ins if you don't believe me)
- faster seek by boosting priority (oops, forgot this initially :)
- audio engine now fills empty buffers with 128 value instead of 0 for 8 bit playback (removes the clicks, but it still sounds like shit :).

### PM123 1.01

- Fixed bug in WinAmp skin loading that caused PM123 to crash
- Fixed a WinAmp skin seek slider glitch - please reconvert your seek slider problematic skins
- You don't have to add ".lst" when saving a playlist anymore
- Spectrum analyzer plug-in revised:
  - Added falloff
  - Made analyzer area droppable
  - Frequency chop allows you to drop unused frequencies
  - More efficient spectral leakage reduce method
- Added a warning if some bitmaps of a skin were not found
- Added read ahead buffering in streaming audio
- HTTP.DLL renamed to HTTP123.DLL
- Fixed Warp 3 glitches in fonts
- Fixed a crash in playlist sort
- Added a new settings (and a new settings page): - Play 48 kHz as 44 kHz
  - Streaming audio settings
  - Default display mode (filename, ID3 tag, information)
- Fixed font bug in older skins
- Fixed a bug in the Unregistered window which caused it to hover above all windows
- Fixed bug when pressing Alt-F4 in the main window
- Fixed Recall-menu behavior
- Added a new "smooth scroller" with DBCS and national character support, which can be activated by starting PM123 with the "-smooth" switch
- Improved 256-color support
- Shift-click Play/Stop button while playing to fade out and stop playing

> #### MPG123

- fixed timing bug between MP123_PLAY and MP123_STOP
- added buffer mode to HTTP123.DLL and in MPG123.DLL. rewinding and fast forward will give a quirk in buffer mode sometimes.

### PM123 1.0

- Improved skin handling (making it possible to make PM123 look almost 1:1 with WinAmp)
- Improved palette handling
- Fixed WarpAMP playlist loading
- Fixed drag'n'drop playlist reorganizing
- Changed GBM.DLL to GBM123.DLL because people might have other non-compatible GBM.DLLs in their LIBPATH.
- Added 82 more genres, including WinAmp genre extensions
- PM123 can now take `advantage' of full window dragging in Warp 4
- Drag'n'dropping a directory presents a menu where you can select recursive or non-recursive adding
- Properties dialogs refined
- Added 'auto play on playlist use'
- Added selectable scrolling setting
- Added 'Edit ID3 tag' to main menu
- Added PM123 Skin Utility with WinAmp skin conversion and skin bundling
- Playlist file adding moved to threads
- Multiple directory drop
- Main window accepts multiple files and/or directories
- PM123 remote control via \PIPE\PM123 (even over the network)
- Added frequency and mode to playlist info field, and to main display (click on the song name)
- Added visual plug-ins
- Added graphical equalizer with band mute and preamplifier
- Improved HTTP handling
- Added M3U support in playlist
- Spectrum analyzer, CPU usage and oscilloscope plug-in
- Real Equalizer

> #### MPG123

- decoderFileInfo can now be called more than once at the same time
- kludged the jump to command to trash the first buffer (until I figure out more on the digital audio processing and where it keeps the buffer)
- enlarged filename length from ~512 to ~1024, allows for bigger URL I guess.
- now compiled with VAC++, works better with DLLs than EMX
- RxDecoderError now works
- decoderError now reports non-critical errors
- decoderError now queues error messages, empty it, or you'll memory leak
- added filter plug-ins
- added possibility to change the decoder's band gain (there are only 32 linear bands, at the moment, this means at a sample rate of 44100, ~689Hz per band = 44100/2/32) they suck BTW
- added decoderPlayingSamples, to catch a few samples real time from the OS/2 DART audio system to display real time stuff like an oscilloscope or a spectrum analyzer. Note, it will get a buffer length in bytes, you have to calculate how many of them you need according to the bitspersample and channels.
- decoderFileInfo now reports 0 on success and some error code otherwise.
- decoderPlaying extension as decoderStatus
- new kludge that plays 48kHz PCM at 44.1kHz. This is really ugly, you don't hear a big difference, but you're better off converting it. If you are wondering why I'm not converting it real time 1. more CPU time needed *OR* 2. sounds real bad (aliasing and company)
- HTTP module now in HTTP.DLL

### PM123 pre 1.0 Beta 2

- Added keyboard shortcuts:
  * Left/Right = Rewind/Fast Forward
  * Enter = Play/Stop
  * 5 (on numeric keypad) = Pause
  * Up/Down = Next/Previous song
  * Alt F4 = Quit
  * +/- = Increase/Decrease volume
- Added skin support
- Fixed shuffle
- Fixed RIFF headered and/or broken MP3 support
- Added seek slider (grab seek slider to move within MP3)
- Fixed control button errors
- Enhanced/fixed tag editor
- WarpAMP playlist loading

> #### MPG123

- decoderTime(PLAYEDSECS) now shows the position being played, not decoded.
- when buffers are trashed for rew and ffwd, the mpeg stream file position is brought to the file position that the decoder was at when it filled the currently playing audio buffer.
- the decoderTime(TOTALSECS) now reports something until all audio buffers are played.
- max buffers locked to 200 and min to 5. these are 16KB buffers, and they seem like absolute limits anyway.
- fix crash when there was an MCI error when starting playing and pm123 already played something before (trying to free memory it didn't allocate)
- the first buffer is trashed to prevent the playing of the last buffer of the previous stream (I can't figure out what's going on, help me!!!) Whatever snaps, crackles and pops left are due to your MPEG streams or your sound card.
- new decoderFileInfo(). allows program that need to check validity or specs of an mpeg stream with mpg123
- stop now unpauses the stream before closing.
- opening http streams should work better now.
- much better rewind and fast forward (makes jumptosecs work a lot better too)
- reporting errors should be more reliable
- http routines now report usable error messages
- http routines now check for "Content-Length" to determine total time
- seeking and timer routines now use the file position instead of keeping track of the frame numbers. makes the decoder faster and more consistent with the total time.
- added REXX support ... hum

### PM123 pre 1.0 Beta 1

- First public release