Multiple Recording Feature
FM Receiver App – Week 11 Update
This week’s progress:
- Added Multiple Recording feature (in development)
- New Station Button widget
- Auto-select SDR if only one device detected
- Fixed flowgraph crash on app close
- New Info Window widget for notifications
Multiple Recording Feature
The app now supports concurrent recording of multiple stations in the background, limited by SDR bandwidth (RTL-SDR: 2 MHz).
At most, it can handle three 200 kHz FM stations with 100 kHz separation. Bandwidth constraints mean users can only record streams within their SDR’s range.
The initial plan used a polyphase channelizer to split FM channels, directing selected ones to WAV sinks and others to null sinks.


Why this approach failed
With stations at 88.7 MHz and 88.2 MHz, the 200 kHz step missed some channels, while a 100 kHz step captured far more than needed.
Instead, I switched to frequency shifting with offsets.
Hierarchical Block Solution
I built a hierarchical block that:
- Accepts an input stream
- Frequency-shifts and isolates a station
- Demodulates
- Saves output to a WAV file

A multiple recorder function attaches/detaches these blocks to/from the SDR source via station record buttons. It checks if the station’s frequency is within bandwidth before recording.
# Code snippet
# Create and store the recorder instance, tuned with frequency offset
self.recorders.append(
MultipleRecorder(
fname=file_name,
freq=self.get_freq() + int(freq_off),
freq_offset=int(freq_off),
)
)
# Connect FM receiver's output channel to the new recorder
self.fm_receiver.connect(
(self.fm_receiver.blocks_selector_0, 1),
(self.recorders[0], 0)
)
After testing, the recordings work as expected.
New Station Buttons
Station buttons are now a dedicated class handling station deletion, recording, and selection.

Auto-select SDR
If only one SDR device is available, the app now selects it automatically.
Fixed Config Manager
The config manager wasn’t saving because the close event method name was wrong.
After renaming it to def closeEvent(self, event):
, configuration saving/loading now works.
Notification Window
A new notification class alerts the user when an action isn’t possible—e.g., trying to record a station outside the current SDR bandwidth.

Known Issues
-
Center frequency changes during recording cause some channels to record noise.
Plan: stop all active recordings if the user changes the tuned station.
Example: Recording 88.5 and 88.7 MHz, then tuning to 107 MHz will result in noise. -
Hardcoded SDR bandwidth & decimation (currently 1.92 MHz).
Changing sample rate breaks FM demod and audio. Possible fix: use a rational resampler to standardize flowgraph input rates.
Next Steps
- Implement “stop all recordings” on frequency change
- Improve documentation
- Enhance FM detection
- Wrap project up for final submission
Useful Links
Enjoy Reading This Article?
Here are some more articles you might like to read next: