Quill Radio 2.0 -- Release
Notes
Quill Radio 2.0 is about one thing done thoroughly: recordings you
can trust. Version 1.1.0 rebuilt the sound -- a new playback engine,
every stream format, live rewind, richer Sound Enhancements. 2.0 turns
that same care on the recorder, closing a reported round of recording
bugs and adding the one piece that was always missing: a recording that
survives a restart. If you schedule shows, leave long recordings running
unattended, or have ever come back to find a capture cut short or gone
entirely, this release is for you.
It also widens the net for finding stations: iHeart and
TuneIn now join the search, so two of the biggest directories
on the internet are searchable and playable right inside Browse
Stations. More on that below.
As always, everything below also lands in QUILL itself. Quill Radio
and QUILL share one codebase and one data store, so these fixes arrive
in both at once -- nothing here is vendored into the Quill Radio
wrapper.
Update 2.2.0
Quill Radio 2.2.0 collects everything since 2.1.2 -- a round of fixes
and small conveniences straight from your testing, and a piece many of
you have asked for: a proper backup you can carry to a new device.
- The menu bar stays put, and windows work the way you
expect. Until now, opening Browse Stations, Search Stations,
Manage Favorites, Schedule Recording, or the Weather Center could make
the menu bar seem to vanish -- because those surfaces were dialogs, and
a dialog cannot carry a menu bar -- and the modal ones shut you out of
the main window entirely. They are now proper windows:
each carries the full menu bar (so the menus are always one Alt away,
wherever you are), and they no longer lock the main window. You can keep
more than one open at a time. A new Window menu lists
every open window, numbered in the order you opened them, and you move
between them with Ctrl+Tab (next) and
Ctrl+Shift+Tab (previous), or jump straight to one with
Ctrl+1 through Ctrl+9 -- the same
window keys you already know from other apps. Each window opens only
when you ask for it, and closing one puts you back in the window you
came from, announced as you arrive. This started from a report that the
menu bar disappeared in certain screens; the fix was to change how the
screens themselves work.
- Back up and restore -- take your radio with you.
Two new items on the Station menu, Back Up Stations and
Settings... and Restore from Backup..., save
your favorites, settings, wake timer, and recording schedule -- and, if
you want, your recorded audio -- into a single
.qrbackup
file. Copy it to a new PC (or your new BrailleNote), restore, and
everything is back. Made for exactly the moment you switch machines or
reinstall Windows.
- Favorites keep a rolling backup, automatically.
Every change to your favorites now snapshots the previous version aside
(the last 20 are kept), so a bad edit or an accidental delete can be
recovered.
- Ctrl+T shows the now-playing text, not just speaks
it. "What's Playing?" now opens a small window with the current
title and artist you can arrow through character by character and copy
-- to note a song's spelling or paste it into a search. It still speaks
the title, and falls back to speaking when a stream hasn't sent its
track info yet. The window was mentioned in the notes but nothing
actually opened it; now Ctrl+T does.
- Details for any favorite. Bring up a favorite's
context menu (Applications key or Shift+F10) and choose Station
Details... for the same reviewable readout the search results
give -- source, stream, format, country.
- Moving favorites up and down never scrambles a list you
arranged by hand. From a sorted A-Z/Z-A view, Alt+Shift+Up/Down
switches to manual order -- showing you your saved order (Quill Radio
says "Switched to manual order") -- and moves the station within it. It
no longer replaces your stored order with the alphabetical view first,
which could silently wipe out a carefully hand-arranged list you had no
way to recover. Your order is kept; only the sort setting changes.
- Move a favorite in one step with Mark and Move.
Instead of nudging a station up or down thirty times, open a favorite's
context menu (Applications key or Shift+F10) and choose Mark for
Move; then go to wherever you want it, open the menu again, and
pick Move Marked Above or Move Marked
Below. The marked station jumps straight there (adopting that
spot's folder). It works on the main favorites list and in the Favorites
Manager.
- Exit means exit. If you set Radio to minimize to
the tray on close, choosing Exit -- even from the tray menu -- used to
just hide it again, with no way to quit short of a reboot. Exit now
genuinely closes the app.
- The menus are there the moment you open the app.
Pressing Alt right after launch used to bring up the window's own
Minimize/Maximize menu instead of Radio's menu bar. Focus now lands
inside the window immediately, so Alt opens the app menu from the first
keystroke.
- NOAA weather states that say "9 stations" now have nine
stations. A state under Weather / NOAA could show a count and
then expand to nothing; the count and the list were reading from two
different places. They read from the same directory now, so what you see
is what you get.
- Weather goes worldwide. The Weather menu used to
find and forecast only US places. Location search now resolves anywhere
in the world, and a non-US location gets a real forecast -- current
conditions and up to a 16-day outlook, with air quality -- from the free
Open-Meteo service, while US places keep the authoritative National
Weather Service report. (Local watches and warnings are still US-only;
worldwide reports say so.)
- Browse keeps your place. Expanding a country or
genre in Browse Stations no longer jerks your cursor down into the
station list; it stays on the folder you opened (you still hear its
count), so you move into the list when you choose to.
- "Install and restart" doesn't hang anymore.
One-click updating could stall behind a stray, focus-stealing terminal
window the updater spawned; it now runs fully hidden and completes.
- "Radio Browser," spelled out -- and browsable by
genre. The Search source picker now says Radio
Browser in two words (a screen reader could make the old
run-together spelling sound like the option was gone), and Browse
Stations has a new Radio Browser (by Genre) branch so
you can wander that huge directory by genre instead of only searching
it.
- A new View menu -- a readable status bar, sort, expand, and
text size. A View menu joins the menu bar,
gathering several conveniences in one place. Show Station
Details turns the read-only details box in Browse and Search
Stations on or off -- hide it if you would rather not tab past it, and
every station surface honors your choice. Show Status
Bar adds a strip along the bottom of the main window that
always shows what is going on: what is playing, the volume (and whether
Volume Boost is on), whether a recording is running, the sleep timer,
how many favorites you have, and the time. Press F6 to
land in it, arrow left and right across the cells (Home and End jump to
the ends), and press Enter on a cell to act on it --
Enter on Now Playing opens the What's Playing window, Enter on Volume
mutes, Enter on Recording starts or stops recording, Enter on the Sleep
timer opens the timer. Right-click (or Applications key) any cell for
more: play/pause, mute, volume up and down, Volume Boost, stop all
recordings. Escape (or a second F6) hands focus straight back to your
favorites. The menu also brings Sort Favorites
(Ascending, Descending, or Unsorted) up from Preferences, one keystroke
away and showing which order you are in; Expand All
Folders / Collapse All Folders to open or
close your whole favorites tree at once; and Text Size
(Normal, Large, or Larger) to make everything on the main window -- the
favorites list, the buttons, the now-playing line, and the status bar --
bigger for easier reading. Every toggle and choice here is remembered
between sessions.
- The Move buttons in Manage Favorites work from the
alphabetical view. In the Manage Favorites window, Move Up,
Move Down, Move Above, and Move Below did nothing unless your list was
already in manual order -- so from the normal A-Z view they were dead.
They now do what the main list does: the first move switches to manual
order (revealing your saved order) and moves the station within it,
without overwriting your stored order with the alphabetical view -- so a
hand-arranged list is never lost.
- Quill Radio keeps your computer awake while it
plays. Windows going to sleep in the middle of a long listen --
or worse, during a scheduled recording -- would cut the audio off. Quill
Radio now asks Windows to stay awake while a station is playing or a
recording is running, so it keeps going. Your screen can still turn off
to save power; only the computer's sleep is held off, and only while
something is actually playing or recording. It is on by default; a new
checkbox in Station > Preferences (Ctrl+,), Keep the computer
awake while playing or recording, turns it off if you would
rather Quill Radio never touch your power settings.
- The Stop button responds to Alt+S again. The one
Stop/Play button was advertising Alt+S (and Alt+P), but those are the
shortcuts for the Station and Playback menus, so pressing them opened a
menu instead of stopping the radio -- the button never fired. The button
no longer claims those clashing shortcuts, and the reliable transport
key, Ctrl+P (Play, and Stop while playing), works from
anywhere in the window. Handy when a station is louder than your screen
reader and you just want silence fast.
- New Folder works with Ctrl+Shift+E from your
favorites. The New Folder shortcut was listed but did nothing
when your cursor was in the favorites tree; it now works everywhere in
the window.
- Add TuneIn stations to your Favorites straight from
Browse. TuneIn stations only work out their stream when you
play them, so Add to Favorites used to be missing for them in Browse
Stations. Now Add to Favorites (from the context menu or the button)
fetches the stream and saves the station, just like every other
source.
- Adding a custom station shows it in your favorites right
away. Adding a custom station saved it but did not refresh the
list, so it looked as if nothing had happened. The list now updates
immediately.
- Remove all your favorites in one step. The
Favorites Manager gains a Remove All... button that
clears every favorite at once (your folders stay) after a clear
confirmation -- and because favorites keep a rolling backup, you can
undo it if you change your mind.
- New stations show up after an in-place update.
After updating from an older version, Browse Stations could keep showing
the old set of categories and stations because the previous version's
directory cache had not expired yet. It now recognizes when the app has
shipped a newer directory and uses that, so new categories (like iHeart
or Radio Reading Services) appear right after you update -- while a
directory you refreshed yourself by hand is still respected.
- The radio really stops when you exit. On the
playback engine that powers pausing and rewinding, audio could keep
going for a moment after the app closed if it shut down in an unusual
order; it is now stopped firmly on exit. (Closing to the tray with
Ctrl+W or the X still keeps playing on purpose -- that is what the tray
is for; use Exit to quit.)
- Schedule a recording in hours and minutes. Setting
how long to record used to be a single minutes box, so a long show meant
doing the arithmetic ("180 minutes"). You now set Hours
and Minutes separately -- three hours is just "3" and
"0". Your existing schedules are unchanged.
- Change the volume with a slider you can Tab to. As
well as Ctrl+Up/Down and the status bar, the main window now has a
Volume slider right in the Tab order: tab to it while a
station is playing and use the arrow keys to turn it up or down. However
you change the volume, all three stay in agreement.
- Song titles show up for more stations. A few
stations -- some HLS streams and a handful of others another app still
shows a song for -- were leaving the now-playing line (and What's
Playing / Ctrl+T) blank, because they tuck the current track into the
player's metadata rather than its main title field. Quill Radio now
reads that too, so the song and artist appear and are spoken where they
used to be missing.
Update 2.1.2
Quill Radio 2.1.2 is a quick fix-up for three things you reported --
two of them from 2.1.1 itself. Thank you for the fast, specific
feedback; it is exactly what makes these turnarounds possible.
- One-click updating works again. If you chose
Install and restart on 2.1.1, it could fail with a
"decompression bomb" error and send you off to update by hand. The
update installer carries a safety guard against absurdly large archives,
sized for documents -- but a whole Quill Radio (Python, ffmpeg, and the
mpv engine, all bundled) legitimately unpacks past that limit, so the
guard was turning away the real update. It now allows a full app-sized
download while still refusing a genuinely abnormal one, so Install and
restart applies the update and relaunches, keeping your favorites,
recordings, and settings.
- Favorites keep the order you gave them. A few of
you updated and found a lovingly hand-sorted list snapped into A-Z on
the next launch -- understandably frustrating after sorting thirty-plus
stations by hand. The sort-order setting introduced in 2.0.2 was reading
an older, orderless favorites file as "Ascending." Quill Radio now reads
a pre-2.0.2 file as Unsorted, so your order carries
across the upgrade untouched. And if an earlier update already
rearranged you, the original order is still there underneath: choose
Unsorted in Preferences and it comes right back.
- A shared Speech Hub crash is fixed and
regression-locked. Opening Dictation (Offline) in the Speech
Hub could crash on an older build; it was already fixed, and it now has
a test standing guard so it cannot come back.
Update 2.1.1
Quill Radio 2.1.1 is about weather radio done properly, and about a
kind of station that matters enormously to this community and has never
been easy to find: the radio reading service.
- NOAA Weather Radio, from an authoritative
directory. The Weather / NOAA branch in Browse
Stations no longer guesses at stations by searching for a name; it is
powered by the WeatherIndex directory of actual NWR
transmitters. Open it and you get the states; open a state and you get
its real transmitters, each named with its call sign and frequency --
"KHB36 162.550 MHz Manassas" -- and Enter plays the best available
internet re-stream. Favorite them, record them, schedule them like any
other station.
- Search speaks weather-radio. Type a SAME
code (the 6-digit county code your weather-alert radio uses), a
call sign, or a "County, ST" into
station search and the authoritative directory answers with exact
transmitters, blended right into the normal results.
- Your local transmitter, one keypress.
Weather menu > Listen to your Local NOAA Weather
Radio uses the Weather location you already saved -- its county
first, then the nearest covering transmitter by coordinates -- and just
plays it. No location set? It tells you how to add one.
- It works offline, and it outlives the API. Every
NOAA feature stands on three tiers: the live directory, a cache of the
last successful pull, and a complete bundled snapshot -- 1,035
transmitters across every state and territory -- inside the app
itself. A machine with no internet still browses, searches, and finds
your local transmitter. Weather menu > Update NOAA Weather
Radio Directory pulls the newest data whenever you ask; the
bundled snapshot is never overwritten, so there is always a floor.
- Radio Reading Services -- the human newspaper. For
decades, radio reading services have had volunteers read newspapers,
magazines, and grocery ads aloud over closed-circuit radio for people
who are blind or print-disabled -- and finding their internet streams
has always been word-of-mouth. A new Radio Reading
Services branch in Browse Stations gathers them: WRBH 88.3
Reading Radio in New Orleans, Sun Sounds of Arizona, CRIS Radio and the
Connecticut Radio Information System, the KPBS and WKAR reading
services, ACB Media 1-5, the NFB Radio Network, Voice Corps, and more.
20 vetted services are bundled so the branch is never
empty, even offline; they show up in station Search by
name, tag, or state; and Station > Update Radio Reading
Services refreshes the list on demand from the community
RadioBrowser directory. Play them, favorite them, record your evening
paper.
Both directories follow the same rules as every other source: live
pulls are off in Safe Mode, every network call is in the egress audit,
and a bundled snapshot keeps the feature honest when the network is not
there.
Two more from live feedback:
- iHeart, now something you can browse. iHeart was
searchable but you could not wander it. The Browse Stations tree gains
an iHeart branch that opens into
genres, and each genre into an A-Z
sub-directory, all loading lazily as you open them -- so you can flip to
Country, then to the letter K, then play, without typing a thing. (The
XML sitemap iHeart search uses carries no genre, so browse quietly uses
iHeart's free, keyless content API instead; each station arrives with
its stream already attached, so a genre opens in a single request.)
- The Source filter stops hiding SomaFM stations. A
SomaFM channel that RadioBrowser also lists was folded into one search
result, and picking SomaFM in the Source dropdown could
then hide it. Search now remembers every directory a merged station came
from, so "Groove Salad" answers to the SomaFM, RadioBrowser, and TuneIn
filters alike, while the result row still names the directory it played
from.
Update 2.1.0
Quill Radio 2.1.0 adds a top-level Weather menu, a
whole new way to browse stations, one-click
updating, and a round of fixes from live feedback -- all in the
shared quill package, so QUILL gets them too.
A whole new Weather menu -- official weather as
delightful, spoken text. A top-level Weather
menu on free, no-account sources: the National Weather
Service for conditions, the forecast, and alerts;
Open-Meteo for the extended outlook and air quality;
and OpenStreetMap for search. Search a
location by ZIP code, city, county, or address and pick the right match
from a list -- so the several Springfields are easy to tell apart --
then open Weather Now. It reads, as plain
arrow-navigable and copyable text:
- any active watches, warnings, and advisories first,
with the full official instructions;
- a complete, warm paragraph of current conditions --
temperature, feels-like, sky, humidity, dew point, wind and gusts, cloud
cover, barometric pressure, visibility, chance of precipitation,
sunrise, sunset, the ultraviolet index, and air quality;
- the National Weather Service forecast, period by
period; and
- an extended daily outlook of up to 16
days (10 by default), further than the Weather Service's own
7-day forecast.
Every value is written out for speech -- "the wind is blowing from
the west-northwest at 5 miles per hour", not "WNW 5 mph" -- and
observation times show in the location's own time zone. Each
current-conditions detail can be turned on or off in Settings.
Manage places with Add Location and Remove
Location (or the Delete key). Quick Weather
speaks a one-line summary without opening a window, and Active
Alerts jumps straight to the alerts. Text only for now --
spoken weather with its own voices comes in a later phase -- and, as the
app says, it is an additional accessible tool, never a replacement for a
NOAA Weather Radio, Wireless Emergency Alerts, or local emergency
instructions.
A whole new way to browse -- one unified tree of every
source. You asked (thanks, Kelly) to be able to pick a source
like SomaFM and just see its stations, without typing a search first. So
Browse Stations is now its own dedicated, search-free
window: a single tree whose branches are the sources. You expand a
branch and its stations appear on the spot; press Enter
to play the highlighted one, and Shift+F10 (or
right-click) opens a full menu -- Play/Stop, Add or Remove Favorite,
Copy the stream link, Open the station's website -- with a
Refresh to re-pull a source. It reads like a media
library you wander, not a form you fill in. Search
Stations... stays a separate window with the familiar
name/tag/country box. The branches are:
- Favorites, at the very top -- your own saved
folders and streams, built instantly, so you can jump straight to one.
Right-click a source folder for Add All Stations to
Favorites, and note the Play button reads
"Stop" while the highlighted station is playing.
- Popular Stations -- the most-listened stations on
the internet right now (from the community RadioBrowser directory), a
great "what's good?" start with nothing to type.
- Weather / NOAA -- NOAA Weather Radio
(NWR) internet re-streams: the actual transmitters, named with
their call sign and frequency ("NOAA Weather Radio KHB36 Manassas
162.550 MHz"). NOAA has no audio API of its own (NWR is over-air VHF),
so these are the online re-streams listeners share; Quill Radio finds
the genuine ones by name.
- ACB Media and NFB Radio -- the
bundled accessibility-community streams, ready to play.
- SomaFM -- SomaFM's whole channel lineup at once, so
you can arrow through every channel instead of guessing a name.
- TuneIn -- TuneIn's own directory as a real
folder tree: Music, Talk, Sports, Local Radio, By
Location, By Language, and more. Open a folder to reveal its sub-folders
and stations, and press Enter on one to play it.
- Community M3U (Music Genres) -- a big community
catalog sorted by genre (jazz, classical, 80s, country, ambient, and
dozens more), fetched live from the public
m3u-radio-music-playlists collection by
junguler (https://github.com/junguler/m3u-radio-music-playlists)
-- with our thanks. Nothing is bundled; the lists are read on the
spot.
- Xiph / Icecast Directory -- the long-running,
keyless Icecast "yellow pages" at dir.xiph.org, browsed
by genre and refreshable the same on-the-spot way.
Browsing and searching are now clearly separate.
The Station menu splits the two: Browse Stations...
opens the unified source tree above, while Search
Stations... opens the field-based window with your cursor
already in the search box. No more one screen that tried to be
both.
SomaFM search ignores spacing and punctuation
too. "GrooveSalad", "groove-salad", or "salad groove" all find
"Groove Salad", where before only an exact run of letters
matched.
Reorder your favorites straight from the
keyboard. When your favorites are in manual
(Unsorted) order, press Alt+Shift+Up or
Alt+Shift+Down on the main Favorites list to move the
selected station up or down within its folder -- the same gesture you'd
use to move an item in Microsoft Teams. Quill Radio speaks where it
landed, naming the neighbor: "Moved down, now above WABC." (The Manage
Favorites dialog's Move Up / Move Down buttons still do the same thing
with the mouse.)
Update in one click -- Quill Radio installs it and
restarts itself. When an update is available, choose Download,
then Install and restart now. Quill Radio applies the
update for you -- extracting the new portable files over your current
folder, or running the installer silently -- and relaunches
automatically, keeping every favorite, recording, and setting exactly as
it was. No more closing the app, hunting for the zip, unzipping it, and
swapping folders by hand. This is shared across every Quill app, so
QUILL, QUILL Cast, and Audio Studio update the same easy way.
Quill Radio no longer opens a second copy of
itself. If Quill Radio was already running -- even minimized to
the system tray -- launching it again used to start a whole second
instance. Now the copy already running simply comes to the front, and
the second launch bows out. (#1152)
The Record button tells you when you are
recording. Once a recording begins, the Record button on the
main window changes to Stop Recording, and changes back
to Record when it stops -- so it is obvious at a glance
(and to a screen reader) that a capture is running. (Recording has no
pause, so this is a Record/Stop toggle.)
Volume changes are quiet again with a screen
reader. Holding Ctrl+Up or Ctrl+Down on a station you have
saved used to speak the station's name -- and sometimes a track title --
on every step, so "turn it up three notches" became a wall of
chatter. That was the app re-saving the station's remembered volume by
rebuilding the whole favorites list underneath you. It now saves the new
level quietly, so you hear just "Radio volume 60", "Radio volume 70".
(#1154)
The Country list in Browse Stations stays put while you
arrow through it. Moving to the Country dropdown and pressing
Down used to fire a search that immediately threw your focus into the
results list -- so you could never actually arrow down the list of
countries. A search now jumps to the results only when you ask for one
(the Search button, or pressing Enter in a search box); arrowing through
Country or Tag just narrows the list and leaves your focus
alone.
The Raw stream recording format no longer shows a
bitrate. A raw stream is saved exactly as the station sends it,
with no re-encoding, so a "Quality (bitrate)" setting does nothing for
it -- it was just a confusing extra control. Recording Settings now
hides the bitrate control for the Raw stream format (and for the
lossless FLAC and WAV formats) and shows it only for MP3 and OGG, where
it actually applies. (#1155)
Station search finds more stations by their branding and
call sign. A station listed under a short name -- "103.1
Austin" for "103.1 Austin's 80s Station" -- used to be unfindable if you
searched with the dot, and its station id did nothing. iHeart search now
ignores punctuation and matches a station's name, its page address, and
its numeric id, so "103.1 Austin", "1031 Austin", and "8403" all land on
it. (#1156)
"Impossible to exit after recording" -- confirmed
fixed. A report of Quill Radio becoming completely unresponsive
after a recording, with no way to exit (#1153), was the Alt+F4/Exit
freeze that 2.0.1 already fixed: closing while a confirmation prompt is
up no longer stacks a second one, and every shutdown step on the way out
runs without blocking. This release adds a regression test so that exit
path can never silently break again. If you ever meet an unresponsive
exit, please send the exact steps.
Update 2.0.2
Adds concurrent recording, live Sound Enhancements preview, OptiLab
broadcast polish, fixes the 2.0.1 channel mode, and adds two favorites
features people asked for:
- Sound Enhancements preview live, and every setting is
per-station. You asked for the sliders to work while something
is playing -- they do now. Move any control in Playback > Sound
Enhancements (the EQ sliders, Even Out Volume, Channel mode, Night mode,
or the new broadcast polish) and you hear it on what's playing
immediately, no OK required: live and uninterrupted on the default
engine, and on the Windows Media engine it reconnects once the change
settles. OK keeps and saves it; Cancel
or Escape puts everything back exactly as it was when
you opened the dialog. And -- as you also asked -- every
setting in that dialog is now remembered per station as well as shared,
not just the EQ and channel mode: open it while a favorite is playing to
give that station its own night mode or broadcast polish too, or open it
with nothing playing to set the shared default every other station
follows.
- Broadcast polish (OptiLab). Sound Enhancements
gained a one-touch broadcast-polish section: pick a
mode -- Podcast Leveler for speech,
Stream Polish for music, or Smooth
Limiter for clean peak control -- set an optional
Input trim (0 dB by default) and an
Auto-Adapt amount, and there's a checkbox to bypass it
while keeping your chosen mode. It levels, adds density, and limits, so
a run of stations at wildly different loudness sits at a steadier,
fuller level -- especially nice for talk streams and unattended
recordings. This is adapted, with thanks and full credit, from
OptiLab Core by dgl1984 (github.com/dgl1984/optilab,
Apache-2.0). OptiLab itself is a GUI-only plugin (JSFX/CLAP/Winamp DSP)
with no library to call, so rather than embedding its Windows-only
binary we reproduce the shape of its three modes as ffmpeg filter chains
that ride the same pipeline as the rest of Sound Enhancements -- so it
previews live on the default engine, applies to recordings, and works
cross-platform. It's a faithful adaptation, not a bit-for-bit port of
OptiLab's custom DSP; if you want the exact plugin, grab it from
dgl1984's repository.
- Record as many stations at once as you want. Until
now the recorder held exactly one recording at a time. If you scheduled
two shows that overlapped, the first one won and the rest were quietly
dropped; and Record Station refused to start while anything else was
recording. That limit is gone. Every recording now runs on its own --
overlapping scheduled shows all record, and you can start one Record
Station capture after another while listening to something else
entirely. Each recording is fully independent: its own connection, its
own reconnect-on-a-hiccup handling, its own crash-resume marker, so one
recording dropping, finishing, or being stopped never disturbs the
others.
- A limit if you want one. Recording Settings gained
Maximum simultaneous recordings. Zero means unlimited
-- the default, so everything you ask for records. Set a number to cap
it on a slower machine or a metered connection; when the cap is reached,
a scheduled recording is held pending and retried within its window
instead of being lost.
- Record Now follows what you're listening to. Press
Record Now and it records the station you're on; press it again on that
same station and it stops that recording. A background
recording of a different station is never stopped by accident -- to stop
one of those, use the Recordings window.
- Stop Recording, and Stop All Recordings. The
Recordings window's Stop Recording button stops the one
recording you've selected. Stop All Recordings -- in
the Record menu, the tray/status menu, and as a button that appears in
the Recordings window when two or more are running -- stops every
recording at once.
- The Recordings window shows them all. Each
recording in progress is its own row with its own live elapsed time, and
the status bar and tray tooltip read "(2 recording)" when several are
running together.
- Crash-resume covers every one. Each recording
writes its own resume marker, so after an unexpected close Quill Radio
offers to resume all of them -- a single prompt for one interrupted
recording, and one batched "Resume all?" prompt when there were several,
rather than a stack of dialogs to click through.
- Channel mode Left/Right now plays in one ear only.
In 2.0.1, choosing "Left only" or "Right only" accidentally played the
audio in both ears. It now sends the whole stereo mix --
nothing lost -- to just the one ear you chose and silences the other, so
you really can keep the radio in one ear while your screen reader uses
the other. Mono and Stereo are unchanged.
- Sort your favorites: Ascending, Descending, or
Unsorted. Preferences (Ctrl+,) gained a Favorites sort
order that orders your folders and stations by name (Ascending
A to Z, or Descending Z to A) and re-sorts the moment you add one.
Unsorted keeps the hand-arranged order you build with
Move Up/Down -- and that order is never thrown away, so you can flip
back to it any time. Any folder can carry its own sort from its context
menu, overriding the default just for that folder's stations.
- Import stations from an M3U/M3U8 playlist. Station
> Import Stations from Playlist... reads a playlist
file into a folder you pick -- an existing one, or a brand-new path you
type at any depth like
News/Local -- and, when some of the
stations are already favorites, asks whether to skip those or import
everything. Station names come from the playlist's #EXTINF
lines; a bare URL is named after its host.
Update 2.0.1
A fast follow-up from the first round of live feedback, folded into
this same release:
- A recording no longer stops after a minute on a transient
hiccup. With "continue recording while re-establishing a
connection" on, a momentary
403 Forbidden (an expiring or
rotating stream token) or other brief 4xx used to be treated as a
permanent failure, so the recording ended instead of reconnecting. Now
only genuinely-terminal outcomes -- a full disk, or an HTTP 404/410/451
that means the stream is truly gone -- stop a recording; a transient
drop reconnects as it should, and an error ffmpeg already recovered from
can no longer strand a later, unrelated drop.
- It is now obvious when recording has begun.
Pressing Record Now (or scheduling Record Station) announces "Recording
started: " -- a clear spoken confirmation, not the old
label-like "Recording ".
- Review and copy What's Playing. A new
What's Playing - Review and Copy... command opens a
small accessible dialog with the current title and artist in a
read-only, selectable field you can arrow through character by character
to catch the spelling -- with a Copy button to paste it into a lyrics or
store search. A separate Copy What's Playing command
copies it straight to the clipboard.
- Channel mode: Stereo, Mono, Left only, or Right
only. The old "Combine channels into mono" checkbox in Sound
Enhancements is now a Channel mode choice. Left or Right sends the whole
stereo mix (nothing lost) to just that one ear and silences the other,
so you can listen to the radio in one ear while your screen reader uses
the other. It works as your shared default and, like the equalizer, as a
per-station setting that's remembered for that station.
- Turn a recording down while it plays back. Ctrl+Up
and Ctrl+Down now change the volume from inside the Recordings window,
the same as they do for live radio.
The headline: recordings
you can trust
A
recording in progress now survives a restart -- and Quill Radio asks
before resuming
This is the one that hurt. You set a recording going, the app quits
or crashes (or Windows does), and the recording is just gone -- the
FFmpeg process it had started keeps writing to a temp file nobody would
ever find.
Quill Radio now remembers an in-progress recording. It writes a small
marker when a recording starts and clears it on a clean stop, so a crash
leaves a breadcrumb. On the next launch it first tidies the temp folder
-- any finished orphan file is moved into your recordings folder where
you'll actually find it, while a file still being written is left
untouched -- and then, if a recording was in progress and is still
within a 10-minute grace window, it asks you, once, in a proper
accessible dialog:
A recording of WQXR was in progress until 9:00 AM. Resume it for the
remaining 12 minute(s)?
Resume (Enter) restarts the recording for the
remaining minutes only -- not a fresh full duration.
Skip (Escape) leaves it as it is. A Don't ask
me again checkbox remembers your choice -- always resume, or
never ask -- and you can change it later in Preferences. Nothing happens
when nothing was in progress, and a marker file that has gone corrupt is
thrown away rather than driving a bogus resume.
Scheduled
recordings fire reliably throughout their window, not just at the exact
minute
The scheduler used to match the exact start minute. So a recording
set for 8:00 that Quill Radio only reached at 8:01 -- a slow launch, a
brief stall, the tray icon taking a moment -- silently never fired, and
a start that failed still burned the whole occurrence for the day.
The scheduler now treats an entry as due from its start time through
the end of its duration, so a late arrival starts with the remaining
minutes and catch-up on launch is free. Last-fired is stamped only on a
successful start (a failure retries on the next poll while the window is
still open), one-time entries auto-disable once they've fired, and when
two schedules are due in the same minute while the recorder is busy, the
second is held and announced instead of being burned. The scheduler
thread itself is now lock-guarded and wrapped so it can no longer die
silently.
The
Recordings list stops flickering and keeps your place
The Recordings list used to rebuild itself on every refresh, snapping
a screen reader back to the top and losing whatever you'd selected. It
now updates rows in place, keyed by file path: a no-op when nothing has
changed, and when something has, your selection, focus, and scroll
position are all preserved instead of the list rebuilding under you
mid-read.
The counts are honest now, too. The active recording is counted from
the recorder itself, so a recording writing to a temp folder is no
longer invisible in the list; a firing schedule is no longer
double-counted; and completed one-time entries drop out of the scheduled
count. The active row shows a live elapsed time, scheduled entries show
their zone-labeled times, and the tray tooltip carries "(recording)"
while a capture is running.
Recordings
harden against dropped connections, dead streams, and a crashed
host
Four pipeline fixes that together make a long unattended recording
far more likely to come out whole.
- A reconnect records only the remaining time, not a
fresh full duration. A 60-minute show that drops at minute 50 records a
roughly 10-minute continuation, not another 60.
- Filenames are never silently overwritten. The old
unconditional overwrite is gone; a filename pattern that would produce
the same name twice gets
" (2)", " (3)"
appended instead of clobbering an earlier recording, and continuation
parts keep the original start timestamp in their name so they group
together.
- A drop is classified before any reconnect attempt is
spent. A fatal failure -- your disk is full, or the
server took the stream down with an HTTP 4xx such as a 404 or 410 --
stops trying, because the stream is gone and reconnecting would only
spam continuation files. A transient drop (a network hiccup or
a 5xx) is retried as before.
- A crashed host no longer strands a recording. On
Windows the FFmpeg child is tied to Quill Radio's lifetime through a job
object, so a crashed or killed Quill Radio takes it down with it instead
of leaving a bare FFmpeg writing to your temp folder. And the
stop-and-wait fallback moved off the UI thread, so closing the window
never hangs on a slow FFmpeg shutdown.
More
stations to find: iHeart and TuneIn now in the search
Browse Stations used to search the community RadioBrowser directory
and the free SomaFM directory. 2.0 adds two of the largest directories
on the internet -- iHeart and TuneIn
-- blended into the same results list, so a search for a call sign, a
city, or a show now reaches far more of the stations people actually ask
for. Every result is labeled with where it came from (iHeart, TuneIn,
RadioBrowser, SomaFM), and you play it the same way you always have.
Both are keyless and need no account. iHeart is read straight from
its public station sitemap -- a two-request directory index -- and a
station's real stream is resolved on demand from its own page the moment
you play it, never by bulk-fetching thousands of pages. TuneIn goes
through RadioTime's open OPML directory (the same service TuneIn's own
web player uses): search returns matching stations and the stream
address is looked up only for the ones about to play. To keep a single
search from turning into dozens of network round trips, iHeart and
TuneIn each resolve a small, capped handful of the most relevant matches
per search -- enough to add immediately-playable results without slowing
the list down -- while RadioBrowser keeps paging as before. A
Refresh button re-fetches the iHeart directory index
(it is cached once per Browse Stations session; TuneIn and RadioBrowser
are always live).
With four directories in one list, Browse Stations gained the
controls to steer it. A Source dropdown lets you narrow
the search to just one directory -- All sources, RadioBrowser, iHeart,
TuneIn, SomaFM, ACB Media, or Website -- when you already know where a
station lives. And the old free-text tag and country boxes are now
proper dropdowns: a Tag/genre list and a
Country list, filled in from the directory itself, so
you pick "jazz" or "United Kingdom" from a list instead of guessing the
exact spelling, and choosing one runs the search right away.
TuneIn also feeds Find Streams from a Website: paste
a TuneIn station page and Quill Radio resolves its real playable stream,
the same on-demand lookup the directory search uses. Find Streams now
also recognizes an iHeart or TuneIn page directly rather than handing
back a page address that will not play.
Like every other network feature, iHeart and TuneIn are off in Safe
Mode, HTTPS-only, and inventoried in QUILL's network-egress audit. This
lands in the shared quill package
(core/radio/iheart.py, core/radio/tunein.py,
core/radio/directory_search.py), so QUILL and QUILL Cast
gain the same reach.
Scheduling recordings
gained real editing
The Schedule Recording dialog was capture-and-forget: add an entry,
and your only other move was to delete it. 2.0 makes the schedule
something you can actually manage.
- Edit an existing entry -- change its station, time,
or duration without deleting and re-adding it.
- Duplicate an entry -- a fast way to set up the same
show on another day, or a second time slot for the same station.
- Enable or disable an entry without losing it --
turn a weekly recording off for a week and back on, instead of deleting
and rebuilding it. A disabled entry reads as "(disabled)" in the list
and simply does not fire.
- Type the time your way -- "7:30 PM" or "19:30",
whichever you think in; both are understood.
- Pin an entry to a time zone -- each schedule entry
carries its own zone (defaulting to your local time), so a show quoted
in Eastern records at the right moment wherever you are, and the list
shows each entry's time with its zone.
What's Playing reaches more
stations
When a station will not answer the usual title request -- and after
Quill Radio has already tried the playback engine's own title channel --
it now takes one more step: it reads the station's own public "now
playing" status page (the Icecast or SHOUTcast status endpoint the
stream's own server publishes) and pulls the current title from there.
It only ever talks to the same server you are already listening to, and
it is off in Safe Mode. The practical result is a real "Now playing" on
a batch of stations that used to answer with silence.
For
troubleshooting: verbose logging and a log folder you choose
Two additions for when something needs diagnosing. Preferences
(Ctrl+,) gained a Verbose logging checkbox that turns
on detailed debug logging live, without a restart, and a Log
folder setting so you can point the log somewhere easy to find
(and hand to a bug report). Recording problems now capture the
recorder's own error output into that log as well, so a failed capture
leaves a trail instead of a mystery.
Built on the 1.1.0 base
2.0 stands on everything 1.1.0 delivered, and none of it changes:
- The mpv playback engine, used automatically, with
the classic Windows Media engine one Preferences setting away.
- Every stream format in real-world use -- MP3, AAC
and HE-AAC (AAC+), Ogg Vorbis, Opus, FLAC streams, and HLS (m3u8).
- A second sound card for the radio, live pause and
rewind of the stream, and Volume Boost.
- Sound Enhancements as a full listening toolkit --
three-band EQ, compressor, mono downmix, night mode, per-station
memories -- applying live on the mpv engine.
- Alt+F4 to the tray, automatic update checks,
Preferences, the unified station finder, and file logging.
See release-notes-1.0.md for the 1.0 and 1.1.0 story in
full, and CHANGELOG.md for the complete versioned
history.
Known notes for this release
- Releases are not yet code-signed: Windows SmartScreen may warn on
first run. Choose More info, then Run anyway. Signing is planned.
Not a fork -- a guarantee
Quill Radio runs the exact same radio feature code as QUILL, from the
same upstream package. The recordings overhaul in this release lands
once, in the shared quill package, and reaches QUILL, Quill
Radio, and QUILL Cast together. This repository carries only the
wrapper, the installer, the icon, and these docs.