QUICK AUDIO EDIT
Corresponding source for the open-source components
FFmpeg 7.1.5
================================================================

WHAT THIS IS

Noirsonance Quick Audio Edit includes a custom build of FFmpeg. FFmpeg and the
LAME MP3 encoder are licensed under the GNU Lesser General Public License, which
requires that anyone who receives the application can also obtain the source
those components were built from, and can replace them with their own build.

This archive is that source, together with the exact scripts and configuration
used to produce the binary that ships.

WHAT THIS IS NOT

This archive does NOT contain Quick Audio Edit's own source code, which is
proprietary and is not covered by the LGPL. Nothing here is required to be, and
its absence does not limit any right the LGPL grants you - see RELINKING below.

WHERE THIS IS PUBLISHED

The current version of this archive, together with the full third-party notices,
is published at:

  https://noirsonance.com/legal/open-source/quick-audio-edit/

That page is the permanent entry point. If you received this archive some other
way, that is where to check for the copy matching your version of the
application.

================================================================
COMPONENTS
================================================================

FFmpeg 7.1.5 - LGPL-2.1-or-later
  file     ffmpeg-7.1.5.tar.xz
  upstream https://ffmpeg.org/releases/ffmpeg-7.1.5.tar.xz
  sha256   de668509caf9e35e3cd162473441fdb29538c6d96ed080292b3cf9e6fc5d558f

LAME 3.101 (libmp3lame) - LGPL-2.0-or-later
  file     lame-3.101.tar.gz
  upstream https://downloads.sourceforge.net/project/lame/lame/3.101/lame-3.101.tar.gz
  sha256   7578af6eebd578b2bd64e468fac4ae1f03670a7e028166e67f855674b9b6aeac

  Built encoder-only (--disable-decoder). The old bundled mpglib decoder is not
  compiled and not linked; LAME 3.101 ships no decoder sources at all.

libogg, libvorbis, libopus - BSD-3-Clause
  Permissively licensed, with no corresponding-source obligation. Their required
  copyright notices are in licences/Xiph-BSD-3-Clause.txt and in the
  application's own Third-Party Notices. Sources:
    https://downloads.xiph.org/releases/ogg/
    https://downloads.xiph.org/releases/vorbis/
    https://downloads.xiph.org/releases/opus/

Resulting binary sha256, per platform:

  Windows x64    865D49192D551AC171E6E14467B3E27D31F641D2017E13D97EA231250F06B47A
  macOS x86_64   d98fc11a64f303362841455c96b74623975bac8df97d690f2c813e6b1e1ebc3d
  macOS arm64    a50e1253744e934f05014f4c1245dcdb317e0dfccbc0effdc45eec13af8fef44

================================================================
LICENCE POSITION
================================================================

Configured with no --enable-gpl, no --enable-nonfree and no --enable-version3.
The build is therefore LGPL-2.1-or-later.

FFmpeg is executed by Quick Audio Edit as a SEPARATE PROCESS. It is never linked
into the application, statically or dynamically, and no FFmpeg header is
included in it.

================================================================
CODEC SET
================================================================

Built from --disable-everything with only what the product uses enabled. No
AAC, no WMA, and no video codecs of any kind.

  decoders  pcm_* (12 variants), mp3, mp3float, flac, vorbis, libvorbis,
            opus, libopus
  encoders  pcm_s16le, pcm_f32le, flac, libmp3lame, libvorbis, libopus
  demuxers  wav, aiff, mp3, flac, ogg
  muxers    wav, mp3, flac, ogg, opus, null
  filters   aresample, aformat, anull, ebur128, volume, atrim, asetpts
  protocols file, pipe

The full configure line is in ffmpeg-qae.sh and is reproduced below.

================================================================
BUILDING
================================================================

Two platforms are built from this archive. The codec set, the licence position
and the configure flags are identical on both; only the toolchain differs.

WINDOWS  -  ffmpeg-qae.sh  (+ lame-qae.sh)
  Toolchain: MSYS2 MINGW64, gcc 16.2.0, nasm 3.02.

  1. bash lame-qae.sh          builds the encoder-only libmp3lame
  2. bash ffmpeg-qae.sh        builds ffmpeg.exe against it

  Produces a statically linked ffmpeg.exe for win-x64.

MACOS  -  ffmpeg-qae-macos.sh
  Toolchain: Xcode Command Line Tools (clang), plus nasm and pkg-config. Those
  two may come from Homebrew or be built from source; neither is linked into the
  result, and the script refuses a binary that references Homebrew paths.

  bash ffmpeg-qae-macos.sh x86_64     Intel
  bash ffmpeg-qae-macos.sh arm64      Apple Silicon

  Unlike the Windows script, this one also builds libogg, libvorbis, libopus and
  LAME from upstream source rather than taking them from a package manager, so
  the result does not depend on the build machine's state. The versions it pins
  are the ones in ffmpeg-pinned.json.

  Passing an architecture that differs from the build machine cross-compiles.
  The script audits the configuration statically in that case and refuses to
  claim the binary was verified, because it cannot be executed to check.

