Skip to content

MacOS Port Milestone

Gonzalo José Carracedo Carballal edited this page Nov 16, 2019 · 3 revisions

The following page describes the goals and tasks for the upcoming MacOS port feature. This is a milestone page: it will contain details on feature requirements and design decisions.

Task list

  • C++ complex API benchmarking
  • Fix warnings for clang
  • Fix installation directories
  • Implement the audio preview
  • Implement packaging for distribution

Task details

C++ API benchmarking

In this task we simply run SigDigger with the same signal source both in GNU/Linux and MacOS with different input rates, and measure for each of them the mean CPU usage in a given period of time (let's say, 10 s), both in mean and standard deviation. Since many SDR radios have restrictions on the set of valid sample rates, the best approach would be to work on a looping capture file with different throttle rates. This should result in a sample rate vs CPU load graph for both systems, including error bars for each data point.

Fix warnings for clang

(Self-descriptive)

Fix installation directories

SigDigger Makefile in MacOS does not install itself in any directory in the system $PATH. Fix this so SigDigger can be called from the command line.

Implement audio preview

Currently, audio preview does not work in MacOS due to the lack of Core Audio support. The internals of the audio preview feature can be found here. The roadmap for this task would be:

  • Understand the Core Audio API (what do we need in order to play samples in a blocking way?). Try to play a sine wave using Core Audio in a separate file.
  • Object model (this affects the AudioPlayback class). Discuss the AudioCodec class. Do we settle for a single per-system AudioCodec implementation, or do we allow multiple AudioCodec implementations in the same system? Note the latter will require require to design an abstract AudioCodecFactory whose different implementations must be registered somehow on program startp.
  • Move all ALSA code to an AudioCodec class.
  • Refactor AudioPlayback in order to accept a generic AudioCodec class.
  • Modify Application (App/Application.cpp) in order to construct AudioPlayback based on the appropriate AudioCodec.

Implement packaging

The result of the build must produce a working .dmg that can be distributed and executed out of the box.