Skip to content

Releases: kevinabouhanna/speaker-keeper

v1.7.0

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 02 Oct 01:05

Added

  • Meetings and voice chat no longer switch your speaker off. When Google Meet, Zoom,
    Teams, Discord or a game opens a speaker's microphone, the speaker drops into call mode,
    and in call mode it switches itself off about 15 minutes later, whatever is playing.
    Speaker Keeper's silence cannot reach it there. Windows makes a speaker's microphone
    the one these apps use every time the speaker connects, so that was happening to anyone
    with a speaker on their desk. Speaker Keeper now moves that choice straight back to your
    other microphone, for both Windows' default microphone (what browser meetings use) and
    its calls microphone (what Teams, Zoom and Discord use). Nothing is disabled: pick the
    speaker's microphone in an app and you still get it. On for everyone; Settings →
    Speakers → Keep speakers out of calls turns it off.
  • A notification says so when an app does use your speaker as a microphone anyway,
    by name ("Google Chrome is using your speaker as a microphone"), with a click through
    to the setting that stops it for good.

Changed

  • The Turn off speaker microphones setting is described as what it now is: the
    certain way, for anyone who never wants a speaker used as a microphone, since the new
    setting already covers the usual case.
  • The "keeps switching off" warning says it in plain words rather than "call mode",
    and points at the setting on the same page.
  • The notes on speakers that switch themselves off are up to date with 1.6.0.
    docs/INVESTIGATION-auto-off.md now says where things stand and lists what looks like
    a bug but is not: no permission prompt on PCs set to approve admin requests silently,
    every paired speaker losing its microphone, and dictation apps or terminal chimes
    counting as sound.

Fixed

  • The activity log no longer resets itself when a speaker disconnects. Windows gives
    every part of the app the same audio-device handle, and the keep-alive stream was
    closing it for everyone when it stopped, so the log lost track of every device and
    then reported speakers that had been connected all along as newly connected. On a PC
    holding two speakers it could also make the second one's keep-alive fail to start and
    retry. Both came from the same mistake, now gone.

v1.6.0

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 01 Oct 14:57

Added

  • You can stop apps from using your speaker as a microphone. Settings → Speakers →
    Turn off speaker microphones. Teams, Discord and game voice chat open a Bluetooth
    speaker's microphone whenever Windows offers it, and Windows offers it every time the
    speaker connects. That switches the speaker to call-quality sound, and on some
    speakers it is why they switch off mid-game. With this on, the speaker is only ever a
    speaker and your other microphones are used. It stays on after you re-pair the
    speaker, with nothing for you to redo. Only speakers are affected; earbuds and
    headsets keep their microphones. Off unless you turn it on, and uninstalling gives
    every microphone back.
  • The log now says what your speaker was doing, not just what Speaker Keeper did.
    When a speaker switched off, the log could say when but never why, so every report
    started with guessing. It now records which apps were playing to which speaker and how
    loudly, every time an app opens a speaker's microphone, the default microphone for
    calls, and volume changes. It writes a five-minute summary for each speaker, and a
    line at the moment one disconnects: how long it had been connected, when it last had
    sound and from what, and whether it was in call mode. It also notes when the display
    turns off or on and when the PC is locked, so a speaker going quiet at the same moment
    as the screen is plain to see.
  • The log keeps more history: 4 MB and three older files, where it was 1 MB and one.

Changed

  • The "keeps disconnecting" warning names the real cause when it can. If a game or
    voice chat had the speaker's microphone open, it now says so and how to stop it.
    If the speaker switched off a round number of minutes after its last sound, it says
    that is the speaker's own timer. Before, it always blamed the Bluetooth connection.

Fixed

  • A disabled Bluetooth adapter is no longer counted as a second adapter. It was
    reported as a "driver problem" and the warning told you to remove it, when switching
    it off had already dealt with it.
  • A speaker powering off is no longer logged as letting it sleep. For a moment
    the speaker's output outlives its Bluetooth device, and that moment read as a
    decision the app made. It is now counted as the disconnection it is, and every
    letting … sleep line gives a reason.

v1.5.1

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 21 Sep 23:32