ffmpeg-pinned.json records the expected hashes and the forbidden-codec list. The
application's own build refuses to proceed if the binary does not match it.

================================================================
RELINKING
================================================================

The LGPL requires that you be able to use the application with your own modified
version of the LGPL components. Here that is unusually simple, because FFmpeg is
a separate executable rather than a linked library:

  1. Build ffmpeg from this archive, with whatever modifications you like.
  2. Quick Audio Edit unpacks its copy of FFmpeg into a temporary directory on
     first use:
        Windows  %TEMP%\NoirSonance\QuickAudioEdit\tools\
        macOS    $TMPDIR/NoirSonance/QuickAudioEdit/tools/
     Replace the ffmpeg binary there with yours.

No relinking of Quick Audio Edit itself is needed or possible, because nothing
is linked to begin with.

Note on static linkage: libmp3lame, libvorbis, libopus and libogg are STATICALLY
linked into the ffmpeg binary. That is why the whole of that binary's source and
build recipe are provided here rather than the LGPL components alone - rebuilding
ffmpeg from this archive is what lets you substitute a modified LAME. The
application ships as a single executable, so an ffmpeg depending on external
DLLs would not run on a customer machine.

================================================================
CONFIGURE LINE AS BUILT
================================================================

--- Windows (ffmpeg-qae.sh) ---

./configure \
    --prefix="$OUT_DIR" \
    --pkg-config-flags=--static \
    --extra-ldflags='-static -static-libgcc -static-libstdc++' \
    --disable-everything \
    --disable-gpl \
    --disable-nonfree \
    --disable-autodetect \
    --disable-doc \
    --disable-debug \
    --disable-network \
    --disable-avdevice \
    --disable-swscale \
    --disable-postproc \
    --disable-sdl2 \
    --disable-vaapi \
    --disable-vdpau \
    --disable-d3d11va \
    --disable-dxva2 \
    --enable-libmp3lame \
    --enable-libvorbis \
    --enable-libopus \
    --enable-decoder=pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be,pcm_s32le,pcm_s32be,pcm_u8,pcm_s8,pcm_f32le,pcm_f32be,pcm_f64le,pcm_f64be,mp3,mp3float,flac,vorbis,libvorbis,opus,libopus \
    --enable-encoder=pcm_s16le,pcm_f32le,flac,libmp3lame,libvorbis,libopus \
    --enable-demuxer=wav,aiff,mp3,flac,ogg \
    --enable-muxer=wav,mp3,flac,ogg,opus,null \
    --enable-parser=mpegaudio,flac,vorbis,opus \
    --enable-protocol=file,pipe \
    --enable-filter=aresample,aformat,anull,ebur128,volume,atrim,asetpts \
    --enable-swresample \
    --enable-small

--- macOS (ffmpeg-qae-macos.sh) ---

./configure \
    --prefix="$OUT" \
    --arch="$ARCH" \
    ${CROSS_FLAGS:+$CROSS_FLAGS} \
    --target-os=darwin \
    --pkg-config-flags=--static \
    --extra-cflags="$CFLAGS -I$DEPS/include" \
    --extra-ldflags="$LDFLAGS -L$DEPS/lib" \
    --disable-everything \
    --disable-gpl \
    --disable-nonfree \
    --disable-autodetect \
    --disable-doc \
    --disable-debug \
    --disable-network \
    --disable-avdevice \
    --disable-swscale \
    --disable-postproc \
    --disable-sdl2 \
    --disable-videotoolbox \
    --disable-audiotoolbox \
    --disable-coreimage \
    --enable-libmp3lame \
    --enable-libvorbis \
    --enable-libopus \
    --enable-decoder=pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be,pcm_s32le,pcm_s32be,pcm_u8,pcm_s8,pcm_f32le,pcm_f32be,pcm_f64le,pcm_f64be,mp3,mp3float,flac,vorbis,libvorbis,opus,libopus \
    --enable-encoder=pcm_s16le,pcm_f32le,flac,libmp3lame,libvorbis,libopus \
    --enable-demuxer=wav,aiff,mp3,flac,ogg \
    --enable-muxer=wav,mp3,flac,ogg,opus,null \
    --enable-parser=mpegaudio,flac,vorbis,opus \
    --enable-protocol=file,pipe \
    --enable-filter=aresample,aformat,anull,ebur128,volume,atrim,asetpts \
    --enable-swresample \
    --enable-small

================================================================

Generated 2026-08-22 02:18 UTC
(c) NoirSonance - this README only. The included sources are the property of
their respective authors and are distributed under the licences above.
