News archive
-
build:
- Fix --disable-8bit.
- Fall back to generic decoder if no yasm for MSVC (bug 346).
- Fix some pedantic compiler warnings, avoid breaking libtool wrappers.
-
mpg123:
- Fix verbose position printout for new resampling outside libmpg123 (where output rate differs from decoding rate).
-
libsyn123:
- Fix reconfiguration of resampler to avoid double free when reducing decimator stages to zero (bug 350). Thanks to Youngseok Choi for reporting this fuzzed issue.
Head over to the download section for getting your hands on the release.
- Fix build --with-network=internal only (configure logic error, bug 348).
- Fix OS/2 build with getaddrinfo() (which may support IPv6 eventually, thanks to Dave Yeo).
Head over to the download section for getting your hands on the release.
- Fix largefile aliases for the case of a largefile-insensitive build that still does define _FILE_OFFSET_BITS from the outside (sys/feature_tests.h on Illumos).
Head over to the download section for getting your hands on the release.
-
mpg123:
- Finally make terminal control work on Windows, for real. Building it was broken in 1.30.x.
- The --control / -C switch will make mpg123 abort now if terminal control cannot be enabled.
-
Revert to internal network code for plain HTTP to ensure continued
support for original shoutcast servers that do not talk proper HTTP.
External backends are built at the same time and can be enforced using
--network
. - Try-witout-port for internal network code is gone. We do not need to keep each ancient hack for specific hosts.
- Handle redirections independently of the backend behind net123.
- Set proxy environment variables when --proxy is specified, for net123 backends to use.
- Continue reading for long commands in generic control, avoiding unnecessary unfinished command errors.
- Change error message from 'unknown command' to 'unknown command with arguments' to avoid confusion why 'help foo' is unknown, as opposed to 'help'.
- Reduce CPU load while just waiting for terminal input (thanks to bolshoytoster on github).
- Condense terminal control help output and excessive vertical whitespace in printouts (inspired by Volkmar Klatt).
- Fix interaction of pause (looping) with buffer, adding --pauseloop to set the loop interval.
- Numeric option arguments are strictly checked now for conversion errors. This also catches -devbuffer, which was interpretd as -d 0 before. This also applies to out123.
-
libout123:
- Add same interruption handling to out123_write() as to unintr_write(), adding EAGAIN to fix bug 342 (thanks to Steffen Nurpmeso) for certain ALSA setups.
- Add --devbuffer support to win32 output and change default to 0.25 seconds.
- Fix race condition to deadlock on buffer_sync_param() where parameters after the command byte got read as more commands. This got triggered easily by using the pause key in terminal mode with buffer (which was discouraged before because of buffer flushing). Generally, changing parameters with active buffer process was dangerous since libout123 entered the scene.
- some build fixes for compiler pickyness
- Disable largefile renames also for non-sensitive POSIX systems (in some distant future, the alias symbols could go away, then … bug 330).
- Fix Android NDK x86 builds with GLOBAL_VAR_PTR use in assembly (bug 345).
Head over to the download section for getting your hands on the release.
- Only use EWOULDBLOCK if the macro is defined (FreeBSD misses it for _POSIX_SOURCE, bug 339).
Head over to the download section for getting your hands on the release.
The obligatory follow-up with some fixes … and the forgotten man page update.
-
mpg123:
- Show stderr of network helpers in -vvv mode.
- Use curl --http0.9, if available, to support shoutcast v1 streams without wget (wget not needing such switch, yet).
- Support file:// URLs for local access as was intended with the last release.
- Give more helpful error message if neither wget nor curl are usable, also allow error messages from curl to appear when not --quiet.
- Update the man page.
Head over to the download section for getting your hands on the release.
This release finally makes the mpg123 console application support HTTPS streaming, by ditching the old internal network implementation in favour of just calling wget or curl (both tried) to do the messy networking things on forking platforms, and even two possible native APIs on Windows (winhttp by default, build-time choice).
The second notable addition is terminal control for both Windows and OS/2. Yes.
- build:
-
mpg123:
- new network backend using external tools/libraries to also support HTTPS
- old network backend changed to use h_addr_list[0] instead of h_addr
- terminal control keys now case-sensitive (fixing smal/big pitch controls)
- additional terminal control keys for simple equalizer control (A/a for bass, J/j for mids, N/n for treble, e for reset, E for printout)
- terminal volume control now in decibel steps and bounded to +/- 60 dB
- terminal control now also with audio from stdin (bug 338) via /dev/tty or ctermid()
- terminal control also available for OS/2 and Windows platforms
- re-print tag info on decrease of terminal width for a bit less mess
- always print an empty line after tag info for cleaner appearance
- print lyrics also to stderr
- remote control API v10 with "@P 3" as additonal message on track end
- also added PROGRESS command as opposite of SILENCE
- fix some verbosity, tweak help for --icy-interval
- added --auth-file
- also obscure argument to --auth for others
- Cygwin/MinGW: Provide _win32_utf8_wide and _win32_wide_utf8 unconditionally. It is needed by the WASAPI plugins, the underlying conversion functions should be present since Windows 2000. Fixes WASAPI support on Cygwin. Also needed for new network code.
-
libout123:
- pulse: initialize more error codes to avoid bogus error messages
- os2: considerable fixup for proper writes of full buffers avoiding nasty effects from the ... special audio system, more cleanup still nice-to-have, but still lacking
Head over to the download section for getting your hands on the release.
- libmpg123: Catch more NULL pointer arguments in LFS wrappers (most prominently: mpg123_feedseek(), bug 328).
-
mpg123:
- Fix regression that did _not_ enable --remote-err on -s anymore.
- Fix typos in man page (thanks to Naglis Jonaitis).
- Drop mixed-up value limits on remote control SEQ command. It is up to you if you want to distort your sound.
- Add note about equalizer frequency bands to man page.
- build: add BUILD_PROGRAMS option to ports/cmake
Head over to the download section for getting your hands on the release.
- libmpg123: Fix non-live-decoder safeguard for mpg123_framebyframe_decode() (was a no-op in practice, bug 324).
Head over to the download section for getting your hands on the release.
-
mpg123:
- Keep default output encoding of s16 for raw and file outputs also with the new resampler. This reverts the unintentional change in 1.26.0 of switching to f32 for forced output rate unless the NtoM resampler is selected. In any case, you should make sure to specify your desired --encoding if you depend on it.
- Catch error in indexing (mpg123_scan() return value was ignored before, bug 322).
- mpg123-strip: Lift the resync limit, as it should be to clean up really dirty streams.
- mpg123-id3dump: Also lift resync limit for the same reasons.
- libout123: fix reporting of device property flags for buffer
- libmpg123: more safeguarding against attempts to decode if decoder setup failed and user ignored the returned error code (bug 322)
If you for some reason are stuck on 1.26.x, I recommend updating at least to the changes in the 1.26-fixes branch. but of course, the proper thing is to jump from 1.25.x or anything in between to 1.29.1 to avoid that little default output encoding surprise with forced rate.
Head over to the download section for getting your hands on the release.
- build: added --enable-runtime-tables
-
libmpg123:
- Float decoder runtime table computation is back as option, based on suggestion and initial patch by Ethan Halsall for a smaller download size of the wasm decoder built from libmpg23. This only trims the size of the binary on disk (network), for runtime overhead and a bit of uneasyness about concurrency during table computation, which happens implicitly on handle initialization, only guarded by an integer flag. This does _not_ revive mpg123_init().
- The ID3v2 UTF-16 BOM check is now a straight-on loop and not a recursive function.
The BOM check fix has been added to the 1.25-fixes and 1.26-fixes branches to ease importing into stable/LTS packages. Small stacks could collide with recursion depth, better avoid that.
Head over to the download section for getting your hands on the release.
-
libout123
- Complete the fix for bug 314, reopening the device after format setup failure.
Head over to the download section for getting your hands on the release.
-
build:
- Explain --with-default-audio in configure help better.
- Fix build of arm_fpu (regression of configure reorg).
- Re-introduce AC_PROG_C_C99 macro for autoconf 2.69, it's only obsolete after that.
- Un-break CMake build for botched move of CheckCPUArch.c.in (bug 315).
- Avoid conflict of warning macro with MSVC pragmas in two places. Also fix UWP build with strerror check and move down inclusion of intsym.h (bug 316).
- Disable libout123 (and mpg123, out123) on UWP with cmake to get at least the decoder lib built (317).
- Hack around CMake bug(?) with QUERY_HAS_FPU to make ports/cmake also work in MinGW (bug 318).
-
libmpg123:
- Make mpg123.h.in usable again with MPG123_NO_CONFIGURE, for external uses (bug 313).
- Use predefined MPG123_API_VERSION in mpg123.h.in for the same.
- Better handle the ssize_t situation via typedef mpg123_ssize_t, less likely to be broken in future MSVC versions.
- Fix an integer constant definition for the most negative 32 bit numnber to avoid justified compiler complaints.
-
libsyn123:
- More support for MPG123_NO_CONFIGURE.
- Optionally use predefined SYN123_API_VERSION in syn123.h.in for the same.
- Add a cast to silence integer sign warning for offset in muloffdiv64() (bug 317)
-
libout123:
- Pulse module advertises wider format support now, not just s16. This makes mpg123 -e s24 work with it, not just out123.
- Optionally use predefined OUT123_API_VERSION in out123.h.in for non-configure use.
- Fix sndio output to properly query device format support and get default fomat on FreeBSD (bug 314).
Head over to the download section for getting your hands on the release.
Some backports of important fixes to the 1.25 series, for very conservative people. The freshest mpg123 stays 1.28.0 from a few days ago.
- libmpg123: Backport bit reservoir CRC fix from 1.26
- libmpg123: Backport part2_3_length regression fix (bug 312).
Head over to the download section for getting your hands on the release.
-
build:
- Fix up the build to actually build all library objects with libtool consistently, also ensuring no pointless static archives for output modules.
- Adapted things to autoconf 2.71, requiring 2.69 now (the latter tested on Debian, with their patches).
- Improved configure to be more useful --with-default-audio to define the search order, fix static build for --with-audio being a list (just choosing the first one).
- Ensure consistent use of LINK_MPG123_DLL in headers.
-
build (ports/cmake):
- Thanks to Evgeni Poberezhnikov for working with us on that.
- Fix up ports/cmake to really work in MSVC also for users of the lib (tested in vcpkg, bug 310).
- Hardcode ports/cmake CPU detection for x64 and ARM as CMAKE_SYSTEM_PROCESSOR is useless crap (bug 298 for real).
- Add missing io.h for _setmode() MSVC warned about (bug 311).
- Added BUILD_NO_LARGENAME define to be used by MSVC builds. Note that an MSVC build of libmpg123 does not support 64 bit file offsets. That would need more morting to the explicit API. Thanks to MS for making off_t even more messy and less useful.
- Added JACK output, fixed handling of compat_str there and in win32_wasapi.
- libsyn123: Fix syn123_mix() to actually do intermediate conversion when input and output encoding are the same but non-float. This makes out123 --mix work with s16 input and output, which is not that special!
- libmpg123: Fix misguided handling of part2_3_length checks in III_get_scale_factors_1() and III_get_scale_factors_2() which invalidated decoding of a mono source encoded as ms+i-stereo (bug 312). This was a regression introduced with version 1.25.7.
-
libout123:
- Print basic module loading errors only for last one in list. This enables use of an output module search list that anticipates module files not installed with the main package.
- Fixes for win32_wasapi build with MSVC.
Head over to the download section for getting your hands on the release.
- Removed ports/Xcode, ports/cmake should handle that case.
- Ensure debug.h is included last where it matters to avoid conflicts with debug/warning macros in system headers (bug 308).
- Fix some debug/printf integer casts for 32 bit platforms (bug 309).
Head over to the download section for getting your hands on the release.
-
libmpg123:
-
Running on precomputed tables now, no need to call
mpg123_init()anymore. That andmpg123_exit()are both just empty shells. You can omit them if you do not care about earlier libmpg123. You can check forMPG123_API_VERSION >= 46. -
Added API that avoids enums, mapped-to by default unless
MPG123_ENUM_APIis defined.
-
Running on precomputed tables now, no need to call
-
libout123:
-
Added API that avoids enums, mapped-to by default unless
MPG123_ENUM_APIis defined. - Added device enumeration for win32, win32_wasapi, alsa, pulse. This increments the output module ABI version to 3.
- You can choose output devices now on Windows.
- Changed default output module order to put pulse before alsa since we now ensure that pulse is not inadvertedly started by the autospawn feature. This improves the experience on desktop systems with pulse where the alsa to pulse use causes glitches. Note that on a modern Linux desktop (Ubuntu), you will not escape an instance of pulseaudio being started, with even the enumeration of the ALSA default device summoning the daemon. If you _want_ sound daemon autospawn behaviour on other platforms, you need to trigger it outside of libout123.
-
Added API that avoids enums, mapped-to by default unless
-
examples: Update for dropped
mpg123_init(), more sensible copyright notes. -
out123:
- safer limiting of maximum playback rate
-
Added
--list-devices.
-
mpg123:
-
Fix
--continueoutput to print track_count+1 as continue position after hitting the end of playlist. Makes scripts/conplay go to back to the beginning again (regression in 1.24.0, bug 250). -
Remote control API version 9 with
@I {…@I }wrapping of ID3 and playlist display. -
Added
--list-devices. - Fix console printout on Windows.
- Fix terminal control logic to better handle cases where stdin or stderr is not a terminal, also avoid enabling control if you specify stdin as input file.
-
Fix
- Updated debugging/warning/error message macros to include the function name.
Head over to the download section for getting your hands on the release.
A little bit of fixes …
- Add ./configure --enable-xdebug (for the resampler issue).
- Avoid denormals in the resampler by adding an alternating offset (helps performance without -ffast-math, depending on platform).
-
libmpg123:
- Fix ID3v2 APIC parsing when frame length bit is set (bug 306).
- Also handle the group flag (skip the group byte).
- Also fix up frame flag handling for ID3v2.3. Did not crop up yet, but it was just wrong. Impact was not detecting and bailing out on compressed or encrypted frames properly.
Head over to the download section for getting your hands on the release.
Here is a rather boring mpg123 release to celebrate the end of the weird year 2020.
- Clarify seeking documentation regarding samples and PCM frames.
- Fix build on MorphOS (patch by Ozkan Sezer, bug 295).
- Fix cmake build to install fmt123.h.
- Some cmake build fixes, tinyalsa addition by Maarten (bug 299).
- libmpg123: explicitly handle some irrelevant corner cases in tabinit (bug 279)
Head over to the download section for getting your hands on the release.
The fre:ac userbase uncovered long-standing errors in the Windows variant of x86-64 assembly code that wasn't in use by default in earlier times. This release thusly contains one change:
- Fix accurate (--enable-int-quality) and s32 x86-64 assembly for Windows ABI (thanks to Robert Kausch of fre:ac). The accurate code just crashed before.
Head over to the download section for getting your hands on the release.
Some refinements.
- Enable terminal control by default only when both input and output are connected to a terminal. This avoids messing with terminal settings when piping stderr to a pager, which takes over terminal input anyway, while mpg123 still thinks it got control.
- Windows build fixes for UWP and without GetThreadErrorMode when not building modules, thanks to Steve LHomme.
- Android build fix regarding off64_t use, thanks to Steve LHomme.
- More CMake build fixes thanks to David Callu (bug 290).
- Use PROG_LIBS for output modules, to reinstate not necessarily proper but previous behaviour and fix FreeBSD port build (bug 291).
- Refine LFS support in libsyn123, avoiding architecture-dependent syn123.h (debian bug 963205).
Head over to the download section for getting your hands on the release.
A little follow-up to the big feature release, fixing build issues.
- Fix cmake build by actually including the read_api_version file in the distro.
- Fix big-endian build, stupid omission of a variable declaration, semicolon (bug 289).
- Silence a harmless warning for build without realtime priority.
There are no effectual code changes, so existing binaries for 1.26.0 can still be considered current.
Head over to the download section for getting your hands on the release.
After somewhat longer than usual gestation, here comes the next feature release of mpg123. Only small build and installation fixes followed the first public release candiate. The final 1.26.0 is identical to 1.26rc3.
Compared to the previous stable version, quite a numer of changes arrived. Lots of housekeeping and as a major addition, a signal generation and format conversion library born out of the test signal code from the out123 program. See the libsyn123 API for what it has to offer. Something only a bit insane is a fairly-efficient low-latency resampler using IIR filtering, which I wanted to design just because everyone else does it differently;-) This resampler now replaces libmpg123's internal drop-sample NtoM decoder by default when you fix an output rate in the mpg123 program.
- Starting to intentionally use C99 in the codebase. API headers are still supposed to be compatible to C89.
-
There is a
make checktarget now that tests some text transformations. It is an open question how that should be developed in relation to the external regression and compliance test suite. -
Finally silenced memory checkers about leaking memory from
getlopt()(main code overwriting values without freeingstrdup()strings). - AUTHORS now in UTF-8;-)
- CMake build files in ports/cmake, as an alternative to create MSVC project files and the like (thanks to Vitaly Kirsanov)
-
Default build with proper integer rounding
(
--enable-int-quality) now. - Cygwin/midipix autoconf fixes (thanks to Redfoxmoon).
- Updated Windows build script, notably renaming .dll.def to .def. Requires an argument now for build type, an optional one for parallel make (not that useful on MinGW).
-
Rework library dependency handling to avoid unnecessary linking for
lib*123. Also add proper
Libs.privateto .pc files to enable static usage (especially on Windows with shlwapi). - Updated support for OS/2 in the form of ArcaOS.
- Removed outdated Pascal port (ports/mpg123_.pas). There are others out there.
- Updated man pages, been a while.
-
mpg123:
-
Fixed-rate playback now prefers the libsyn123 resampler instead of NtoM
in libmpg123, see
--resampleparameter. -
Drop
--STDOUT(never properly implemented, use pipe to out123 instead). -
Make
--streamdumpuseunintr_write()to avoid inconsistencies. - Now sets non-zero exit code when any one track of the playlist fails to either produce at least one frame of playback, if there is data that should produce such (i.e. /dev/zero is bad, /dev/null is fine). See man page for details.
-
Print out MPEG header info for each frame for
mpg123 -vvvv. -
Added
--no-visualto disable cursor/inverse video games explicitly. - Clear progress bar before printing updated metadata within a stream.
- Filter control/non-printable characters from user data printout, reduce ID3v1 data to 7-bit ASCII (no way to know correct 8-bit encoding for sure). This should cover bug 267.
-
Set
MPG123_NO_PEEK_ENDwhen opening special file '-' (standard input). That helps Windows where attempting to seek on the non-seekable stream is undefined behaviour (bug 285). -
Print errors in player code also for
--quietoperation (just no messages from the libraries). - Ignore ID3v1 once a Frankenstein stream was detected.
- Prevent a cosmetic use-after-free in audio playback during program abortion just after starting playback (prebuffer still in use, implication a blip of bad sound and a complaining sanitizer).
- Reformat audio capabilities table, more condensed, fits into 80 columns. Forced rate on a separated line.
-
Make
--pitchactually work, not just interactive changes. Pitching uses a resampler now if a fixed output rate is specified. -
Added
--no-frankenstein. - Frameflags as long variable, 32 bits are needed since some time now.
-
Fixed-rate playback now prefers the libsyn123 resampler instead of NtoM
in libmpg123, see
-
out123:
-
Document
--STDOUT, make it more robust regardingfwrite()interruptions. - Removed the implicit phase shift that made generated waves exactly at Nyquist freq non-silent, but made little sense overall.
- Less high-frequency shifts to make waves fit into the table (not insisting on even number of samples).
- Option to work without wave table (setting the limit to zero).
-
Added
--wave-directionto also enable backward time without phase shift. - Waves now generated by re-usable little synthethizer library dubbed libsyn123.
- Pink noise from libsyn123 added (using code from Phil Burk).
- White noise from libsyn123.
- Geiger-Mueller counter simulation from libsyn123.
- Wave sweep generator from libsyn123.
- Some rearrangement in help text.
-
Changed output of
--test-encodingsto list of encoding names instead of raw bitmask value. -
Added
--endian,--inputend, and--byteswap.
-
Document
-
libsyn123:
- Created the library to host some simple signal generators for testing output.
- It also hosts sample format conversions as a necessity to be able to directly produce the format output devices need.
- Well, also channel mixing while we're at it.
- Oh, and a minimal-latency-and-reasonably-efficient resampler that only took me over a year to figure out. I should write a paper about it.
-
libout123:
-
Added
out123_free()for the benefit of library wrappers. (bug 276) -
Removed change of effective user ID in the WAV/RAW/AU/CDR writer.
This was intended as a safeguard to avoid creating files with root
priviledges. But: Other output modules still allowed root-level
access to various devices and files, so it was never safe to do
something awful like installing mpg123 with suid bit or configure
sudo to allow users to run mpg123 with arbitrary arguments.
You should treat
out123_open()just like the regularopen(): You can write to any file/device depending on your permissions. - Finally maybe fixed the damaged playback when using pulse hidden behind the ALSA API (on Ubuntu, for example) by setting a high value for device start threshold.
-
Fixed
out_play()abortion logic to better detect fatal situations (broken pipe). Needed on FreeBSD, while Linux buffers the issue away. Should resolve bug 283. - Limit size of buffer block being written in out123_play to 16K, avoiding unnecessary failure with ALSA at least.
- Using SDL2 now if found. Output module code unchanged.
- Added hex and txt (plain text) printout.
-
Eliminated spots where error messages would still be printed
also for
OUT123_QUIETbeing effect. - Dummy output accepts any encoding now.
-
Added
-
libmpg123:
-
Added
mpg123_open_fixed()to ease API for applications that just want to decode well-behaved local files. -
The user buffers for audio output data are now declared as
void*formpg123_read(),mpg123_decode(), andmpg123_replace_buffer()to avoid the useless need for casting your niceint16_tbuffer to unsigned char for decodingMPG123_ENC_SIGNED_16data to it. -
Added
mpg123_free()for the benefit of library wrappers. (bug 276) -
Add
mpg123_format2()andmpg123_fmt2()supporting special value 0 for all rates. - Fix changing of decoder (and output format along with that) after stream opening. This was never recommened and only now should work at all.
-
Also
mpg123_decode_frame()now sets return buffer toNULLand returned byte count to zero in case ofMPG123_NEED_MORE(or any other early abort). -
MPG123_NEED_MOREnot returned anymore for non-feeder streams. Got in there for generic partial frame body reads, but was only intended for feeder API. -
Added
mpg123_set_moreinfo()to support the Lame project's frame analyzer, disabled by./configure --disable-moreinfo. - Added optional storage and retrieval of raw ID3 data.
- Fix skipping of ID3v2 footers (too much was attempted to be skipped). This is of not much practical consequence as a tag with footer would appear on the end of files anyway and files with ID3v2 tags at the end seem to be rather rare.
-
Add
mpg123_new_string()andmpg123_delete_string()to avoid confusion about whatmpg123_init_string()andmpg123_free_string()do. -
Make
mpg123_resize_string()terminate the string if shrinking (fill now limited to new size). -
Improve layer III frame parsing/error reporting for bad
part2_3_length. - Fix crashing on stupidly low NtoM rates (exceeding downsampling factor 31). This was only triggered by you specifying a forced sampling rate below 1550 Hz.
- Do not remove CRC bits twice from possibly available bit reservoir. This move needed recomputation of the layer3is reference data for 8 and 24 kHz. Old mpg123 is wrong in the first few frames.
- Generally more tight control and early bail out on reading bits of frame data for all layers. This reduces the count of error messages on badly damaged files a lot and feels a lot safer, too. Note that we already silently returned zero bytes instead of actually over-reading the frame buffer before, but now it happens with diagnostics and more checks before it may happen.
- Optionally enforce output endianess (big/little) away from native.
- Fix build without error messages.
- Fix build without gapless decoding.
- Disable buffer when neither mmap nor shm functions detected (fixes build for Android, thanks to vquicksilver).
- Some support for extremely small streams (below 128 bytes). Those are too short to contain anything useful besides some tiny metadata, but serve to find/reproduce parser bugs.
-
Fix
mpg123_read()for builds without feeder. It callsmpg123_decode()without feeding input, which was disabled by mistake. The use ofmpg123_read()(instead ofmpg123_decode_frame()) withmpg123_open()was broken in feederless builds since those were fixed in version 1.15. - Fix ID3v2 parser logic for multiple ID3v2 tags being encountered in one stream. New tags replace old data instead of appending to it when the extended header update flag is not set (ID3v2.4). Update tags only replace data that shall be unique. So far, I have never seen an update tag in the wild, so the check for the flag is untested. The mechanism of replacing parts of existing tag data has been tested, though. Note that the updated libmpg123 also avoids a growing ID3 data structure when repeatedly seeking back to the beginning in a file with disabled seek index.
-
Eliminated a spots where error messages would still be printed
also for
MPG123_QUIETbeing effect. -
Added
MPG123_NO_FRANKENSTEIN,MPG123_FLOAT_FALLBACKflags. -
Now actually try floating point encoding if format matrix allows it
(can be disabled by unsetting
MPG123_FLOAT_FALLBACK). -
Added
mpg123_feature2()also added feature queries for floating point output.
-
Added
Oh, I'm giving in to the lack of enthusiasm about the new merged mailing list. I'm closing it again and we continue to use mpg123-users and mpg123-devel.
Head over to the download section for getting your hands on the release.
Just a little update before making 1.26.0 final. This changed compared to 1.26rc2:
- Install libsyn123.pc file in main build system.
- Add NEWS.libsyn123.
- Update doxygen files for libsyn123 addition.
- Set library API versions also in CMake build (thanks to David Callu, bug 287).
- Fix some casts in printouts to silence clang (on 32 bit).
- Check for
SIZE_MAX > UINT64_MAXbefore doing silly check for larger-than-64-bits sizes, to silence clang. - Fix typos in NEWS.
And remember: The race is still open for the future of the mailing lists. With the impending release of 1.26.0, it will be decided if the project will keep separated lists for users and developers or just use one discussion list for the rather low overall volume. If you prefer one or the other, make sure you are subscribed to your preference.
If the count of subscribers to mpg123-discuss is close to the others, I assume the shift is taking place. If not, the new list will be closed again. So (un)subscribe at your will:
Head over to the download section for getting your hands on the release.
Here now is the first proper sign of life from the mpg123 project since years, not just being forced to spit out bugfixes due to the next round of Open Source fuzzing. This is a big one. Lots of housekeeping and as a major addition, a signal generation and format conversion library born out of the test signal code from the out123 program. See the libsyn123 API for what it has to offer. Something only a bit insane is a fairly-efficient low-latency resampler using IIR filtering, which I wanted to design just because everyone else does it differently;-) This resampler now replaces libmpg123's internal drop-sample NtoM decoder by default when you fix an output rate in the mpg123 program.
Due to the long list of changes, this release cycle starts with a candidate that hopefully does not need many changes before it resurfaces as 1.26.0 at the end of the month. And this is said list of changes:
- Starting to intentionally use C99 in the codebase. API headers are still supposed to be compatible to C89.
-
There is a
make checktarget now that tests some text transformations. It is an open question how that should be developed in relation to the external regression and compliance test suite. -
Finally silenced memory checkers about leaking memory from
getlopt()(main code overwriting values without freeingstrdup()strings). - AUTHORS now in UTF-8;-)
- CMake build files in ports/cmake, as an alternative to create MSVC project files and the like (thanks to Vitaly Kirsanov)
-
Default build with proper integer rounding
(
--enable-int-quality) now. - Cygwin/midipix autoconf fixes (thanks to Redfoxmoon).
- Updated Windows build script, notably renaming .dll.def to .def. Requires an argument now for build type, an optional one for parallel make (not that useful on MinGW).
-
Rework library dependency handling to avoid unnecessary linking for
lib*123. Also add proper
Libs.privateto .pc files to enable static usage (especially on Windows with shlwapi). - Updated support for OS/2 in the form of ArcaOS.
- Removed outdated Pascal port (ports/mpg123_.pas). There are others out there.
- Updated man pages, been a while.
-
mpg123:
-
Fixed-rate playback now prefers the libsyn123 resampler instead of NtoM
in libmpg123, see
--resampleparameter. -
Drop
--STDOUT(never properly implemented, use pipe to out123 instead). -
Make
--streamdumpuseunintr_write()to avoid inconsistencies. - Now sets non-zero exit code when any one track of the playlist fails to either produce at least one frame of playback, if there is data that should produce such (i.e. /dev/zero is bad, /dev/null is fine). See man page for details.
-
Print out MPEG header info for each frame for
mpg123 -vvvv. -
Added
--no-visualto disable cursor/inverse video games explicitly. - Clear progress bar before printing updated metadata within a stream.
- Filter control/non-printable characters from user data printout, reduce ID3v1 data to 7-bit ASCII (no way to know correct 8-bit encoding for sure). This should cover bug 267.
-
Set
MPG123_NO_PEEK_ENDwhen opening special file '-' (standard input). That helps Windows where attempting to seek on the non-seekable stream is undefined behaviour (bug 285). -
Print errors in player code also for
--quietoperation (just no messages from the libraries). - Ignore ID3v1 once a Frankenstein stream was detected.
- Prevent a cosmetic use-after-free in audio playback during program abortion just after starting playback (prebuffer still in use, implication a blip of bad sound and a complaining sanitizer).
- Reformat audio capabilities table, more condensed, fits into 80 columns. Forced rate on a separated line.
-
Make
--pitchactually work, not just interactive changes. Pitching uses a resampler now if a fixed output rate is specified. -
Added
--no-frankenstein. - Frameflags as long variable, 32 bits are needed since some time now.
-
Fixed-rate playback now prefers the libsyn123 resampler instead of NtoM
in libmpg123, see
-
out123:
-
Document
--STDOUT, make it more robust regardingfwrite()interruptions. - Removed the implicit phase shift that made generated waves exactly at Nyquist freq non-silent, but made little sense overall.
- Less high-frequency shifts to make waves fit into the table (not insisting on even number of samples).
- Option to work without wave table (setting the limit to zero).
-
Added
--wave-directionto also enable backward time without phase shift. - Waves now generated by re-usable little synthethizer library dubbed libsyn123.
- Pink noise from libsyn123 added (using code from Phil Burk).
- White noise from libsyn123.
- Geiger-Mueller counter simulation from libsyn123.
- Wave sweep generator from libsyn123.
- Some rearrangement in help text.
-
Changed output of
--test-encodingsto list of encoding names instead of raw bitmask value. -
Added
--endian,--inputend, and--byteswap.
-
Document
-
libsyn123:
- Created the library to host some simple signal generators for testing output.
- It also hosts sample format conversions as a necessity to be able to directly produce the format output devices need.
- Well, also channel mixing while we're at it.
- Oh, and a minimal-latency-and-reasonably-efficient resampler that only took me over a year to figure out. I should write a paper about it.
-
libout123:
-
Added
out123_free()for the benefit of library wrappers. (bug 276) -
Removed change of effective user ID in the WAV/RAW/AU/CDR writer.
This was intended as a safeguard to avoid creating files with root
priviledges. But: Other output modules still allowed root-level
access to various devices and files, so it was never safe to do
something awful like installing mpg123 with suid bit or configure
sudo to allow users to run mpg123 with arbitrary arguments.
You should treat
out123_open()just like the regularopen(): You can write to any file/device depending on your permissions. - Finally maybe fixed the damaged playback when using pulse hidden behind the ALSA API (on Ubuntu, for example) by setting a high value for device start threshold.
-
Fixed
out_play()abortion logic to better detect fatal situations (broken pipe). Needed on FreeBSD, while Linux buffers the issue away. Should resolve bug 283. - Limit size of buffer block being written in out123_play to 16K, avoiding unnecessary failure with ALSA at least.
- Using SDL2 now if found. Output module code unchanged.
- Added hex and txt (plain text) printout.
-
Eliminated spots where error messages would still be printed
also for
OUT123_QUIETbeing effect. - Dummy output accepts any encoding now.
-
Added
-
libmpg123:
-
Added
mpg123_open_fixed()to ease API for applications that just want to decode well-behaved local files. -
The user buffers for audio output data are now declared as
void*formpg123_read(),mpg123_decode(), andmpg123_replace_buffer()to avoid the useless need for casting your niceint16_tbuffer to unsigned char for decodingMPG123_ENC_SIGNED_16data to it. -
Added
mpg123_free()for the benefit of library wrappers. (bug 276) -
Add
mpg123_format2()andmpg123_fmt2()supporting special value 0 for all rates. - Fix changing of decoder (and output format along with that) after stream opening. This was never recommened and only now should work at all.
-
Also
mpg123_decode_frame()now sets return buffer toNULLand returned byte count to zero in case ofMPG123_NEED_MORE(or any other early abort). -
MPG123_NEED_MOREnot returned anymore for non-feeder streams. Got in there for generic partial frame body reads, but was only intended for feeder API. -
Added
mpg123_set_moreinfo()to support the Lame project's frame analyzer, disabled by./configure --disable-moreinfo. - Added optional storage and retrieval of raw ID3 data.
- Fix skipping of ID3v2 footers (too much was attempted to be skipped). This is of not much practical consequence as a tag with footer would appear on the end of files anyway and files with ID3v2 tags at the end seem to be rather rare.
-
Add
mpg123_new_string()andmpg123_delete_string()to avoid confusion about whatmpg123_init_string()andmpg123_free_string()do. -
Make
mpg123_resize_string()terminate the string if shrinking (fill now limited to new size). -
Improve layer III frame parsing/error reporting for bad
part2_3_length. - Fix crashing on stupidly low NtoM rates (exceeding downsampling factor 31). This was only triggered by you specifying a forced sampling rate below 1550 Hz.
- Do not remove CRC bits twice from possibly available bit reservoir. This move needed recomputation of the layer3is reference data for 8 and 24 kHz. Old mpg123 is wrong in the first few frames.
- Generally more tight control and early bail out on reading bits of frame data for all layers. This reduces the count of error messages on badly damaged files a lot and feels a lot safer, too. Note that we already silently returned zero bytes instead of actually over-reading the frame buffer before, but now it happens with diagnostics and more checks before it may happen.
- Optionally enforce output endianess (big/little) away from native.
- Fix build without error messages.
- Fix build without gapless decoding.
- Disable buffer when neither mmap nor shm functions detected (fixes build for Android, thanks to vquicksilver).
- Some support for extremely small streams (below 128 bytes). Those are too short to contain anything useful besides some tiny metadata, but serve to find/reproduce parser bugs.
-
Fix
mpg123_read()for builds without feeder. It callsmpg123_decode()without feeding input, which was disabled by mistake. The use ofmpg123_read()(instead ofmpg123_decode_frame()) withmpg123_open()was broken in feederless builds since those were fixed in version 1.15. - Fix ID3v2 parser logic for multiple ID3v2 tags being encountered in one stream. New tags replace old data instead of appending to it when the extended header update flag is not set (ID3v2.4). Update tags only replace data that shall be unique. So far, I have never seen an update tag in the wild, so the check for the flag is untested. The mechanism of replacing parts of existing tag data has been tested, though. Note that the updated libmpg123 also avoids a growing ID3 data structure when repeatedly seeking back to the beginning in a file with disabled seek index.
-
Eliminated a spots where error messages would still be printed
also for
MPG123_QUIETbeing effect. -
Added
MPG123_NO_FRANKENSTEIN,MPG123_FLOAT_FALLBACKflags. -
Now actually try floating point encoding if format matrix allows it
(can be disabled by unsetting
MPG123_FLOAT_FALLBACK). -
Added
mpg123_feature2()also added feature queries for floating point output.
-
Added
Head over to the download section for getting your hands on the release.
This is a bugfix release solely for bug 280 in the parser:
- libmpg123
- Reset the flag for having a frame to decode before trying to parse a new one. This prevents very unkind behaviour (crashes) when combinging mpg123_scan() with decoding later on for damaged streams that have a mixture of different MPEG versions.
The next proper release 1.26.0 with lots of improvements and less serious fixes people are waiting for is still in the works. I really want to get it out this year!
Head over to the download section for getting your hands on the release.
More credit to OSS-Fuzz. The ID3v2 parser code is not yet as hardened as the actual MPEG decoder. The paranoid can disable it at build-time. If you do not need it, this is a good idea, anyway: Code that is not there, cannot be exploited. Speaking about exploits: The recent crop of bugs trigger a denial of service (crash) worst-case, some invalid ID3 data normally. Code injection maybe not totally ruled out (that one write of a zero byte?), but does not seem easy. Update to be sure that you are only suceptible to as of yet hidden bugs.
- libmpg123:
- Fix an out-of-bounds read of maximal two bytes for truncated RVA2 frames (oss-fuzz-bug 15975). The earlier fix around the same location needed one thought more. Actually, another though was needed, oss-fuzz-bug 16009 documents the incomplete fix.
- Fix an invalid write of one zero byte for empty ID3v2 frames that demand de-unsyncing (oss-fuzz-bug 16050).
- Correct preprocessor syntax in mangle.h, no #error in a #define line. (bug 273, thanks to nmlgc).
- Fix dynamic build with gcc -fsanitize=address (check for all dl functions before deciding that separate -ldl is not needed).
Head over to the download section for getting your hands on the release.
So, here is a number of bugs found by OSS-Fuzz. Credit to OSS-Fuzz for the bunch, then.
- libmpg123:
- Fix out-of-bounds reads in ID3 parser for unsynced frames. (oss-fuzz-bug 15852)
- Fix out-of-bounds read for RVA2 frames with non-delimited identifier. (oss-fuzz-bug 15852)
- Fix implementation-defined parsing of RVA2 values. (oss-fuzz-bug 15862)
- Fix undefined parsing of APE header for skipping. Also prevent endless loop on premature end of supposed APE header. (oss-fuzz-bug 15864)
- Fix some syntax to make pedantic compiler happy.
The serious bugs trigger Denial of Service either via the nasty endless loop in supposed APE tags or by crashes if the invalid reads hit a diagnostic by the OS or, more likely, a security mechanism like the sanitizer instrumentation that enabled finding the bugs.
I do not have CVE numbers for these bugs. I rather fix the bugs than name them. Just update, will you?
Head over to the download section for getting your hands on the release.
There briefly was a 1.25.9 release which was superseeded by 1.25.10 before a public announcement. Both amount to these fixes:
- libout123: Fix error messages beginning from OUT123_ARG_ERROR (bug 261).
- mpg123: Fix --icy-interval handling to work with stream from stdin. (curl | mpg123 --icy-interval=n -)
- libmpg123: Fix another invalid read and segfault on damaged (fuzzed) files with part2_3_length == 0 (set maxband=1, pulled from upcoming 1.26.0).
Head over to the download section for getting your hands on the release.
Some fixes for the end of the year, while new API additions
- mpg123: Also disable cursor/video games for empty TERM (not just unset and dumb).
- libmpg123:
- Accept changing mode extension bits when looking for next header for detecting free-format streams (bug 257).
- Fix compute_bpf() for free-format streams (needed to estimate track length and working fuzzy seeking in absence of an Info tag).
Head over to the download section for getting your hands on the release.
- mpg123:
- Do not play with cursor and inverse video for progress bar when TERM=dumb.
- Fix parsing of host port for numerical IPv6 addresses (just did not work before, only for textual host names).
- libmpg123:
- Proper fix for the xrpnt overflow problems by correctly initialising certain tables for MPEG 2.x layer III. The checks that catch the resulting overflow are still in place, but likely superfluous now. Note that this means certain valid files would have been misdecoded before, if anyone actually produced them. Thanks to Robert Hegemann for the fix!
- Silently handle granules with
part2_3_length == 0, butscalefac_compress != 0(ignore the latter).
Head over to the download section for getting your hands on the release.
- Hotfix for bug 255: Overflow reading frame data bits in layer II decoding. Now, all-zero data is returned if the frame data is exhausted. This might have a slight impact on performance, but not easily measurable so far.
Head over to the download section for getting your hands on the release.
There was a longer-lasting buffer read overflow in the ID3 parser because code added in 2008 did not take care of possible integer overflow in an addition on platforms where long is 32 bits wide. This has been reported as bug 254. Upgrade on 32 bit platforms highly recommened, of course. We are still not talking about something nasty like code injection, but possible denial of service, although it was only recently discovered by the AddressSanitizer.
Head over to the download section for getting your hands on the release.
Some fuzzing using a fuzzer based on one Matthias Wenzel sent me 10 years ago revealed two issues that are not serious in effect but needed fixing nevertheless. After fixing those, I got the fuzzer running over 272000 cycles so far, mangling about 6.7M of input data each time, without further find. These are the changes in this release:
- Better configure checks for i?86-apple-darwin (bug 253).
- libmpg123:
- Prevent harmless call to
memcpy(NULL, NULL, 0). - More early checking of ID3v2 encoding values to avoid bogus text being stored.
- Prevent harmless call to
Update: Someone reported an invalid read fixed by the ID3v2 changes as CVE-2017-9545. I do not recall being told myself, but whatever. Just use the updated version, OK? For a patch to back-port look at the difference of id3.c between 1.25.3 and 1.25.4.
Head over to the download section for getting your hands on the release.
Another quick bugfix-improvement release for you:
- libmpg123:
- Better checks for xrpnt overflow in III_dequantize_sample() before each use, avoiding false positives and catching cases that were rendered harmless by alignment-enlarged buffers.
Head over to the download section for getting your hands on the release.
Here is another bugfix release for you:
- libmpg123:
- Extend pow tables for layer III to properly handle files with i-stereo and 5-bit scalefactors. Never observed them for real, just as fuzzed input to trigger the read overflow. Note: This one goes on record as CVE-2017-11126, calling remote denial of service. While the accesses are out of bounds for the pow tables, they still are safely within libmpg123's memory (other static tables). Just wrong values are used for computation, no actual crash unless you use something like GCC's AddressSanitizer, nor any information disclosure.
- Avoid left-shifts of negative integers in layer I decoding.
Head over to the download section for getting your hands on the release.
Some bug fixes in libmpg123, triggered by me asking for it (fuzzers swaying their aim from LAME towards mpg123):
- Avoid
memset(NULL, 0, 0)to calm down the paranoid. - Fix bug 252, invalid read of size 1 in ID3v2 parser due to forgotten offset from the frame flag bytes (unnoticed in practice for a long time). Fuzzers are in the house again. This one got CVE-2017-10683.
- Avoid a mostly harmless conditional jump depending on uninitialised
fr->layincompute_bpf()(mpg123_position()) when track is not ready yet. - Fix undefined shifts on signed long mask in layer3.c (worked in practice, never right in theory). Code might be a bit faster now, even. Thanks to Agostino Sarubbo for reporting.
Head over to the download section for getting your hands on the release.
Some enhancements accumulated. Even after a decade, people notice bugs for the first time. The usual. Among misguided news coverage of the demise of the MP3 patents (MP3 is dead because we don't have to pay for the license anymore?!) it seems only appropriate to continue showing the world that mpg123 is very much alive. Not so much kicking, but humming along nicely. This is what you get today:
- Silence test for artsc-config if it is not there.
- Make sure -static-libgcc from LDFLAGS gets through libtool, fixing 32 bit Windows builds (depend on libgcc DLL otherwise).
- Fix build with non-GNU make by using plain rm -f instead of silly $(RM) in libout123/modules makefile fragment.
- Make build work on iOS, including coreaudio backend.
- libmpg123:
- Finally provide position-independent code for x86 with assembly optimisations. The textrels are gone thanks to Won Kyu Park and Taihei Momma.
- Clarify some license language in files descending from the original MMX optimisation.
- Fix return value overflow check for MPG123_BUFFERFILL.
- Introduced mpg123_getformat2() to enable the FORMAT command for the generic control not stealing MPG123_NEW_FORMAT from the main playback loop. The sequence LOADPAUSED-FORMAT-PAUSE (play) is supposed to work now.
- Enable aarch64 optimisations on *BSD by default, too. You can always override that stupid OS whitelist using --with-optimization, anyway.
- Use of the i486 decoder is now discouraged more prominently, in configure output.
- out123: Fix stupid crash with verbose mode and tone generation (print the string if the pointer is non-null, not if it is null).
- libout123: More consistent error messages for dynamic and legacy (built-in) modules. Namely, you get a hint how if you choose a different module than the built-in ones for a static libout123.
Head over to the download section for getting your hands on the release.
This release is a mix of accumulated fixes and enhancements. Have a read of the list of changes:
- Avoid repeating genre in metadata printout for specifications like (144)Thrash Metal.
- In remote control mode, only enforce --quiet if no verbosity was required.
- Prevent --loop and --shuffle or --random from messing with the remote control LOADLIST command (printout of the list would loop without reason).
- Fix the mpg123 command (esp. our provided binaries on Windows) to now find modules again relative to the executable directory, not the current working directory. This was a regression in 1.23 and might be security-relevant if you called mpg123 in working directories with untrusted content. Note that mpg123 1.23 looked for modules relative to the current working directory only if the installation prefix for modules did not exist. So, usage on an intact installation (with /usr/lib/mpg123 or the like) was safe. Nevertheless this new version fixes the search to be relative to the binary path as it was with 1.22 and before.
- At least consistent behaviour of playlist code in the face of looping. Looping is about individual tracks, always. They are looped also in random mode. Jumping (prev/next keys) is between tracks and resets the loop counter. The display of currently playing track in the playlist is fixed for random and looped play now (bug 198).
- Looping is now mentioned for a to-be-repeated track with --verbose.
- Move some compiler nagging from --enable-debug to --enable-nagging, fix up some new build failures by adding some pesky feature test macros.
- Try not to pollute the terminal buffer with old progress bars in inverse video. Only the currently live one shall be seen. That one is pretty. The others are not.
- Using plain dlopen()/LoadLibrary() for opening modules instead of libltdl. This also means that --with-module-suffix is gone in configure.
- Windows builds only work when Unicode support is there (older than Windows 2000/XP will definitely not work anymore).
- The out123 tool now features tone generation, with a mix of differing wave patterns. Makes sense to be able to test the audio output by itself, and it's fun. See --wave-freq and related parameters.
-
libmpg123 version 43:
- Add flags MPG123_NO_PEEK_END and MPG123_FORCE_SEEKABLE, as suggested by Bent Bisballe Nyeng.
- Build fix for MSVC (consistent definition of ssize_t, spotted by manx, bug 243).
- Build fix for --with-cpu=ppc_nofpu (thanks to Michael Kostylev, bug 244).
- Add asm optimized MSVC++ Win32|x64 and UWP|x64 builds
- Remove old, broken MSVC++ builds
-
libout123 version 2:
- Added OUT123_BINDIR.
- New search order for output plugin directory: MPG123_MODDIR, or (relative to executable directory OUT123_BINDIR) ../lib/mpg123, plugins libout123/modules/.libs, libout123/modules, ../libout123/modules/.libs, ../libout123/modules, and at last the installation prefix $libdir/mpg213/. This shall ensure that a build inside a source tree does not try to use old modules from the system prefix. The normal libtool wrapper deals with the shared libout123 or libmpg123 only, not modules. Note that if you set MPG123_MODDIR to a non-existing directory, no modules will be found (earlier versions fell back to other choices).
- The OUT123_NAME parameter is now copied by out123_param_from(), as is the newly added OUT123_BINDIR.
- Coreaudio: Use AudioComponents API on OSX >= 10.6 (thanks to Michael Weiser).
- Coreaudio: Fix behaviour of out123_drop(), not killing the output anymore without re-opening the device (bug 236, thanks to Taihei for the fix).
Note: There was an error in the build machinery in the first upload of the tarball. (uninstalling of modules was broken). I really hate to do that, but I am uploading a fixed version under the same name, since nobody downloaded the file from sf.net yet … it was just hours ago.
Update 2017-03-12: We uploaded new win32 binaries that now should not
depend on the libgcc DLL, like the win64 ones. There is a hack in the configure script
to achieve that (force -static-libgcc into CC), scheduled to
appear in the next normal release.
Head over to the download section for getting your hands on the release.
This release does one thing: Fix bug 240, an out-of-bounds memory read in the ID3v2 parser for tags that claim an unrealistically small length. This crashes mpg123 or any application using libmpg123 with activated ID3v2 parsing.
Every mpg123 release with ID3v2 support is affected, so from version 0.60 on, if you do not have the option to simply upgrade, this one-liner applies a hotfix:
perl -pi -e 's:(while\()(tagpos < length-10\)):${1}length >= 10 && $2:' $(find src -name id3.c)
Be sure to at least add that change to your distro patches … Thanks to Han Lee & Jerold Hoong for the detailed report of the issue.
Update: This is now listed as CVE-2016-1000247.
Head over to the download section for getting your hands on the release.
A fresh release before adding features … with these fixes:
- Fix the bad RPM spec file (broken since out123 addition, thanks to Srikanth Rao for noticing).
- More out123_pause() in generic control mode, working around bug 236. The coreaudio output needs to be more robust, though.
- Do not undef MPG123_EXPORT in the headers, rather be prepared for it being defined already. This fixes MSVC builds, broken since 1.23.0 (bug 239).
Head over to the download section for getting your hands on the release.
With bug 234, another regression came to light, this time in the remote control mode.
- call out123_pause() instead of out123_stop() in remote control STOP command, fixing the regression in 1.23.x of not being able to resume playback with another LOAD unless the new track has differing audio format (bug 234)
Head over to the download section for getting your hands on the release.
Yet another (regression) fix release of mpg123. Also, there is a small behaviour fix for libout123 error reporting where the initial release was just wrong. I tax it as low-risk, only applying to hopeless situations anyway, so the change squeezes into a bugfix release.
The changes:
- libout123:
- fix build of portaudio and SDL on win32 (too many parentheses, thanks to Sandro Cumerlato for pointing it out)
- make out123_errcode() return OUT123_BAD_HANDLE as documented (adding that value to the error enum, was documented but missing), again thanks to Sandro
- fix windows-builds.sh (shell quoting in copying stage) and add some bits to shipped header to make it directly usable in MSVC (define ssize_t, bug 232)
- no overwriting of LIBS in Makefile (build system regression in 1.23, thanks to Peter Korsgaard for reporting that one)
- no printing of message in response to SIGPIPE, as that could trigger a hang if stderr itself is the piped culprit (regression from 1.22, bug 233)
Head over to the download section for getting your hands on the release.
There is quite a list of things that needed fixes in the 1.23 series. Focus is on improvement of the live output performance and actually fixing some regression in that area. I consider these fixes rather important. If you use mpg123 1.23.x, you really should upgrade to 1.23.4 . But there also are improvements over 1.22.x, especially sfifo-based output performance. In the end, there is a bunch of build fixes to make your life easier.
Here is the list:
- mpg123: Fix logic of prebuffering small bits for glitch-free start of playback. The logic as introduced in 1.23.0 actually introduced stuttering! The fix for this is really minimal and I urge everyone to at least include that one. It is the changeset of rev. 4041.
- libout123:
- Actually make OUT123_KEEP_PLAYING on by default, as documented.
- Fix buffer logic with regard to draining, use common device writing code to handle resuming from pause. This fixes sdl output with buffer, possibly other sfifo-based outputs like CoreAudio (those were poorly tested with buffer, as the combination is indeed unusual, see bug 230).
- Buffer pauses devices for prebuffering, to avoid underruns.
- More reliable playback with SDL, Portaudio and CoreAudio outputs. This includes FIFO draining on close to avoid dropping of the end. It should fix parts of bug 230.
- Fixed memory leaks with some outputs where a call to the deinit() function is necessary during available/working module checking.
- mpg123, out123: Use the default output flags to get OUT123_KEEP_PLAYING. Without this, there is a good chance to abort on SIGSTOP/CONT while playing. This is a regression from 1.22 .
- Build fixes (bugs 227 and 228) and some build system hackery. Gone are libc feature test macros in compat.h . This means always using our own strdup() implementation. Simpler than being bugged by feature test macros in strict compiler mode (when _DEFAULT_SOURCE is not defined).
- ./configure --enable-nagging does something also without --enable-debug, explictly triggers -std=c89, too (hence the above).
- Some fixup to make things work in pedantic C89 mode again. It really might be time to swich on some serious C99 for the next release, since there's a followup standard to _that_ which we can ignore now.
- Update list of renamed internal symbols to reduce conflicts during static linking of libmpg123 or libout123.
- Internal compatibility functions now handled via libtool convenience archives, avoiding the hackish code copies.
Head over to the download section for getting your hands on the release.
This release fixes a bit of manpage formatting (thanks to ESR), actually looks for sys/select.h in configure to help build under Cygwin (at least), and always enables the fast IEEE 754 rounding unless you disable it explicitly. You might consider
./configure --disable-ieeefloatif you are building mpg123 or a VAX or something …
Head over to the download section for getting your hands on the release.
Simplification of metadata printout in 1.23.0 oversimplified things so that the difference between bytes and Unicode code points got forgotten again. This results in skewed compact (two-column) tag data printout. Today's release fixes that again to work like it did before. Please note that mpg123 does not know about grapheme clusters or funny widths of characters different from 1. This is a nightmare and would need linking to the ICU library, I presume.
Head over to the download section for getting your hands on the release.
Today's bugfix release gives BSDs with sndio (and probably others) a helping hand in not attempting to close output devices twice in the backend. Also, the JACK output got cleanup to properly work with more than two desired output ports. If you specify ports, all of them are linked to some out123 channel, and all channels are linked to some port. This includes up- and downmix situations. For example, you can make a mono track appear on a chosen number of JACK ports to send to several monitoring buses in your multitrack setup.
The JACK output got a fix for an incorrect memory allocation that, in case of a specified ports list, resulted in an invalid write of a NULL value beyond the allocated block. Also, a memory leak for the real client name on format query and module check got fixed. Upgrade highly recommened. While the invalid write only triggered if the user supplied a port list on the command line and also did not affect operation in practise on my system, it is still a nasty thing to have.
Head over to the download section for getting your hands on the release.
The inevitable bugfix release 1.23.1 is in sight, with fixes in libout123 that prevent closing an output device twice. This is something that many backends are tolerant of, but not the sndio one. The current snapshot should fix crashes on OpenBSD when stopping playback.
After more than 20 years of existence, the mpg123 project reaches it's namesake version number a second time, after we forgot to properly celebrate version 1.2.3 (meaning: introducing some artificial bugs to fix, reaching 1.2.3 before 1.3.0 so that there had been a version 1.2.3 — what a miss!). All glory to mpg123 version 1.23.0! Those 20 years also have another point: The haunting software patents on MP3 encoding and decoding are gone, at least in Europe, according to the Wikipedia article (too busy to do a deep investigation myself, and IANAL anyway). Seems like only you poor lot in the US of A have to wait until end of 2017. But even then: technology from the 1980s, patents from the early/mid (submarine) 1990s, unencumbered use of MP3 player software originating from the mid 1990s finally possible in the late 2010s. Quite a spread.
But to the point: This is a massive release, after about a year of collecting improvements and bug fixes. I took some liberty in changing behaviour regarding console printouts. But the main point is the arrival of libout123, which prevents me from re-inventing audio output code for various platforms for my projects. Yes, I got selfish motivation for working on Open Source code, and that's a good thing. Anyhow, checkout the stuff at the download section or stay around and keep reading the considerable list of changes:
- libmpg123 version 42
- This adds mpg123_framelength() and makes mpg123_position() truly obsolete.
- Equalizer optional now (
./configure --disable-equalizer) to save precious memory - Clip decode tables for large amplification with fixed-point decoders. Without that, high-pitched distortion enters really quickly when trying to increase volume even if output samples would not be clipped, weren't it for fixed-point math.
- libout123 version 1: First incarnation of libout123, a basic library to
get audio data written to audio devices (or files) in simple blocking
manner as opposed to callback APIs (which it wraps over). This collects
the output modules of mpg123 and makes them available to the wider
masses. Also, the separate shared memory buffer process (contained
in libout123) got a lot of reworking which should be noticable in the
interaction with terminal control.
- Some tuning of several output drivers (modules) regarding flexible buffer size, client names, supported formats.
- Notably the JACK output got a major overhaul and now does not swallow audio at the end anymore. Huge latency also reduced and tunable. Encoding fixed to floating point, so that libmpg123 actually chooses what is sensible.
- Added
mpg123 --no-infoframe. - Detect terminal on input side and enable control keys automatically.
There is
--no-controlnow to disable terminal control anyway. - Display stuff:
- Avoid spillover of status line that caused unwanted terminal scrolling. If the terminal width is smaller than the full status string, a cut is made to make it fit.
- Draw a progress bar on the terminal by inversing colors behind status line.
- Rework the format of the status line to be more compact and consistent.
- Rework smart tag printout for adapting to terminal width.
- Warning messages also start with a line break now to better fit in with verbose playback.
- Doubly-verbose mode now needed for long MPEG header print out. It is a higher level of verbosity than printing the current position. The compact header is a better fit.
- Compact header printout also compacted, example:
MPEG 1.0 L III cbr128 44100 j-s - Reporting of clipped samples also includes a line break now.
- Keep ID3v2 data around for terminal control to be able to print on demand. That was broken for some time.
--preload now is 0.2 instead of 1 (fill whole buffer before
playback). The maximum is 0.5 . This is mandated by corrected buffer
interaction in libout123.
--disable-largefile --with-audio=aix, real test welcome).
--au, --cdr) to kill off parsing
of following ones. Nobody complained in all these years. Astounding.
--name to mpg123 and out123 for providing client name p.ex. for JACK.
There is no default of appending the PID to "mpg123" as client name anymore,
just plain "mpg123" or "out123".
out123 --channels ,
--list-encodings, --test-format,
--test-encodings, --query-format.
./configure --enable-nagging does not include
--enable-debug anymore,
you specify that separately.
Oh, and a little technical detail I forgot in the official NEWS: The build system got reworked. No recursive Makefiles anymore!
Head over to the download section for getting your hands on the release.
Download the mpg123-1.23 RC1 tarball (signature) now and give it a spin on your platform to avoid me making a fool of myself by releasing something obviously broken. There is so much work that went into that release, but not so much testing on platforms that the developer(s) do not use. So, please pull out your exotic rigs (that includes OS X and Windows kit, from my personal perspective;-) and check if mpg123 builds without issues and the audio output still works.
I intend to make that release rather soon, so I'm thankful for quick notes about success (in the history neutral sense of outcome) to the mailing list or directly to me. You can also drop by in IRC, #mpg123 on freenode, and drop a line there. I may not respond, but I will pick it up eventually.
The next mpg123 release will be a big one, packing lots of changes. The most prominent ones:
- Welcome libout123! The output part of the mpg123 program finally got turned into a re-usable library focused on simply getting that audio data out, with an API resembling writing to files with some fancy properties.
- Along with the above, the internals regarding the buffering process and interaction with it got reworked a lot. Of course I mean improvements, but that also always can mean new bugs that testing should find before relase.
- The terminal control got improved a bit, not only in relation with the buffer. It is also active by default now if there is a terminal detected.
- The status line printed in verbose mode now does not spill over your terminal boundary (causing annoying scrolling, rather quickly since the line also got overly long with the buffer display). It received a full overhaul, too, packing more information more compactly and consistenly in there. Feedback to these changes is particulary welcome, as that marks a rather prominent departure from earlier times. As a special gimmick, the line is now used as a visual progress bar, too, by reversing video in part of it.
- non-recursive build system; You always invoke make from the toplevel directory and give paths relative to that as targets. This improves build reliability as we have proper dependencies in one tree.
The need for testing is obvious, especially for those changes relating to interactive use. I also did not look much at the generic control interface. People with wrappers using that, please pipe up!
A more complete list of changes (NEWS file):
- libmpg123 version 42
- This adds mpg123_framelength() and makes mpg123_position() truly obsolete.
- Equalizer optional now (--disable-equalizer) to save precious memory
- First incarnation of libout123, a basic library to get audio data written to audio devices (or files). This collects the output modules of mpg123 and makes them available to the wider masses. Also, the buffer logic (contained in libout123) got a lot of reworking which might be noticable in the interaction with terminal control.
- Added mpg123 --no-infoframe.
- Detect terminal on input side and enable control keys automatically. There is --no-control now to disable terminal control anyway.
- Avoid spillover of status line that caused unwanted terminal scrolling. If the terminal width is smaller than the full status string, a cut is made to make it fit.
- Draw a progress bar on the terminal by inversing colors behind status line.
- Rework the format of the status line to be more compact and consistent.
- Clip decode tables for large amplification with fixed-point decoders. Without that, high-pitched distortion enters really quickly when trying to increase volume even if output samples would not be clipped, weren't it for fixed-point math.
- Warning messages also start with a line break now to better fit in with verbose playback.
- Reporting of clipped samples also includes a line break now.
- Default for --preload now is 0.2 instead of 1 (fill whole buffer before playback). The maximum is 0.5 . This is mandated by corrected buffer interaction in libout123.
- Improved interaction with buffer process in terminal control mode. Seeking is more transparent now, taking dropped samples from buffer into account to avoid unintended jumps. Direct seeks with number row do not pause playback anymore.
- Silently skip APE tags (thanks to Hans de Goede).
- Some reduction in bitrot on AIX (typos in output module, build with --disable-largefile --with-audio=aix, real test welcome).
- Added '[' and ']' keys to skip to previous/next directory in playlist.
- Added support for Haiku to configure script (thanks to Jerome Duval).
- Remove spurious Frankenstein warning when scanning files that have no gapless info (the reported value of -1152 gapless sample length should be a giveaway anyway).
- Fix a bug in the command line parser that was present from the beginning, apparently, causing certain parameters (--au, --cdr) to kill off parsing of following ones. Nobody complained in all these years. Astounding.
Hacking on libout123, the second coming of mpg123's output handling code in form of a re-usable library, I am repeatedly annoyed by some clash of terms. Mind, English is not my native tongue, but I reckon that may also be the case for folks who are responsible for the terminology around audio devices.
My point is this: drain and flush are rather close in meaning in the real world. As verbs, both may relate to an outflow of liquid from something. They can both mean to get rid of said liquid, it ending up in the … well … in the drain (not the well, where it may come from). Their meaning can be rather directly opposed, too. In agriculture, to flush an area is to flood it with water. To drain it is to remove the water, possibly attemping to turn swamp into farmland.
Once you start visualizing audio data (which stems from a transcription of air pressure variations) or any kind of flowing data as a stream (of liquid, which still would technically include air), you got all that rich sanitation language ready at your disposal. So, we got streaming, pipes, sinks, draining, flushing. Interestingly, I never heard the term spring or well being used, just the boring source. But that may be a glimpse of sanity as source is rather well-defined in any context, unlike, well, well.
Regarding the dreaded drain vs. flush (which also is an adjective with a rather weakly related meaning, in addition to a noun and a verb), there is a very important difference when applied to audio APIs:
- drain: Push all pending audio data to the device, make it heard.
- flush: Get rid of the data, silently and quickly.
Well, that's why I see drop and drain in the ALSA API instead of flush and drain. Someone figured that out long ago. But in the mpg123 source, I get confused by someone (maybe even myself) before me having thought of flushing things. In the code, the word ended up being used in both the meaning of drop and of drain. A mess, of course. But even when correcting that, there is no escape: You can write audio data to disk, where it ends up in a normal file. Using the stdio API, that means that to drain the audio to your imagined speakers (the storage device), you have to call fflush(). Flush to drain, here it is again!
One explanation for this confusion of sanitation-related words might be that programmers are not the most savvy people around bathrooms. They often talk of plumbing, but mostly between software layers. Software, not wetware.
Another simple explanation is that the English language (including bastardized variants around the globe, deal with being part of a minoriry, dear British gentlepeople) sucks for handling streams of data or liquids, wich is a bit harder than only sucking air. There are words with way too many meanings (yes, like using way this way) that can lead to too many contradictions depending on context. This ambiguity might be nice for easily getting some methaphors churned out, but there is this tendency that in an explosion of meaning a hungry thesaurus rex may appear and violently demolish your nicely designed thought construct.
What I actually wanted to get across: There is a word that should have been chosen for the audio-related use of flush as opposed to drain. While both flush and drain suggest that things end up in the sink (which leads down the drain), there is a word that makes it clear that things do not end up where they normally would. And also, it conveys a swiftness of action while emptying the erstwhile container.
I hereby propose to use the term spill.
It's nicely defined for quickly getting your liquid to a place where it usually is not retrievable from, and definitely not where you originally intended it to be. It is likely that I'll go with out123_drop() anyway, for familiarity for folks knowing other APIs, but it is tempting to use out123_spill() instead to stay in the picture of managing streams/buckets of liquids. I am not sure what a nice plumbing-related name would be for out123_play(), out123_pour() perhaps? That's got some french ring to it, but of course in meaning far removed from the french pour.
Perhaps it is already a mistake trying to write down programs with clear meaning using words from any language used and abused by humans for centuries.
With mpg123 version 1.14.1, free format support got broken by a bugfix. Classic regression. This release fixes that and a regression test has been added to the repository.
This regression bugs me so much that I prepared a little script to fix it for any affected version you may have on your system with some reason preventing you from simply upgrading. So, here it is: mpg123-fix-freeformat-1.14.1-to-1.22.3.sh. I hope operating system distribution maintainers will pick this up to avoid having folks locked in suboptimal mpg123 functionality for whole distribution release cycles.
This is a stop-gap release including the fix for bug 216, avoiding spurious surrogate detection with UTF-16 in ID3v2 data.
There are some interesting changes in trunk awaiting release with the next feature version, which shall include libout123 and general build system fixup (non-recursive make).
This release adds a bugfix for the combination of buffered playback with 24 bit sample format. This simply did not work before, because the buffer process was not aware of the non-trivial PCM frame size (no divisor of 32768).
This is a heartily recommened update for anyone. The bugs are not of the execute-funny-code type, but still ugly.
- Fix mpg123-id3dump when writing images with funny (manipulated) MIME type. Stupid mistake in length computation of the fallback file extension caused junk from memory being appended to the filename if the pointer size is less than 64 bit. For 64 bit pointers (or longer) it was correct by accident.
- Fix pedantic build by cleaning up out123 source, also now really showing the encoding list in --longhelp instead of possibly, again, writing junk from memory in there.
- Not linking libmpg123 against libltdl anymore (bug 215).
- Update MSVC++ ports a bit to make them work again.
Also, distro maintainers ... please include the diff from 1.22.0 if it applies (you employ a version providing mpg123-id3dump and out123).
And here it is, mpg123 version 1.22.0 with these changes:
- Build fix: Avoid name clash on OSX SDK with "normal" being defined in an enum already.
- More resilience against folks who do not check errors and rather pass NULL pointers around (see NEWS.libmpg123).
- Fix WAV writing to stdout on Windows (bug 214).
- Rework Xing/Info/Lame tag parsing, also detecting short ones without the TOC now. In addition, the warning about file size being off is a _lot_ more accurate now.
Note that the new release is signed with my new PGP key with the fingerprint D021 FF8E CF4B E097 19D6 1A27 231C 4CBC 60D5 CAFE.
I revoked my PGP key recently, as it was getting long in the tooth and short in the cryptography.
If you fetched the key with the fingerprint
7236 3885 A742 B736 E0C8 9721 9B4C 52BC D446 D524
recently, you will get a warning when verifying signatures of mpg123 releases up to 1.21.0 .
I messed up the process, so the new key is not signed with the old one. You'll just have
to establish the trust somehow when the upcoming releases are signed with my new key
with the fingerprint
D021 FF8E CF4B E097 19D6 1A27 231C 4CBC 60D5 CAFE
.
The newest releas makes the feed reader more efficient when skipping junk by early discarding of data from buffers to avoid re-parsing. The previous behaviour interacted badly with certain input (see gentoo bug 465744).
Get the fresh mpg123 1.20.0:
- Added NEON optimized decoder for AArch64 (ARM 64bit environment)
- enabled for --with-cpu=neon64 (NEON only) or --with-cpu=aarch64 (runtime switch between neon and generic_fpu, like arm_fpu) configuration
- compatible with aarch64-linux-gnu toolchains (from Ubuntu, debian) and Xcode 5
- Added new binary out123 only with the audio output part of mpg123. This is a precursor to separating out said code into a simple audio output library. It also allows plugging in some processing in a pipe before feeding to output.
- Prevent opendir(NULL) for unknown module directory when listing modules.
- some build fixes, among those fixing mpg123-id3dump on Windows
This fresh release improves the situation on ARM cpus a lot. We got various changes that make the life easier, especially so for folks employing GNU/Linux on ARM. Of course, some other small fixes crept in, too.
- Support float and 32/24 bit integer output also with fixed-point decoders (conversion from 16 bit precision).
- A-Law output encoding is actually implemented now (Michael introduced the encoding back in the old days without ever implementing the conversion table, apparently).
- Added --with-cpu=arm_fpu as decoder choice for runtime switch between plain fpu code and NEON.
- Fix ARM builds to work properly on debian systems without special CFLAGS (NEON decoder, specifically).
- Make scripts/benchmark-cpu.pl check the return value instead of delivering crazy timings for crashed mpg123.
- Trigger track initialization in mpg123_info() to avoid use of uninitialized variables (watch out for MPG123_NEED_MORE return value!).
- Fix integer code to 32 bit numbers where it would waste 64 bit on modern systems.
- Add non-executable stack marking also to ARM assembly.
Get your fix from the download area.
There is a number of little issues to resolve. Thanks to our relentless bug reporters, here is mpg123 1.18.1! The most embarrassing one is the Frankenstein (concatenated) stream detection, which triggered all-to-easily on appended meta data. The list:
- Do not close buffer twice with mpg123 -R (delete outdated code in control_generic()), fixing bug 207.
- Do not mess around with first command line argument to extract program name, use a copy instead, fixing bug 205.
- Prevent premature exit on timing of failure to open a track in the playlist and the user wanting to skip over it (bug 206).
- Fixup of HTTP socket mess, also avoiding unnecessary FILE objects (bug 204, patch by Rajeev V. Pillai).
- Fix playlist behaviour on slow HTTP streams, jumping back ('d' key) from first track stays at first track (thanks to Rajeev again, sub-bug of bug 206).
- Fix Frankenstein check not to stumble over ID3v1 tags. My apologies. As a bonus, the position of the concerned code in the parser is now far more logical.
Apart from the Frankenstein one (related to the recent parser fixes), those are not freshly introduced regressions but issues that managed to hide for a respectable time. Get your fix from the download area.
This is an important release fixing some nasty regressions introduced in the 1.14 series. Among those is indeed a buffer overflow with strange files (although not easily exploitable apart from denial of service since it is decoded audio data that is written). Other changes make the HTTP proxy requests send correct host headers, which matters for some proxy servers.
- libmpg123 version 39
- Big version increase for clear distinction regarding the 1.14.x regression fixes in libmpg123.
- Regression fix: Ensure decoder reinitialization on combination of seek and resync (buffer overflow bug 201, introduced in 1.14.1).
- Regression fix: Make parsing really end on reaching of junk limit (introduced in 1.14.4).
- Add check for bad bit allocation value in layer I decoder (removes audible glitch in bug 201 test file).
- Avoid wrong error message about Frankenstein streams when gapless decoding disabled.
- Be verbose about big header changes (Frankenstein streams). Note that changes in samples per frame will confuse the seeking code, but decoding can get through.
- Actually use the full routine to close tracks. Avoids socket leak when playing multiple HTTP streams from a playlist (bug 203).
- Send correct host header when connecting through HTTP proxy (bug 202, figured out by Rajeev V. Pillai).
- The console application now informs about changed major stream properties (prints out another header line).
Get it from the download area right now. And distributions: Please consider upgrading from any version since 1.14.0 to 1.18.0 as a security fix.
And here it is, the next release with some additions, as a treat before the year ends. Changes:
.- mpg123-id3dump --no-scan; for speedup
- hide -C parameter from mpg123 --help when it is not supported
- added tinyalsa Output (by Jarno Lehtinen)
- build system tweaking
- some care for fixing Cygwin builds
Get it from the download area.
- mpg123-id3dump --no-scan; for speedup
- hide -C parameter from mpg123 --help when it is not supported
- added tinyalsa Output (by Jarno Lehtinen)
We're back! With significant performance enhancements all across the board, mpg123 is up there on the peak of MPEG audio decoding efficiency again! Though, we have to admit, this is a race with outcome depending on your setup. The contender ffmp3float as used from MPlayer (for some reason, usage from ffmpeg command-line tool is slower), can be faster or slower, generally not far from mpg123. On my old Core2Duo P8800, ffmp3float wins, on more modern Core i7 machines, mpg123 wins. On an vintage Athlon 64, ffmp3float wins. On K10 (Athlon II), mpg123 wins. On older machines (K7, K6), we need some repeated tests, but it looked good already with old mpg123.
So, here is the full goodness, if you still want to read up on this before getting the current sources from the download section.
- Taihei strikes again:
- New Huffman decoding scheme (configurable, on by default) brings nice boost to mpg123 to make it the fastest decoder on modern CPUs again.
- new AVX decoder
- assembly-optimized DCT36 for SSE and AVX
- added configs for vintage 3DNow(ext) CPUs (AMD K6) utilizing assembly DCT36
- added configs for vintage SSE CPUs (Pentium M), utilizing C DCT36
- added FORMAT command to generic control
- added support for ID3v2 APIC frames
- added mpg123-id3dump as official companion to extract meta data (including writing of album art from APIC to files)
- added mpg123-strip as official companion to strip dirt out of MPEG streams (including meta data)
- not deleting ID3 data right after printing in generic control
- module loader a bit more flexible with relative MPG123_MODDIR
- Fix chopped-off playback with pulseaudio output: draining the output now on closing.
- SDL output fixup, a) not chopping off end and b) non-fatal underrun
- Fix obvious errors in win32 output ... does it now play the end of tracks? Need someone to test this.
- added support for screen and iris-ansi terminals with --title (as prompted by patch from sf.net user canavan)
- fixes/enhancements for sgi audio output
- libmpg123: proper largefile aliases for proper systems (FreeBSD with one one-and-only off_t
This enables client software that insists on defining pointless _FILE_OFFSET_BITS. - wrapper script src/mpg123-with-modules to ease the pain of running mpg123 with modules without installation (setting MPG123_MODDIR)
- removed ALSA 0.5 code (unused for longtime, last GPL-only bit)
May I present the latest and last mpg123 release of the 1.15 series: It fixes some illustrous bugs, upgrade highly recommened (as always;-). Here they are:
- Writing CDDA data via --cdr works again; had also been broken by attempts to catch failing writes because of full disk.
- Also, the return values of WAV/CDR writing routines now properly indicate error to avoid stupid endless loop of "smart" audio writing code that wants to handle interruptions. Really, --cdr could just go and nobody would miss it ...
- Fix stupid bug in mpg123_chomp_string() (introduced in 1.15.1), empty lines were badly treated. Only usage in mpg123 is for parsing HTTP redirect headers; malicious HTTP servers might exploit that (possibility to zero bytes in memory).
- some cleanup for nagging mode
- more resync strictness to really catch (all) cases with changing decoder structure; in practice badly needed when disabling seekbuffer (so it's your fault, somehow ...) for non-seekable streams, otherwise not really an issue because of readahead checking
I repeat: This fixes possibly fatal behaviour in the parser when readahead checking is explicitly disabled (p.ex. via mpg123 --no-seekbuffer on http streams). By default, readahead checking is always active! - build system fixed for automake 1.13 (thanks to Nix)
Reviewing the recent bugfix releases, there is a lesson to learn about not touching things unless it is really necessary and clearly beneficial. Is the fallout from trying to make WAV writing safer over yet?
Apart from that, stay tuned for the upcoming 1.16.0 release with improved decoding performance! Oh, and, yes ... in the meantime, get your 1.15.4 from the download area.
A note about the MPEG compliance test on the mpg123 front page: This is automatically run on mpg123 trunk, the development version. In that function, the compliance test reported a failure in some layer I and II test bitstreams for some time recently. That concerned a too strict stream parsing that has been added to the development version and has just been corrected. So, now, fetching mpg123 directly from svn or the regular snapshot gives you the best mpg123, yet, again.
And indeed, featuring Taihei's improved Huffman decoding, the current development version should give every other decoder out there a mark to beat regarding efficiency!
Main feature of this release is hopefully the final go at satisfying all needs concerning WAV writing to standard output. To quote the NEWS:
Fix WAV writing. AGAIN. People love to decode WAV to stdout in various ways that started to get broken with me starting to care for people who like to write to full disks. I frikkin' HATE this rat race! I'm even starting to SHOUT. Now, the code prefers to write no header at all (when there is no actual output) instead of possibly writing too many misleading ones. Getting the blame for breaking dir2ogg repeatedly while trying to cope with one fatal situation that you cannot really cope with sucks. Big time. I hope that's it now!
The silent version 1.15.2 introduced a compatibility fix for the configure script. Get the new release from the usual places.
Been some time, time to release the next mpg123. There was a 1.15.0 release, but a very quiet one since two bugs immediately jumped up. Now there is 1.15.1 right away, with those goodies:
- libmpg123 API version 37
- Fix corner case in HTTP communication with missing path in Location header (bug 187).
- Prevent nasty alignment issues by not guessing about assembler alignment when .balign is available (bug 188).
- Added --continue (also see scripts/conplay).
- Added number row to terminal control keys for 10% jump points (for navigating long tracks).
- Set xterm title always if asked, disregarding the -q switch (if you want fully quiet, don't specify --title).
- Enable terminal mode in OS/2 by explicitly checking for and using os2term library.
- Getting WAV/AU/CDR writing back to a sane state while still catching out-of-disk when writing headers (none in case of CDR) but removing that initial test that prevented writing on any non-seekable file (like, /dev/stdout to a pipe).
- Added native audio output for QNX (thanks to Mike Gorchak), also improving portability of configure script while at that.
- more robust recovery from ALSA issues (device suspend)
- Fix crash in module loader on *BSD.
- Extend time display to switch to hours above 60 minutes (hh:mm:ss, ditching the sub-second precision)
- really include dithering in default x86-64 build.
- Fix mpg123_scan() not properly seeking back for all types of files (bug 3582628 ... it got a different number on sf.net now ... brilliant, folks!).
- Prevent false positives for "Frankenstein!" when using mpg123_scan().
- Fix printing of negative positions with buffer (bug 186).
- Accept application/x-scpls as additional MIME type.
- Try to handle certain Windows toolchains that miss EOVERFLOW.
So, don't hesitate to grab the fresh one from the download section!
Update: We got Windows binaries uploaded, the 64 bit ones built for generic x86-64 CPUs (not just Core i7).
Here we go again with another regression-fixing release: That happens when you skimp on verifying your ground-breaking reworking of existing code. Now, the resync logic does not signal premature end of stream on bad headers, short seeks don't get bit reservoir unnecessarily cleared and sample-accurate seek for files without gapless meta data is accurate again.
Please upgrade to mpg123 1.14.4. Really, please do grap the update from the usual download locations.
One thing: Fix regression from 1.14.1 in parsing of bad free format streams, avoiding apparently endless loops (just very slow reading, in fact).
Head over to the download section for getting your hands on the release.
With the 1.14 series, in an attempt to better handle out-of-disk situations, the WAV writing code got changed and that broke writing of WAVs to standard output (raw data with a single WAV header in front). This shall work again with the current release.
Upgrade if you please.
This one fixes a bug that got uncovered with the (modest) reorganization of the parser code. With the feeder API, it was possible to miss a format change in the (damaged) stream, the more dire outcome being the allocated output buffer being too small (switching from MPEG layer 3 with 576 samples per frame to 1152 samples per frame).
Upgrade naturally encouraged.
This is a rather big update, with a good number of fixes and behavioural improvements. You want a list? Here we go:
- libmpg123 API version 36 (see NEWS.libmpg123)
- Add --ignore-streamlength.
- But also deal with concatenated (Frankenstein) streams: Not applying gapless cutting once we're over the announced number of frames.
- Add --lyrics for printout of lyrics (from USLT in ID3v2).
- Added handling of SIGUSR1 and SIGUSER2 to terminal control code, configurable via --ctrlusr1 and --ctrlusr2.
- Some low-level API added (mpg123_framedata(), mpg123_framepos(), buffering and resampling control).
- Added info about input buffer fill to mpg123_getstate().
- ReplayGain: Try to detect LAME below 3.95 for the different reference level of 83 dB (adding preamp of 6 dB). Version 3.95 itself (not 3.95.1) I cannot detect. User-set gain values are not touched.
- Keep silent about missing bit reservoir when ignoring frames. That is the whole point (mostly;-).
- Add the new/old WRITE_SAMPLE variant from MPlayer that makes the generic decoder faster on older CPUs (x86 at least). Not on x86-64, though (it's not enabled per default there).
- Handle out-of-disk in the file writers (a bit, see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=67259)
- Added Xcode project files to build libmpg123 on Mac OS and iOS
- 32 bit output for sndio output (patch by Brad Smith).
- Remote control interface knows LOADLIST command now.
- Now freeing meta data memory after printout.
- Some documentation cleanup, including manpage fixes by quadrispro.
- Re-enabled wildcard expansion on Windows (been broken by unicode file name support).
- Fix MMX tabinit syntax (thanks to Marcel Müller for pointing that out).
- Fix SGI audio output (been broken since change to modules).
- Fix some fringe behaviour (mpg123_getformat() triggering needless reading of next frame, possibly hitting bogus MPG123_NEED_MORE).
- Resync limit now also serves to increase amount of skipped junk on beginning.
- Better separation of stream end and read error (in case there is no stream opened, even).
- Don't always complain about failed free format header search (only with verbosity level 3).
Well, what more to say? Of course you are going to grab the update from the usual download locations. There is something in it for everyone;-)
Yeah, that's it all: Just a bugfix release to make things smooth for folks on ARM machines. We had that fix in trunk for a while. Get the current stable version if you need a working build on your ARM Thumb CPU and prefer not to jump to the 1.14 beta version.
There was not much critique, but still improvements to be included in the upcoming release of mpg123. I have prepared a second beta to play safe with recent additions (like playlist support in the remote interface and display of lyrics from USLT tags). The updated NEWS:
- Add --ignore-streamlength. - Add --lyrics for printout of lyrics (from USLT in ID3v2). - But also deal with concatenated (Frankenstein) streams: Not applying gapless cutting once we're over the announced number of frames. - Added handling of SIGUSR1 and SIGUSER2 to terminal control code, configurable via --ctrlusr1 and --ctrlusr2. - Some low-level API added (mpg123_framedata(), mpg123_framepos()). - Added info about input buffer fill to mpg123_getstate(). - ReplayGain: Try to detect LAME below 3.95 for the different reference level of 83 dB (adding preamp of 6 dB). Version 3.95 itself (not 3.95.1) I cannot detect. User-set gain values are not touched. - Keep silent about missing bit reservoir when ignoring frames. That is the whole point (mostly;-). - Add the new/old WRITE_SAMPLE variant from MPlayer that makes the generic decoder faster on older CPUs (x86 at least). Not on x86-64, though (it's not enabled per default there). - Handle out-of-disk in the file writers (a bit, see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=67259) - Added Xcode project files to build libmpg123 on Mac OS and iOS - 32 bit output for sndio output (patch by Brad Smith). - Remote control interface knows LOADLIST command now. - Now freeing meta data memory after printout. - Some documentation cleanup, including manpage fixes by quadrispro.
So, get it now and report your experience: mpg123-1.14-beta2!
There will be some server downtime this night (UTC) for software updates. We hope to be back tomorrow.
Over at the debian bug tracker, I stumbled over another little bug that the fresh 1.13.7 fixes.
Get it from the usual places...
With ID3v2.2 frames and very verbose output (mpg123 -vvv), there has been printing of one random character in the frame name (they are 3 bytes long instead of 4 for later ID3v2 revisions). Not anymore. Get mpg123 1.13.6 now...
PS: The 1.14-beta1 doesn't have the fix yet, but the final 1.14 will, of course (just grab the snapshot for the current deal).
To make inclusion of recent bug fixes a no-brainer also for conservative distros, I present an update to the 1.13 series: mpg123 1.13.5 contains:
- Fix reading of ReplayGain values from Lame tag (nobody seen this before?!) (both actual values and the distinction between audiophile / radio).
- Accept application/octet-stream as input from HTTP.
- Update man page with encodings.
- Build fixes.
You should be able to get it from sf.net right now.
There is a beta of the next mpg123 release, 1.14 --- please get it, test it and report any issues! Main source of trouble might be the new handling of concatenated streams that start out with a Xing/Info header that contains gapless info (which doesn't really fit the conglomerate). But there is more, too. I'm short on time so here is the NEWS, rather verbatim:
- Add --ignore-streamlength.
- But also deal with concatenated (Frankenstein) streams:
Not applying gapless cutting once we're over the announced number of frames.
- Added handling of SIGUSR1 and SIGUSER2 to terminal control code,
configurable via --ctrlusr1 and --ctrlusr2.
- Some low-level API added (mpg123_framedata(), mpg123_framepos()).
- Accept application/octet-stream from HTTP, assuming it's MPEG data.
- Added info about input buffer fill to mpg123_getstate().
- Fix build without feeder.
- Info frame ReplayGain fixes:
- Fix parsing of audiophile ReplayGain from Info tag (perhaps relevant
for the future, yet have to see a file that has that value present).
- Fix parsing of any ReplayGain value from Info tag! All these years
and nobody told me that we used only the last 5 bits, not 9?!
I'm to blame, too: I use RVA values from ID3v2 tags... this is surreal.
- Detect LAME below 3.95 for the different reference level of 83 dB
(adding preamp of 6 dB). Version 3.95 itself (not 3.95.1) I cannot detect.
User-set gain values are not touched.
- Keep silent about missing bit reservoir when ignoring frames.
That is the whole point (mostly;-).
- Add the new/old WRITE_SAMPLE variant from MPlayer that makes the generic
decoder faster on older CPUs (x86 at least). Not on x86-64, though
(it's not enabled per default there).
So, get it now and report your experience: mpg123-1.14-beta1!
As you might know, some time ago I contributed a mpg123 binding for MPlayer to replace the fork there, called mp3lib. The final adoption of this mpg123 binding depends on some eerie performance issue being resolved. Mpg123 is slower than an old fork of itself! Well, that is the case when used as library from MPlayer...
I sent out a call on the mpg123-devel list to find someone who can help out with fixing this performance issue since I lack the time for that, sadly. If you feel motivated, please join the discussion there. Alternatively you can just send the fix to me personally, too. I won't mind;-)
Update: I am trying to investigate this with the time I can (not, actually) spare. I am documenting this with my notes about Beating mp3lib in MPlayer. Suggestions welcome.
Version 1.13.4 fixes bug 3393801, which is of interest for very long files (meaning: endless streams) needing resync. Then, there is a fixed build script for the windows binaries, which mainly results in said windows binaries being provided in full usefulness again.
This is for all who downloaded the Windows binaries from his site and wondered why they didn't work since mpg123 1.13.0: The dynamic builds simply were missing the output plugins due to a build script error. We got some updates on those, and the static builds as fallback in any way.
- Fix an endless loop on bad headers, bug 3267863.
- Prevent compiler warnings about unused variables with gcc 4.6 .
- Fix return value handling of getaddrinfo(), bug 3288333.
- Make decwin size computation work for OPT_ARM and sizeof(long) != 4 (bug 3288360).
Maintenance shows itself in the following points:
- Updated .NET wrapper (MPG123_SKIP_ID3V2, encsize and mpg123_strlen functions) by Malcolm Boczek.
- Fix crash when calling mpg123_decoder() before opening a track -- a rare use case since one can choose a decoder with mpg123_new() already.
- Fix format change detection for certain (artificial) concatenated streams (p.ex. MPEG 1 frames following MPEG 2 frames).
- Prevent the nasty of bug 3154889: No change of pitch without a current audio format. No proper solution, but more like earlier behaviour.
- Fix some compiler warnings.
- Fix a memory leak in the module loader, also some in the examples, for being pedantic.
- More use of AC_LANG_SOURCE to silence autoconf.
There are some things going on that I'd like to remind the world and myself on:
- The ffmpeg project could still profit from getting a libmpg123 wrapper: ffmpeg audio decoder performance comparison. Now a question is: Which fork of ffmpeg? I remember Michael saying that he won't oppose a wrapper when it's maintained, while Diego stronly argued for actually moving mpg123 code into ffmpeg and ditch any separate specialized library.
- GStreamer apps could also profit from getting libmpg123 mojo -- and there is a libmpg123 plugin for GStreamer, which apparently just needs some polish. See discussion at GNOME / Rhythmbox and launchpad bug for Rhythmbox
Indeed, after getting some mpg123 into XMMS2 and MPlayer (try -ac mpg123 on a recent build) ... ffmpeg and GStreamer are two influential multimedia frameworks that we also should be part of.
New Year, new bugs (from last year) -- and their fixes!
This release fixes a stupid regression in 1.13.0 that broke MPG123_FORCE_FLOAT and MPG123_FORCE_8BIT (--float and --8bit command line switches), caused by the introduction of 24 bit format support. Furthermore, it has been suggested to ignore the private / extension header bit in the parser's stream checking and so it is now.
Just as the 12th day of the 12th month of this year gives way to the 13th, the mpg123 1.12 series gives way to the mpg123 1.13 series. And this we got for you:
- libmpg123 API version 29 (mpg123_encsize(), MPG123_SKIP_ID3V2, mpg123_strlen(), 24 bit output, ARM decoder)
- New optimization: ARM NEON (Cortex A series) -- kudos to Taihei, again!
- Added 24 bit integer output (truncation of 32 bit integer)
- Cleanup of symbols for the static library: Only have global symbols that are actually needed, prefix them with INT123_ to avoid conflicts.
- Added --streamdump to get a copy of the data libmpg123 used.
- Added --icy-interval and tweaked libmpg123 to make playback of ICY stream dumps possible.
- Added possibility to set module file suffix at build -- to be able to avoid .la files for plugins.
- Removed compiler directives for alignment and disable associated tests.
The tests don't work on a wide range of compilers anyway, and newer gccs do have force_align_arg_pointer to fix bad stacks. - There is no ChangeLog file anymore... it was autogenerated from subversion log anyway, so look there if interested.
The mpg123 website and source code repository server has moved!
Ideally, nobody did notice except for the notices. But there is one change for the future: I'd like people to use svn://svn.orgis.org/mpg123 as URL for the source code repository. The added subdomain adds flexibility that one might need for future server moves.
Anyway, business as usual... go along, nothing special to see. Well, and stay tuned for the upcoming release featuring new assembly optimizations for modern ARM machines.
This release fixes a buffer overflow issue in the mpg123 frontend application when printing ID3 data in non-UTF-8 environments. It has been introduced in version 1.12.4 and Jakub Bogusz was so kind to bump my head into this. Please upgrade. Thanks.
This is a little bugfix release that improves printout of metadata (ID3) in UTF-8 terminals, fixing one of those distro bug reports that I am getting aware of late... Get it from the usual places.
The newest release fixes bug 3022850, a long-standing bug that managed to break http streaming with ICY metadata in a non-obvious manner. It's a little change with big impact... for those who listen to web radio, that is.
The fresh maintenance release mainly fixes bug 2996045, invalid memory access prompted by addresses in the upper half of the address space. I introduced that one with a bad alignment algorithm, sorry.
Along with this go several other fixes/improvements:
- Various build and portability fixes (including making some exotic configure switches work (again)).
- Add dump_seekindex example
- Sync mpg123_clr (.NET wrapper) to 1.12 feature set, patch provided by Malcolm Boczek -- and actually include it in release tarball!
- Rework mpg123.h logic for large file stuff a bit, clients can control it by defining MPG123_NO_LARGENAME or MPG123_LARGESUFFIX.
- Include dumb wrappers to provide names suffixed with _64 on 64 bit machines and _32 on 32 bit machines, respectively, to help clients that insist on defining _FILE_OFFSET_BITS where it is not needed (or with a non-large value).
- Tuning of the internal buffer code for feeder mode to minimize its performance impact (works in 4K blocks now).
- Workaround for compiler bugs in Open64/PathScale/SunStudio (bug 3004396, suggestion by Doug Gilmore).
Note that Sun Studio is still a tricky fellow, at least when it comes to our preprocessed assembly (generic build works). Also, x86-Open64 recently produced another segfault in layer3.c on my box... GNU and intel compilers are what one can use as something stable. - Make mpg123_getformat() return more error codes (like MPG123_NEED_MORE).
- Fix handle I/O for clients with small file offset (32 bit when libmpg123 has 64 bit).
- Fix 3DNow(Ext) standalone builds.
The download area is your friend...
I uploaded a quick hack that turns two instances of mpg123 and a MIDI controller (in this case the rather inexpensive M-Audio XSession pro) into a simple live DJ set: See the source code of mpg123-midi-control. I'll cut out the guts of the comment header to make this little post complete:
This is a hacky proof of concept for getting my M-Audio XSession pro to excert some effect on mpg123, on Linux systems with ALSA sequencer API. The idea is to run two instances of mpg123 like that:
mpg123 -R --fifo /dev/shm/mpg123-1 mpg123 -R --fifo /dev/shm/mpg123-2
Then run this program here with a playlist (listing of absolute file paths) from STDIN
cat absolute-playlist | ./mpg123-control /dev/shm/mpg123-1 /dev/shm/mpg123-2
and connect it to the MIDI controller (adjust port numbers):
aconnect 20:0 129:0
With that setup, you will load tracks from the playlist with the eject buttons for the respective channel, start/stop playback with the play/pause buttons... the volume and pitch faders will do something you might expect... the EQ buttons change the EQ settings. In short: You have a nifty basic DJ setup on your PC with two plain instances of mpg123.
Note that the pitching only works in a range the hardware or your audio output support (i.e. ALSA dmix)... and you need to be able to open two audio outputs at once, at different rates (ALSA dmix can do that... but it rather stresses the CPU -- though on modern machines you might not notice). Anyhow, it is just a fun proof-of-concept to be able to get some reaction out of my MIDI toy.
It works rather well... of course the pitching is not optimal, since mpg123 re-opens the audio output for every pitch change, but the volume/fader and EQ controls work nicely. If you're into this stuff, you should now have a simple example to adapt to your gear (different MIDI controllers might just need changes to the numerical constants naming the controllers and buttons).
Please forget the previous release, 1.11.0 . The libmpg123_64.so it introduced on largefile-sensitive systems is gone now. The interfaces for applications using system default file offsets and those using enabled large file support are unified in one libmpg123.so now. Version 1.12.0 of mpg123 shall mark the first stable ABI for such systems since mpg123 1.4.x, after which libmpg123.so usually offered only the interface for large files. Please, please: Update to this one so that emerging users of libmpg123 do not get bitten by an inconsistent base of mpg123 installations with incompatible libraries.
As a side effect of dual mode hacking, replacement I/O using client-provided handles (void pointer) has been added to the API. Oh, and the introduction of AI_ADDRCONFIG has been made conditional based on the actual availability of that flag on a system (that helps OpenBSD).
Download mpg123 version 1.12.0 now!
Update:In 1.12.0, there was still a passage in INSTALL referring to the twin libraries, I changed that and released 1.12.1 -- there are no changes in the code.
Dear people interested in the magnificent mpg123,
since the 1.11.0 release brougt the combined confused anger of the world directed against me for my simple and clean (for the maintainer) approach to ABI stability, the "twinlibs" libmpg123.so and libmpg123_64.so, I spent another couple of days/nights on fixing the mess that is large file support on Linux/Solaris.
Under http://mpg123.org/snapshot , you now find a preview on what may become mpg123 1.12.0, featuring dual-mode libmpg123. I really tried to keep all the funny and complicated aspects of the API working with a 32bit-offset app using a libmpg123 with large file support. The bold and fearless are invited to look at my approach at a dual-mode layer, this file is the main part of that.
Everyone is invited, humbly requested, barely expected to check out the snapshot tarball to build mpg123 plus library and verify that the dual-large-file mode really works.
My regression tests look good, I also created a >2G mp3 file and verified that I can play it as stream with a small-file mpg123 binary using a large-file-enabled libmpg123, but API calls hitting the limit of 32 bit file offsets fail as expected, in a controlled manner.
I do want to do it right this time, so please give me (ideally, mpg123-devel or mpg123-users mailing list) feedback and opinions about this upcoming release of mpg123!
Reactions to my split of small and large file libmpg123 are mostly irritated, confused ... or even hostile. Too sad that mpg123 does not have enough outreach to have people complaining about the test release two weeks ago, before I made it official. Now there are facts and the world does not like them. I am in discussion with someone knowing that largefile business and perhaps he can help me to come to a conclusion. Maybe I'll do dual mode in the end, supporting 32 and 64 bit offsets from one library. So stay tuned... something will happen in the next days. I don't promise what, though.
To mirror the anger and frustration I met out there, I want to express my anger and frustration about the whole 64on32 large file mess. I hate it. I hate it that I fell into the trap of making the mpg123 API rely on shape-shifting off_t (but at the same time feel that it is still correct, by concept -- would off_t be a stable entity). I'll try to find a solution nevertheless. But I hate it. Free software is not always fun. Not at all.
Attention: The initial source package was missing the crucial changes for the library name. I uploaded a corrected version around 2010-03-21 22:30 CET. Please get a fresh one if you got your download earlier than that.
So, here it is: The mpg123 release that hopefully causes only small trouble now, but will be safe for the future regarding the mess that is the hybrid setup of small and large file support on certain systems (like GNU/Linux and Solaris on x86). If your system does optional large file support, a build of libmpg123 with that enabled will be called libmpg123_64.so, a default build with small file support will be called just libmpg123.so like before.
Note that default means that what you get when not giving special flags or preprocessor defines -- the configure script will detect the optional large file support and enable it by default, thus, changing from the system default. Confused? Right.
But there are some goodies without side effect, too:
- Support for HTTP streams in Windows builds of mpg123.
- More foolproof IPv6 behaviour (not asking for IPv6 connections when there are no suitable interfaces).
- Fix a potential reading problem with ICY streams.
- Assembler cleanup that will enable optimized builds with the Sun compiler once it got a certain bug fixed.
So, get the new mpg123-1.11.0 source and be happy (possibly after relinking some apps).
The optional large file support on Linux/Solaris still troubles the mpg123 project. Of course the troubles started with me unwittingly choosing to expose off_t in the API. From mpg123-1.5.0 on up to the recently released 1.10.1, I at least opted to prevent runtime damage by renaming API functions according to the selection in large file support. This, again, is not a good idea when leaving the library name unchanged: A new build with large file support actually exposes a different ABI and thus is not compatible with an old binary.
So, here is my second attempt on getting the situation predictable: Not just some symbols, the whole library gets renamed when large file support is enabled. You get libmpg123_64 instead of libmpg123. That means a one-time incompatible switch for any binary that depends on a libmpg123 with 64 bit file offsets (on the affected systems), but it preserves compatibility for older and future binaries that depend on "default" file offset size (that is, 32 bit on a 32 bit Linux system). It hurts once, but after the switch, we have, if not a pretty, but at least predictable vision of the future.
If nobody comes up with a better idea (no, supporting 32 bit and 64 bit offsets in one build is not considered better... it's not worth the maintenance work and is error-prone, in my view), the next release of mpg123 will bring the change of library name depending on enabled large file support.
So please test it and be prepared, perhaps give some comments about it: mpg123-1.11.0 preview for the large file name change
To all users of systems that are not sensitive to variable off_t size (most non-Linux/Solaris, 64 bit systems): Be happy and do not worry about this mess. For anyone who wants to worry and understand the issue, have a read of Guido Draheim's work on the matter.
And, not to forget, there are other goodies with mpg123-1.11.0: Also concerning portability and ABI stability, the SSE code does not rely on aligned variables on the stack anymore.
At least that is the idea behind doing all explicit alignments now on the heap with pointer arithmetic -- as a side effect, I have seen speedup from that change, too.
Then, we got enhancements of the networking code, enabling network streams for plain Windows builds (MinGW) and fixing sub-optimal behaviour with respect to IPv6 (not asking for IPv6 name resolution unless there are IPv6 interfaces configured).
GNU/Linux distributions that employ multilib will really want to upgrade to this one because, after elaborate debates on various bug trackers (wine and gentoo, at least), I finally disarmed the largefile consistency check in the mpg123 header. It was not compatible with multilib setups that failed to provide a separate header for 32 bit (with explicitly enabled large file support) and 64 bit (large file support implicit).
Of course, that is not all. More to the core of mpg123, there are important bug fixes for gapless decoding and the feeder mode of the library (reliable handling of garbage and (apparent) free format streams). The full list of goodies:
- Help multilib setups that boldly assume that headers are invariant by removing the consistency check in mpg123.h and instead just adding a suffix to relevant functions when _FILE_OFFSET_BITS is defined. Invalid setups will now fail at the linking stage instead of the preprocessing stage. That should cover bug 2934488.
- Fixes for gapless decoding:
- Correctly skip padding larger than one MPEG frame (strange, but occurs).
- Bug 2950218 (proper gapless cuts for seeking near the end).
- Make sure the search for the first header aborts after 64K of one-byte reads, as always intended (bug 2951334).
Certain files (or even random data) were able to fool mpg123 sufficiently enough that it basically reads through the whole file in 1-byte steps in search for MPEG data. The limit of 64K will very likely be configurable in a future mpg123 version. - Fix subtle bug with seeking in feeder mode: A seek close to the current position (meaning: the needed data offset is already in mpg123's buffer chain) resulted in skipped bytes.
- Improve the feeder mode for handling large amounts of junk at the beginning, including proper passing of the request for more data when trying to determine free format frame size. This also fixes endless looping as reported in bug 2951334.
- The parser code still needs overhaul. It is not pretty.
- Compile fix for OpenAL (with strict compiler).
You see, this upgrade is a no-brainer. I gets a number of bugs out of the way to add more fun stuff to the next release, 1.11.0 . Get it from the usual places.
Update: I fixed the link to current mpg123 to actually point to the current version. Oh, and, I must admit that indeed, mpg123 is to blame for an oversight regarding IPv6 support which can trouble you with your broken DNS server (DSL router): It asks for IPv6 name resolution even if your setup does not feature IPv6 interfaces... together with glibc 2.10, that is rather annoying (see the web for stories). A future release will fix that, but lacking time for that, I point to the svn trunk, which has it fixed, or this little patch that should apply to a reasonable number of past releases:
--- src/resolver.c (Revision 2607) +++ src/resolver.c (Revision 2608) @@ -277,6 +277,7 @@ memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; /* We accept both IPv4 and IPv6 ... and perhaps IPv8;-) */ hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_ADDRCONFIG; /* Only ask for addresses that we have configured inerfaces for. */ addrcount = getaddrinfo(host->p, port->p, &hints, &addrlist);
The upcoming bugfix release is quite a prominent one, being focus of frantic attention mainly because of the trouble multilib systems have with the old large-file safety hack in the header. That safety hack is largely gone now -- with the header resulting in being identical for 32 bit and 64 bit mode on a multilib system.
But there is more to it: There are important fixes for gapless decoding corner cases and improvements of the parser for bad files: prevent seemingly endless loop in search of first valid header and more so seemingly (at least) endless loop for the feeder mode.
Get the pre-release source code, or the occasional binary from the win64 directory, if you are so inclined. And yes, This could just be named 1.10.1-rc3 to be consistent with earlier practice, but I did not know at the first pre-release that it would become that official. Sorry, really. Now get up and test it so that we can do the release for good;-)
Experimental network support for windows has been added to svn trunk, you can download the static or shared win32 binaries with network.
Win64 shared and static builds are also available.
You can now access shoutcast and other http streamed web radios, within the comfort of your console, even on Windows.
Here's a list of the features and fixes in this release:
- Confirmed/fixed on OS/2 platform. At least a static build works with native audio output and generic decoder.
- Make modules work with libtool-2.2.6b .
- Added pitch command to control interface.
- HTTP header field and MIME type parsing now case-insensitive (fixes bug 2904736). Also, the MIME-parsing for non-playlist URLs is done the same way as from playlists now. And, we interpret MIME types only to before a ";" (see bug 2836904).
- There is a build-time option to enable unicode file names on windows now. UNIX (Linux) does not need that, UTF-8 works natively. An unicode-enabled build of libmpg123 expects file names as UTF-8 strings, opening of non-utf8 strings (by old applications) still works via fallback when the conversion of the string or opening of the file failed.
- Also, on Windows, --realtime now works, along with added granularity of the new --priority parameter. Note that you get the latter functionality through nice/renice on UNIX, no need to add that to mpg123.
- Added experimental framebyframe API.
- Added a new Microsoft common language runtime wrapper (aka .NET wrapper) written by Malcolm Boczek. See ports\MSVC++\2008clr\mpg123clr\ReadMe.txt for further information
- Added Visual Studio 2010 Beta 2 project files for libmpg123
- Updated autotools machinery, autogen.sh is gone, use `autoreconf -iv`.
The simple facts:
- Fix logic failure in gapless code: The trailing silence was only cut on the first decode. So, seek-back and decode again never was gapless:-(
- Fix linker flags on MacOS 10.6 .
- Improve portability (mainly for Solaris/x86, possibly others).
- Fix reading from standard input in Windows (use binary mode).
So just download mpg123 1.9.2!
Some bugs and regression fixes accumulated quickly in the lively mpg123 svn repository... so here is the mandatory update for 1.9.0:
- Fix OpenAL output issue (bug 2840085)
- Fix theoretically possible discarding of some audio samples when getting a new format.
- Fix unwanted verboseness (some error messages from library even when MPG123_QUIET was specified).
- Fix back-to-beginning for feed_skip (fixes bug 2859531).
- Fix the CPU creep bug with NtoM decoding.
- Fix regression (since 1.9.0) in ID3 parsing: Now Foobar2000 RVA fields are interpreted again (among others).
- Fix some compiler warnings, minor cleanup.
Have a look at the new page about hacking mpg123, where I collected some rules the mpg123 code follows. Hopefully, that eases submitting code / patches that is easily integrated.
Another release broadening mpg123's functionality: Free format support and ARM assembly optimizations!
Dither noise is now runtime-generated (so less bloated binary with dithered decoders, thus those are included by default now). Several bugs have been fixed, relating to UTF16 in ID3v2 tags and bad frame fillup for 8 bit samples. Generally the ID3v2 parser is more flexible now with encodings, libmpg123 also offering a switch to defer the transcoding to UTF8 (so that a client application can handle strange encodings in disguise).
Well, you know where to get it, right? And I know you want it... yeah... give it to yourself...
Folks have their last chance to test the upcoming mpg123 1.9.0 with some important bugfixing and feature enhancing (as always;-). Grab the snapshot and report any problems!
We got fresh ARM assembly code in SVN that wants to get tested before a mpg123 1.9 release. We need someone running it on the real hardware to report about real world performance. Please have a go with the snapshot and speak up (preferred is to the devel mailing list, mail to the maintainer is fine).
The update mainly adds the proper integer / fixed point decoding that accidentally has been promised in the 1.8.0 at places (more still planned for 1.9.0). Minor bug and build system fixes complete the treat, for example updated build files for the Sony PSP.
This one is massive. We got so many improvements... most important: mpg123 is now more correct than ever and it's faster than ever -- especially on modern x86-64 hardware, where we regain the performance crown from the 64bit SSE code in MPlayer (in the mpg123-derived mp3lib, to be specific;-)!
Well, no need to blabber about it here, just get your 1.8.0 fix from the usual download locations and enjoy! There is massive text in the NEWS file. Have a seat, have a read.
Thanks go out to the whole team to make this happen, we got strong new contributions this time! Also, thanks to the Hydrogenaudio community for nit-picking at the leftover SB21 cutoff and those least significant bits -- see the colorful thread on the Hydrogenaudio forum.
1.8rc5 is there, adding a fix for the 32bit-signed-integer x86-64 stereo synth on 64bit MS Windows platforms. Will this be the last fix needed for 1.8.0? Stay tuned for the next episode!
1.8rc4 is there, just adding the fix for the x86-64 stereo synth on 64bit MS Windows platforms.
A handful of issues has been resolved with the rc2, cumulating in the next canditate for public review before full-blown release of 1.8.0 (and the inevitable odd bug creeping up and prompting 1.8.1). We should be quite near a release here, one outstanding issue being workability of the x86-64 code on the MS Windows platform (it's fine on GNU/Linux, though) -- debuggers welcome.
Well, head over to the download area and check out mpg123-1.8rc3!
To keep the world updated: We have some fixes in SVN that will make it into the 1.8rc3 test release. If you have an issue with 1.8rc2, please verify if it is still there with the current snapshot.
The first candidate was kindof inofficial (it's on the website but not announced), now follows another one for real.
Head over to the download area and check out mpg123-1.8rc2!
The release is still delayed, but just because it is becoming a better one, indeed! Apart from fixing regressions that hit layer 1 and layer 2 decoding since the 1.x series, there are improvements underway for 16bit accuracy as well. You may have noticed the MPEG compliance log included on the front page. That one is periodically created from the svn snapshot and for 1.8.0 it will indicate full ISO conformity also for 16bits output, where the mpg123 engine has been lacking in the LSB because of rounding (or lack of) in the generic decoder. Note that the i586 decoder already is correct in the LSB, it uses proper rounding in assembler.
While we eagerly anticipate the 1.8.0 release, there arose the need for a quick regression fix for 1.7.x . The re-introduction of workable --doublespeed introduced a fine regression wich basically made seeking unbearable. Why didn't anyone notice? Seems like people using mpg123 want to hear every microsecond of their music and never hit fast-forward...
So, head over to the download are to get it... and please someone tell me early when I screw up next time:-(
Even since before the 1.x versions, there has been a vulnerability in the ID3v2 code which at least can cause denial of service (i.e. crashes...). Update to the current release -- there is no excuse!
The interactive adjustment of the RVA setting resulted in utter silence due to a change on mpg123_volume() behaviour. Now, to activate the RVA change, mpg123_volume_change() is used, which works properly.
This started around christmas... me reworking the decoder core to play more with the dynamic possibilities of juggling with function pointers at runtime. And hardcore templates in C (you know, it's some sort of preprocessing all along...). There's more runtime choice than ever... and also more build-time choice. Plus: --doublespeed works again!
- Lots of output format fun!
- now supporting 8, 16, 32 bit signed/unsigned integers, 32bit float (64bit float can be hacked in quickly)
- optimized decoders use fallback routines for non-optimized formats transparently
- flexible resampling is automatically chosen when output does not support standard rates (like a JACK server)
- That meant quite some restructuring in the decoder code...
- Lots of core functionality now optional, enabling small-footprint
builds of libmpg123.
- choosing among the MPEG layer codes
- NtoM resampling
- downsampling
- feeder API (mpg123_open_feed())
- ID3v2
- String API
- ICY
- output formats
- error/warning message printouts
- ... a layer3-only shared libmpg123 can be just 107K on x86-64 or 94K on x86
- --preload (tune prefill before playback for buffered mode)
- win64 support (one report at least;-), modules working on Windows
- Windows/MSVC++: fixed handling of unicode file names,
mpg123_topen() now actually working there
You are obliged to use mpg123_tclose() now! - using "plugins" subdir relative to mpg123 binary (in addition to ../lib/mpg123)
- switch to libtool 2.2 and automake 1.10 for the build scripts
though no update to new libtool 2 API, yet - some portability fixes
- prevent user from creating non-working I/O setups (replacing timeout reader, ICY with feeding)
- JACK output accepts port names for -a, stereo gets mixed down when only one port is chosen
- added sndio output, contributed by Christian Weisgerber
- Make --doublespeed paramter work, porting of which has been
forgotten in the 1.x series!
Along with that, a regression in decoding has been fixed (concerning skipping of frames in general).
This release fixes an issue with flexible resampling and the bad frame fill up introduced in the 1.6 series. Also, resampled output should now be consistent across seeks. Get it from the usual places...
Addendum: Since 2009-01-13 there are also fresh Win32 binaries uploaded, by courtesy of fellow P4tr3ck.
- Fix sf.net bug #2413608: Make sure a new format does not slip through after early close.
- Include equalizer example file and a piece of wrapper code for MSVC++ in the distribution.
- Do not claim to support unsigned 16 bit encoding (never been the case).
- Fix default fifo detection, now it actally activates fifo support!
I feel the need remind the world about the messy issue of large file support (sometimes called largefile support instead;-). There are certain systems (notably GNU/Linux and Solaris) that have chosen to make that a decision at build time with the type off_t sometimes being 32bit, sometimes 64bit. You can compile apps with or without large file support.
That means that you can have libraries for 64bit file offsets on your system and libraries for 32bit offsets. You can have applications (trying to) using libraries with a different file offset setting. That means one thing: Trouble! To prevent weird runtime errors or even crashes, I added some precautions to libmpg123, notably at build time, you could see such a message:
/usr/include/mpg123.h:37:2: error: #error "Mismatch in large file setup!
Also, at runtime, a 64bit offset libmpg123 will fail with a program that is not aware of this -- yielding unresolved symbols due to renaming the affected functions with a suffix indicating 64bits.
If you encounter this, please read up and think about that problem, and possibly complain to your OS distribution or the software project whose code is failing. Especially GNU/Linux distributions should be interested in making sure that they don't mix largefile builds with non-largefile code.
Update: See the FAQ.
As Christian pointed out, the IPv6 autodetection has been broken due to a nice little typo in the configure script. 1.6.2 is here to fix that for you.
The 1.6.1 relase is here, mainly to fix a largefile issue with the remote control mode. Get it and enjoy...
The new release is out. Now. Lots of stuff happened: Decoding improvements, fast fuzzy seeking (using estimates or the Xing VBR TOC) new commands / API, bugfixes, largefile support via configure... and on and on.
Well, it's late... so stop reading and just download it!
Let's face it: This week is tight for me. Possibly too tight to make a release.
Besides all that real life work stuff, there's demanding involvement in organizing and taking part in the fith Brandenburger Linux-Infotag in Potsdam, Germany (BLIT), on 1st November. Perhaps around (or shortly after...) that would be a good time to clean up the docs and push the beast out after all. May be a good idea to settle the ongoing streamlining of the Windows builds during the week, too.
Oh, and, eh... did I mention the BLIT? If you happen to be not that far from the state of Brandenburg (you know, Berlin's at the center of it;-)... you might want to pay the BLIT a visit; see the BLIT-Website for details!
Well, 1.6.0 is still not out. We are showing bad discipline and keep adding features. Sorry.
The current candidate now also features fuzzy seeking, along with interpretation of Xing VBR seeking info.
...for final testers! Please check out the current snapshot and report any issues. I intend to release 1.6.0 around this weekend...
A nice number of improvements accumulated:
- small things inside that I forgot to mention
- some new commands for remote control interface:
- SCAN
- SAMPLE
- EQFILE
- SHOWEQ
- added --keep-open command line flag (for remote control)
- fixed equalizer file parsing to really handle comment lines as example file suggests
- more elaborate detection of UTF-8 locale, also --utf8 switch to force it
- libmpg123 9.0.9:
- added mpg123_geteq() and mpg123_tell_stream()
- API cleanup (take const char* for mpg123_open())
- calm down complainling (C++) compilers by completing the mpg123_channels enum
- fixed several possible crashes when user provides NULLs where it isn't appropriate
- workaround for frames that fail decoding (bad frame body, missing bit reservoir): fill up with silence That also fixes seeking issues related to bad frames since now the fixed relation between frame and sample offsets is restored.
- Finally realized what that the resampling code for integer math (generic_nofpu) was just incomplete! Now it works, using the defined integer multiplication.
- Detect UTF-8 in ICY conversion (instead of just assuming CP-1252, provided by Torsten Glaser).
- Prevent ugly noise when the bit reservoir is not fully there (p.ex. ignorantly cut mp3 files). Concerned frames are silenced, but reservoir for following frames is kept. Thanks to Patrick Dehne for the investigation and patch!
- new project files to build/use libmpg123 with MSVC++ 2005 and 2008, provided by Patrick Dehne
- fixed a regression that made the pause/loop mode in terminal control slowly go backwards
...for final testers! Please check out the current snapshot and report any issues. I intend to release 1.6.0 around 11th October...
The hottest topic may be the finally working resampling modes for the integer decoder (configure --with-cpu=generic_nofpu), others include added features for the remote control interface and some fixes to the decoder for broken streams (p.ex. keep seeking reliable when frames pass header check but do not decode).
As promised, version 1.5.1 is now out, featuring the 4 announced bug fixes (see news archive and tracker). One may note that with this version we seem to have taken all technical steps to make the XMMS2 plugin official (though the code in mpg123 distribution is outdated, there is the fresh stuff from XMMS2 folks).
There is a couple of bugs fixed in SVN that should make up the upcoming 1.5.1 release, namely these:
- 2053181: SSE decoder is not thread safe
- 2044423: Writing WAV output to stdout broken
- 2044404: Option 'resync' is a misnomer
- 2064322: mpg123_length broken in open_feed mode
Perhaps you'd like to check out the snapshot to verify that these are fixed before 1.5.1 hits the world...
The world shatters as version 1.5.0 of mpg123 is being released - now supporting IPv6 officially (a fresh implementation, after that other patch floating around for years...)!
But that is not the only change we got there... various features/fixes on different scales went into this one:
- libmpg123 6.0.6
- Floating point decoding back again, (build time choice for now; --with-cpu=generic_float).
- More robust string handling; extended string API.
- fixed an (so far) unnoticed ID3 bug that may have obscured comment fields
- added mpg123_feed() as shortcut; using const input buffer now
- resync is enabled again for ICY streams (the trouble in the past was due to a reader bug, not the streams)
- decode ICY text data to UTF-8 (thanks, Thorsten)
- preserve file flags for timeout mode
There are two important announcements to bring to you, favoured public:
- mpg123 1.x is in debian lenny (testing)! That means the next stable debian version will have a current mpg123 with libmpg123 as shared lib. That is good:-)
- I finally came around and reworked the http code to be able to update the stuff to support IPv6 (like some patch already did quite some time ago).
The latter especially means that I need people to test the heck out of the current development snapshot to find all the nice little bugs I introduced. Seriously: I need you people test the code for IPv4 and IPv6. Please. Test. And. Report to the devel mailing list or just directly to the maintainer.
I added a FAQ entry concerning mpg123 and asterisk. It refers to an elaborate message I sent to the asterisk community.
We had a couple of nice little bugs to fix for this one.
- Fix mpg123_tell() and mpg123_seek() return values with respect to the samples in decoding buffer (bug 1947373).
- Fix (bogus) 3DNow detection on IDT C6 (bug 1947982).
- Fix mono playback of win32 output (bug 1955157).
- Fix ABI compatibility with compilers that don't align the stack like gcc does (fixing SSE crashes on win32).
So users of IDT CPUs, serious users of libmpg123 and any users of Windows systems (there are fresh binaries available) really would like to upgrade to the new release.
There's been some trouble building the latest mpg123 on cygwin or plain win32 (MinGW). Now that should be fine... no functional changes.
Well, what the title says;-) Sorry for that one, but this sort of thing happens in a one-developer-no-time show.
The new release is there, adding essentially one convenience feature and one serious bug fix, here's the list:
- Enable runtime check for available and working output modules.
Now mpg123 tries all built modules (or a list specified in mpg123 -o moda,modb,modc) in turn to find a working output. This minimizes the situation of having to specify a device when default output doesn't work for some reason. See bug 1910500. - libmpg123 2.2.2
- Fixing an endless loop for ICY streams that suddenly end without error (just EOF).
- Further fixes around EOF handling in (buffered/ICY) streams.
- Enable user to interrupt mpg123 when stuck in a loop of failing to open a track (with --loop).
- This time with correct RPM spec (hopefully... sorry, Michael!).
In less words: Get it!
This bugfix release just revives that snd_pcm_sw_params_set_xfer_align(pcm, sw, 1) for alsa-lib < 1.0.16 . The ALSA changelog just mentions removal of that function and that noone really understood why it's really there... well, it at least seems to be necessary for alsa-lib 1.0.14 on some systems.
This is a major fix/enhancement release for http streaming, much more usable for that than earlier mpg123 1.x versions. But that is not all: We have important bugfixes for decoding and ID3v2 parsing plus a new option for smoother experience with buffered playback.
- libmpg123 libtool-version 2.0.2
- Fix nasty bug in ICY reader that failed to account for partial reads from slower network.
- Now non-seekable streams can get peek-ahead for MPEG sync, too, triggered by the MPG123_SEEKBUFFER flag.
- Do not try to resync on streams with ICY metadata, that won't work.
Consequently, if there's unreliable network, use --loop -1 to make mpg123 reconnect to the server on errors. - Applying a few layer 3 decoder fixes from old mhipp CVS (hail to the creator;-)
That includes the fix for bug 1895025. - Fix ID3v2 parser with very invalid claimed ID3v2 frame sizes (could have triggered DOS before).
- Oh, and fixed a steady memory leak in ID3 handling. Should mention that;-)
- Print ICY-NAME and ICY-URL again, as mpg123-0.6x did.
- Added --smooth option for not flusing buffer between tracks but at program end only.
- Included some contributed ports/bindings of libmpg123 under ports/ .
You are already heading for the download section, aren't you? ;-)
- libmpg123 libtool-version 1.2.1 (coincidence!)
- Earlier check for free format headers to prevent them from screwing up resync (free format still not supported).
- Bug 1889051: more flexible resync, not insisting on the format of the first frame (which could have been bogus).
- Add an output write loop to handle SIGSTOP/CONT operation (bug 1890563).
- Fixed a bug where playback status for some http streams was not shown.
And here is the next incremental update, fixing some bugs, mainly in the build system, and adding the resync limit parameter to libmpg123 and the mpg123 app. There is convenience for RPM Linux distro users: You can run rpmbuild -tb on the mpg123 release tarball and get a qick-and-dirty rpm for installation though the included spec file.
An embarrassing omission has been fixed, too: The i486 decoder files now actually are included in the distribution!
So, head over to Sourceforge and get the stuff.
Also in the news... we have mpg123 on the PSP with MODO!
We got:
- Added arts output.
- More verbosity on lame/xing/info tags (on demand) instead of compile-time debugging switch.
- XMMS2 plugin cleanup (submitted to XMMS2 for inclusion)
- Improved ID3v2 robustness (let bad tags not affect playback of the important part).
- Terminal control:
- Key for going to previous track ([d], because it's left of [f] usually... no config file yet for that).
- Key for printing current playlist, [l].
- Now possible to switch on verbosity also for mpg123 -q -C
- Key for (re)printing ID3 tag info ([t]).
- Key for (re)printing MPEG frame header info ([m]).
- Soften the -q option: Now you are able to increase verbosity after -q again, like mpg123 -q -v (this fixes cplay's progress display).
Bug 1859413 is fixed with version 1.0.1 of mpg123. It is about a crash in the module loader for long directory paths. Needless to say, upgrading is highly recommened!
Some fixes went into the 1.0rc3 during the week, but the substance is unchanged. It is time to release the stable version 1.0.0! Get the tarball from Sourceforge or the local download page and enjoy.
This is, finally, the first "complete" stable release of the revived mpg123 project. The 0.6x series already added a GNU autotool'ed build system and runtime cpu optimization selection, together with numerous bug fixes .and an enhanced generic control interface.
Now a big step has been taken, adding a re-born decoder library to replace the old mpglib (libmpg123) and support for run-time audio .output selection, which was one usability advantage mpg321 had over mpg123. Nearly every part of the mpg123 source has seen some restructuring or cleanup.
The development from 0.6x to 1.0.0 also saw several smaller feature additions - make sure you check mpg123 --longhelp for anything you do not know already;-).
As promised, this one contains mainly the JACK fix and some smaller cleanups. Get mpg123-1.0rc3 via Sourceforge or from the download page, as usual.
This is intended to be the last release candidate before final 1.0.0 .
In case you have trouble with 1.0rc2 and jack output, that is the one fix we have already in svn and queued for rc3:
r1285 | thor | 2007-12-10 01:50:39 +0100 (Mon, 10 Dec 2007) | 1 line
Changed paths:
M /trunk/src/output/jack.c
Fixing that one... The capabilities inquiry does not work when the open function fails out on the first one where native audio settings are required via format=-1 etc.!
You can grab the SVN snapshot if you want jack working now.
Welcome to the second round of bug-squashing!
Hurry to get mpg123-1.0rc2 via Sourceforge or from the download page and report our blatant mistakes! ;-)
Quite a few fixes and improvements went into the second release candidate. ID3 handling is safer now and IDv2 support has been added to the remote control interface. The buffer and general output code got much attention, so that, among others, the buffer now works properly on MacOSX, write errors to .output are handled now and the interactive experience with the buffer and terminal control has been improved. Another important, albeit a bit embarrassing, point: Flexible rate mode should now work at all again.
I don't want to rush it while I am not in full posession of my mind... i.e. in the middle of the night after doing last changes. So, there will be 1.0rc2 not this night, but the next (this) day.
The impatient may check out the updated SVN snapshot to see what 1.0rc2 will be.
The first release canditate has been a huge success so far... a success in finding stuff to be fixed for the final 1.0! Well, we have so much new/reworked code in there that this should not come as a surprise. There will be 1.0rc2 this night, being a much more mature piece of software than 1.0rc1 just days ago.
The impatient may check out the updated SVN snapshot to see what 1.0rc2 will be.
The first release candidate of the heavily reworked mpg123 is ready! Grab it from Sourceforge or from the download page. Please test, especially to help us improve the situation with the specific platforms we cannot test; see the testing page for that!
A glimpse into the news:
- In one word: LOTS!
- Many small things that happened while migrating to the new setup.
- The decoder is now a library (libmpg123) which can be
installed also for other programs to use.
This finally provides a heavily improved replacement for the aged mpglib. We have doxygen API doc, example codes. You can still choose to compile the decoder statically into the mpg123 binary, though. - We have a plugin system for audio output! This should be
relieving to package maintainers for binary
distributions, drastically reducing the number of builds
they have to provide.
Here, too, you can choose to build one audio output into the binary like before; you can have your old-school one- piece mpg123 or the hip I-am-legion shared-lib-and- plugin flexible mpg123;-)
One exception: For now, you have to compile without modules in MinGW32/MSYS/Cygwin. - ID3v2 support has been enhanced and, in the case of
specific comments (those with a description), fixed.
The ID3 parsing is part of libmpg123, offering support
for virtually all textual information in ID3v2.2, ID3v2.3
and ID3v2.4 tags (along with the usual 128 bytes of
ID3v1 or ID3v1.1 in a block).
All tag texts are converted to UTF-8, allowing mpg123 to properly display special chars in an Unicode terminal without fuzz (for non-UTF locales, there is still the ASCII reduction). - Gapless decoding (of layer 3 streams) is now considered to be a standard feature and is enabled per default both at build- and runtime.
- ...
As you know (if you cared;-), we are feverishly working on the big-o-1.0 release of mpg123 featuring output plugins and a new decoder library. Besides the nightly snapshots we now have a preview of the libmpg123 API documentation, thanks to Nick introducing doxygen. We think it looks nice already:-)
Also, I came around producing preview builds of libmpg123 as Win32 DLL using MinGW, by popular demand. See the download section for that.
Bug 1807964 needed some squashing. It has been there far too long, hidden in the dark corners of not-quite-standard MPEG 2.5 playback. Be quick and get it from the sf.net project download section and enjoy your sub-16Khz files;-)
Meanwhile, we are urging to get going in the 1.0 direction. We need testing and inevitable fixing of changed code on various platforms to make the next major release a pleasant one.
Please check out the nightly svn snapshot on your exotic hard- & software and report back to us!
mpg123 runs on a very large number of platforms and supports a wide range of audio output APIs. However we the maintainers don't have access to all the systems that are supported by mpg123. We are looking for official testers for various platforms to make sure that they still work before we make releases.
Take a look at the testing page for details.
Yes, it is time again; the list of changes has grown and a release was overdue.
Also, the SVN branch that forms a new mpglib (libmpg123) and shapes the mpg123 application around it is lurking in the background, eager to take over the scene.
It is possible that 0.67 will be the last release of the old codebase, the next one being based on libmpg123.
But that is future, what we have now in release 0.67 is this:
- verified that it builds on SGI IRIX 6.5 for MIPS32 and MIPS64
- enable flexible rate for stdout decoding, too
- UTF8 filtering to ASCII finally works thanks to Mika Tiainen, see bug 1745847
- corrected frame offset; -k was off by one
- added --timeout n: Possibility to end playback on a stream that doesn't give data for n seconds.
- added --loop n: for ... well... looping playback of a track; motivation was persistent internet streaming with unreliable connection (together with --timeout)
- build fixes
- use movap instruction in SSE assembly when compiler supports the needed alignment (idea from MPlayer)
- show decoder options in their priority order in --list-cpu/--test-cpu
- added Perl script to benchmark each of mpg123's CPU optimisations
- portability enhancements and cleanups along with testing on SunOS 4.1.2 with gcc-2.7.0
- workaround for ugly flexible rate for MMX/SSE/3DNowExt code: --with-cpu=mmx also includes i586 code as fallback; similar with the others
So, head over to sf.net or our download page and get the new stuff!
Thanks go out to Serge Simon and the R.O.M. 106.5 FM Team (http://www.rom.lu/) for their support, both in form of a monetary donation and a bottle of wine from Luxembourg:-)
Been some months, big stuff happened. This release finally adds the SSE and 3DNowExt optmized decoders as well as combined builds with runtime decoder selection. Also, the assembler codes now work on Cygwin and with MinGW32/Msys, the latter being added as supported environment including the resurrected Win32 audio output.
Besides bug fixes and additions like named pipe / FIFO support for the generic control interface and more terminal control, the general portability with the new build system has been improved; also with less hardcoded decisions based on operating system type.
A perhaps useful hack is also a new build (./configure --with-cpu=generic_float) that produces 32bit float samples on raw or WAV file writing.
This is an important release, also it is hopefully the last release with monolithic audio output (plugin system is nearly there). The extracted libmpg123 will become reality in the not too distant future, too. Well, for now, go and get version 0.66 from the usual places (see download page)!
In svn, there happened some new backport of MPlayer's mp3lib goodies: SSE and extended 3DNow! Now we are on par with the other fastest mp3 player also on current CPUs;-) Connected to the backporting is the first attempt to create an universal x86 binary that contains all the optimizations and enables choice at runtime; "all the optimizations" meaning all x86 floating point targets except i486, that doesn't fit the common scheme (yet).
Working on the performance front, I finally managed to build up a test box with a 486DX4-100 and put a Slackware 9 install on it. After verifying that mpg321 doesn't get you anywhere there, I built a i486 optimized mpg123 and took it out for a spin to pump some music into the headphones through the legendary AWE32 BigBoard.
It's just fine for 128kbit/s layer 3 stereo, user cpu load being around 66%, and the buffer catches hickups that occur with some high quality vbr (around 200kbit/s), load being more up to 70%.
Mono playback (which doesn't use special i486 opts) is able to push the load down to around 50%, so indeed a 486DX2-66 or DX50 could be able to achieve something.
Seeing the still not fully used CPU, I also tried how DerMixD performs with two mpg123 input channels - one being played actively and the other buffered in background for possible crossfading later. It's nearly ok, but stuttering especially while buffering the second track. I suspect that it's not the cpu here but the i/o with the hard disk behind the CMD640 and/or the threading/context switching pushing system load. I'm gonna try how it is with a 2.6 kernel (NPTL) and also what newer compilers say - this slack has gcc-3.2 and gcc-4.1 improved considerably on performance!
Oh, and also I extended the terminal control to include volume and RVA control / display as well added verbosity switch key for enabling/disabling messages / progress indication at runtime. You see: We need to tag a version on that and get it out!
This release parses id3v2.3 (more) correctly and allows CRC bits to vary which fixes some files by old LAMEs and some streams that are cat'ed together. Also, attempts to make the build more friendly to non-GCC environments were undertaken.
I got the report on a denial of service (mpg123 stuck in endless loop) possibility with a web server closing the connection prematurely, wiped up a fix for that and that warrants a quick release in my opinion.
The 0.63 of mpg123 is now uploaded to sf.net and soon to be found on freshmeat... it mainly ships the one-line build fix that several people reported to be needed for gcc-3.3 .
Thanks to Nicholas we have the new release on the sf.net download area now.
It was time for the next release. It includes some nice enhancements and fixes:
- JUMP command in generic frontend accepts offsets/positions in seconds (JUMP 4s vs. JUMP 4)
- initial support for ICY meta data in SHOUTcast streams
- a bit of fixing with rva code, added rva and general volume control to generic frontend
- accepting more MIME types for http streaming (application/pls and audio/x-mpeg)
- ID3v2 info output taking less space per default - more resembling the old ID3v1 view for short tags, full view with always one line per item via extra --long-tag switch
- generally less verbosity (i.e. noise on console) per default
- ID3v2 now having some kind of support for unicode; trying to print what's latin1-compatible and prevent messing up of terminal with unknown bytes.
- several bug fixes and small improvements
You don't find this release on sourceforge yet as I am plainly unable to find the magic door to the new file release system. If anyone knows how to get a new file release out on sf.net, please let me know! I must have grown stupid and blind over night... (of course I blame the changed sf.net interface instead;-)
Well, now go on to the download section and get it!
It's time: The next regular release after the first "new" mpg123.
There are bug fixes along with some improvements in error
handling and playback as well as enhanced AltiVec code and
even bits for good old i486.
The build system got some issues ironed out, mpg123 should
now also build out of the box on cygwin (though not with
assembler opts).
Well, the 0.60 version is just a month out there, about 10000 downloads were made (sf.net and here... there could be more weight on sf.net though), the homepage design got some resfreshment from Stefan Graubner (thanks for that first real mpg123 logo!) and
The development didn't stop in the past months and there were bugfixes and enhancements all around. Nearly all audio outputs got changes in error handling (allowing restoration of terminal instead of just crashing out on error), thus I hereby kindly ask any interested folks to test if the fresh mpg123 svn snapshot breaks anything - we cannot test every audio output since we don't have every platform available...
The next release will come.
It is the night of the 29th August 2006 and the time the new stable mpg123 is slipping through my fingers into the net.
For those who didn't follow the development, here's the news:
- LGPL license
- compilation via ./configure && make (i.e. GNU autoconf...)
- many bugfixes
- more audio outputs, updated Alsa
- more robust playback
- MMX and AltiVec optimizations
- RVA/ReplayGain
- basic ID3v2
- improved http and playlist operation
- ...just see yourself!
This version is the result of merging 0.59r by Michael Hipp and parts of his development tree with the 0.59r-gpl from sourceforge and mpg123-thor (both including patchsets from Debian) as well as continued work on the source of both Nicholas and myself as well as enthusiastic testers who gave us a purpose (thanks for being with us after that long time!).
Long story short: Head over to sourceforge and get it!
Note for old school fellas: This official end user release only works with the new autoconf make system. The MakeLegacy.sh script for using the old-style Makefile needs a src/config.h.legacy file mimicking settings from the autoconf´ed config.h . You can find an example that works on my linux laptop in the svn tree.
cat list.m3u | mpg123 -@ -from working and enhances the playlist code by making the line reading buffer dynamic.
Also, the playlist code is now much cleaner and self-contained in an extra unit (well, what does the user care, eh? ;-).
Hurry up, buggers - we do not really plan to release another beta!
Important news include:
- proper seeking, also for VBR streams
- real two-way seeking in remote control mode at all
- better estimates of remaining frames (on vbr files), exact if Xing header is found
- Removed libao support (as it is GPL and we aren't - and we don't need it with native Alsa)
- Added ALSA 0.9/1.0 support by Clemens Ladisch (old alsa is in audio_alsa05.c but will most likely vanish soon)
- Added PortAudio audio-output support
- Added SDL audio-output support
- Fixed NAS audio-output support
- re-enabled MPEG 2.5, code just seems to work
- improved stream checking; being more willing in general (favor resync instead of bail out) but directly give up if free format stream is obvious
- Whee! Initial Relative Volume Adjustment (buzz) support with reading of ReplayGain values in lame/info tag, the RVA2 frames in ID3v2.4, ID3v2 TXXX tags from foobar2000 (please test, someone!) and custom ID3v2.3 comments entitled RVA / RVA_ALBUM / RVA_AUDIOPHILE / RVA_RADIO / RVA_MIX
- more persistence in trying to get http streams
There is a new alsa output by Clemens Ladisch removing the need for libao (which is not LGPL) and the addition of RVA (relative volume adjustment) or ReplayGain support via Lame/Info tag and ID3v2 info - in theory even the ID3 tags that foobar2000 creates.
Also, some enhancements crept in - mainly with http and playlists (where Shoutcast/Winamp PLS can now be parsed directly by mpg123). Please head over to sourceforge and find the next bugs to kill on the way to a stable release.
This release is the first official product resulting from the merge of the 0.59r-gpl and 0.59r-thor forks back into the mpg123. Though tagged beta, I consider it being the best, most secure mpg123 version available now and encourage everybody to test it.
For sure there are glitches in the new/modified build system and general small issues with platforms that the current developers cannot test. Please help them (us) ironing these out before the final version 0.60 .
See the documentation in the source package or on sourceforge.net (release notes, changelog) for details on what´s really new.
The page about my Lame/resampling tests documents this and as a plus offers some plots showing the gapless mode working nicely.
- a clear license statement, spoken out loud for all distros to hear
- incorporation of the pre-0.59s MMX assembler code
- proper ignoring of "unsynched" ID3V2 data (no choke on embedden raw bitmap anymore...), as does pre-0.59s
- experimental (iow: not perfect but working) gapless playback of mp3 files encoded with Lame