Fixed

  • A disconnection is no longer sometimes recorded as a decision. When a speaker
    vanished in the last half-second before the app's five-second check, it was the check
    rather than the audio stream that ended things, so the log read letting <speaker> sleep as though Speaker Keeper had chosen to stop, and the disconnection never reached
    the count that decides whether to warn you. On a speaker dropping once or twice an hour
    that was the difference between being told what was wrong and being left to guess.
  • A speaker that drops steadily rather than rapidly is now spotted too. The warning
    needed three disconnections inside one hour, which never triggers for a speaker that
    drops every couple of hours all evening. Four in six hours now counts as well.
  • Two speakers of the same model can be told apart. A stereo pair is two identical
    speakers, so both announce the same name, and Settings showed two identical rows with a
    switch each and no way to know which was which. The last four digits of the Bluetooth
    address now follow the name, and only when there is a clash, so a single speaker still
    reads as itself.

v1.5.0

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 21 Sep 09:27

Added

  • Speaker Keeper now tells you when the problem is not Speaker Keeper. A Bluetooth
    speaker that keeps dropping its connection looks exactly like a speaker idling off: it
    goes quiet, and the app meant to prevent that gets the blame. When a speaker disconnects
    three or more times in an hour, the app now says so by name and with a count, and names
    the most likely cause on your machine: a second Bluetooth adapter, which Windows will
    not use (it only ever drives one, chosen at startup), or an adapter whose driver has
    failed. Settings carries the same text for as long as it is true. Nothing is changed for
    you: removing a Bluetooth adapter can take a mouse or keyboard with it.
  • Settings lists your Bluetooth adapters when there is more than one, with the driver
    problem code for any that is not working.

Fixed

  • A speaker paired to two Bluetooth adapters is no longer held awake twice. It can
    publish a separate output on each adapter, and both were being kept alive. The one
    Windows is actually playing through wins.
  • A stream that cannot start is no longer retried every five seconds forever. If
    another app holds the output exclusively, or a driver refuses it, the wait now doubles
    from 5 seconds up to 5 minutes and resets the moment the stream comes up. It was
    rebuilding the stream and writing a log line every tick, indefinitely.
  • Speakers on an unrecognised Bluetooth stack are kept awake again. 1.4.0 identified
    a speaker's music channel by its position in the device tree, and anything that did not
    match was skipped as if it were the call channel. A speaker that publishes no channel
    the app recognises is now kept awake rather than silently ignored, while the call
    channel is still never touched.
  • Three error descriptions in the log were wrong. 0x88890001 and 0x8889000A were
    labelled as exclusive-mode and audio-service failures; they are actually
    NOT_INITIALIZED and another app holding the output exclusively, and the audio service
    one is 0x88890010.
  • The status no longer says "Idle" while speakers are being kept awake. With more than
    one speaker, the tray panel and the log both reported on the current output alone, so
    the app looked idle while it was holding another speaker awake in the background.

v1.4.0

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 21 Sep 08:40

Added

  • Every speaker you own is kept awake, not just the one you are listening to. Until
    now only the current output was held, so the other speaker in the room went to sleep
    and switching to it brought back exactly the delay this app exists to remove. Each
    connected speaker you have switched on is now held awake at the same time, so moving
    between them is instant in both directions.
  • Speakers you have paired but never connected are listed in Settings, so a second
    speaker can be switched on before the first time you use it rather than after.

Fixed

  • Earbuds and headsets really are left alone now. The app said it only worked on
    speakers, and then held a silent stream open on any Bluetooth output that became the
    default, headphones included, which flattens them in a bag. It now asks the device what
    it is: speakers are kept awake, earbuds and headsets are left to sleep, and the switch
    in Settings still overrides it for a speaker that reports itself wrongly.
  • A speaker's call channel is never held awake. One Bluetooth speaker publishes two
    outputs: the stereo one you listen through and a mono hands-free one for calls. Only
    the first is held now, so nothing the app does can put a speaker into call mode.
  • The log says what actually happened. A Bluetooth output being torn down underneath
    a running stream was recorded as a bare silent stream failed: Not implemented, with
    no error code and no way to tell a speaker disconnecting apart from a driver refusing
    the stream. Lines now name the speaker and carry the real code, with the common ones
    spelled out, so the speaker disconnected reads as what it is.

v1.3.2

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 19 Sep 21:10

Changed

  • The battery threshold in Settings now says what it is. The Warn below row was a
    number with no icon and no explanation, sitting under the low-battery switch without
    saying it belonged to it. It has a battery icon and a line telling you what the number
    does.
  • The project link on the About page uses the app's own speaker icon rather than a
    Bluetooth one, matching everywhere else that stands for Speaker Keeper itself.

v1.3.1

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 19 Sep 19:18

Fixed

  • The leftover silent.wav is now cleared from machines that update in the
    background.
    1.3.0 stopped using the file and the installer deletes it, but a
    background update replaces only the program itself, so anyone who updated overnight
    was left with 3.4 MB of dead weight in their install folder and no way to be rid of it
    short of reinstalling. The updater now tidies the install folder on every check, and
    the installer does the same, so this and the .old copies left behind by previous
    updates clear themselves.

v1.3.0

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 19 Sep 18:53

Added

  • Click the tray icon once and a panel opens. It shows which speaker you are on,
    whether it is being held awake, and its battery, with a switch to turn Speaker Keeper
    off for that speaker. It sits above the tray like the volume and brightness panels do,
    and closes as soon as you click away.

Changed

  • Speaker Keeper no longer shows up in Windows' own audio controls. It used to
    appear as a media card with play, pause, next and previous buttons (buttons for a
    track that does not exist) and as a slider in the volume mixer. Pressing pause there
    actually stopped the keep-alive until the app noticed and restarted it. Both are gone:
    the app now feeds silence straight to the speaker instead of pretending to be a music
    player, so Windows has nothing to show.
  • Settings has been rebuilt to look like Windows 11. Grouped pages instead of one
    dialog of checkboxes, with a line under each setting explaining what it actually does.
  • The whole app follows your Windows theme. Light or dark, plus your accent colour,
    across the panel, Settings, the log window and the installer. It changes over the
    moment you switch Windows, without being restarted.
  • The installer looks like the rest of the app now, rather than a grey dialog from
    2001. Same wording and the same steps; nothing about what it installs has changed.
  • Double-clicking the tray icon no longer does anything special. One click opens the
    panel instead. The right-click menu is now just Settings and Quit, because everything
    it used to list is on the panel.

Removed

  • silent.wav is gone. The app makes its own silence now, so the 3.4 MB file the
    installer used to write is no longer needed. Running the installer again removes it.
    A background update will not: those replace only the program itself, so a machine that
    updated overnight keeps the stray file until it is reinstalled.

v1.2.1 - Blue icon

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 19 Sep 17:40

The icon is blue now.

Speaker Keeper is a Bluetooth app, so it may as well look like one. The tray icon, the Start Menu shortcut, the installer and the Settings window all pick up the new one.

Nothing about how it behaves has changed. If you already have 1.2.0 with automatic updates on, this will install itself overnight and you will see the new icon after that.

Fixed

  • Git was rewriting line endings inside the icon and logo files, which corrupted them. Added .gitattributes so images are treated as binary.

Install: download Install.exe, double-click, approve the prompt. Windows will show a SmartScreen warning because these binaries aren't code-signed; click More info then Run anyway.

Full changelog: https://github.com/kevinabouhanna/speaker-keeper/blob/main/CHANGELOG.md

v1.2.0 - Updates you can actually turn on

Choose a tag to compare

@kevinabouhanna kevinabouhanna released this 19 Sep 17:15

You can now turn on automatic updates while installing.

Previously the only way to enable updates was in Settings, which needs a separate Windows permission prompt. Setup already has permission, so it costs nothing there - and if that prompt was dismissed, the checkbox quietly reset itself, which looked exactly like the setting refusing to stick.

Added

  • Setup offers "Install updates automatically", ticked by default. It checks once a day in the background. Install.exe /NOAUTOUPDATE opts out for managed deployments.
  • Settings shows which version you are running, with a What's new link to that version's release notes.
  • A notification when an update has been installed - once, on the first launch after the version changes, opening the release notes when clicked. Updates land overnight with no prompt, so this is how you find out the app changed.

Fixed

  • Dismissing the Windows permission prompt when toggling automatic updates now explains that nothing was changed, instead of silently resetting the checkbox.
  • The icon and logo files were being corrupted by Git's line-ending conversion. Added .gitattributes and restored them.

For maintainers

  • verify.ps1 checks a build before release: versions matching across all three exes and the manifests, Install.exe carrying exactly the binaries beside it, silent.wav generation still byte-identical, and a changelog entry for the version.
  • The release workflow re-checks the published assets and refuses a manifest whose version doesn't match the binaries - a mismatch made every installed copy reinstall the same build nightly, forever.

Install: download Install.exe, double-click, approve the prompt. Windows will show a SmartScreen warning because these binaries aren't code-signed; click More info -> Run anyway.

Full changelog: https://github.com/kevinabouhanna/speaker-keeper/blob/main/CHANGELOG.md