BuildingPulse



  1. Building Pulse Width Modulation
  2. Building Pulseaudio
  3. Bodybuilding Pulses

These are plans for pulse engines of all sorts of configurations, mostly appropriate for models, but some are larger, like the unit that powered the V-1 Buzz Bombs with 1200 lb cargos from Germany to England in WWII. Aerojet: A Russian designed pulse jet in metric dimensioning. Alpha Jet: A German designed pulse jet with metric dimensioning. Maintenance mode is on. Site will be available soon. Thank you for your patience!

Home • About • Community • Download • Documentation • Planet


If you want to use the current development version of PulseAudio, follow these instructions.

Obtaining the Source Code

Clone the source code repository on your machine:

These commands will create a new subdirectory with name 'pulseaudio' in the current working directory.

Building

Malwarebytes portable. After getting the source, go to the pulseaudio directory and run these commands:

The first command configures the project and creates the subdirectory 'build' where build artifacts go. The second command builds the code.

If there are complaints about something not being found, then you need to install the missing things. The list of build dependencies may be useful: http://www.freedesktop.org/wiki/Software/PulseAudio/Download/

Building Pulse Width Modulation

On Debian and its derivatives (Ubuntu etc.) it's possible to use 'apt-get build-dep pulseaudio' to install all the build dependencies. On Fedora 'dnf builddep pulseaudio' can be used for the same.

Building to install to a custom location

If you want to install PulseAudio to a custom location (i.e. a prefix install), you can do the following:

Installing and Running

BuildingPulse

Method 1: System-Wide Installation Under /usr/local

This is the simplest method. The drawback is that it will affect the whole system: the self-compiled version will be used everywhere instead of the distribution's version of PulseAudio. The development version should be pretty stable in general, though, so replacing the distro version isn't really a big deal (the distribution version will still exist in the system, but it just won't be used).

Two commands:

Uninstalling the self-compiled version is a matter of deleting all pulseaudio files under the /usr/local hierarchy (TODO: the exact rm commands would be nice here). 'sudo ninja -C build uninstall' works too, but it will only remove the files that were installed by the last 'sudo ninja -C build install' command, so if you over time install many versions without uninstalling in between, the old installations may have files that are not included in the latest install, and in such case 'sudo ninja -C build uninstall' will not remove everything. Also, if 'sudo ninja -C build install' installed something in the same place where the distribution installs files, then those are removed too, and that may cause trouble (such trouble should be fixable by forcing a reinstall of the distribution's pulseaudio packages).

Also note that some system-installed files (udev and systemd user units) will be overwritten.

Method 2: Installing to a Custom Directory

You need to use the instructions from 'Building to install to a custom location' above. With that done, you can install to the prefix you chose with:

That's it, the binaries, modules and configuration are all installed in the prefix path.

App store for my computer. Note that certain files that involve interaction with the system will not take effect (at the moment this includes udev rules, systemd user units, and bash/zsh completion).

Uninstalling in this setup can be done with a 'ninja -C build uninstall' or simply deleting the prefix directory (assuming you have nothing else of value there).

Method 3: Running From the Build Tree Without Installing

TODO. (A lot of information can be found here: http://colin.guthr.ie/2010/09/compiling-and-running-pulseaudio-from-git/. It would be good to copy that here.)

At-home pulse oximeters, those fingertip devices doctors use to measure the oxygen saturation in your blood, have been selling out everywhere thanks to the Covid-19 pandemic.

But as my Quartz colleague Amirta Khalid points out in this great article, most people don't need 'em. If your oxygen level is worryingly low, you'll know — you don't need a machine to tell you. Folks with some existing conditions, however, can use a pulse oximeter to help a remote doctor monitor their vitals or to adjust supplementary oxygen devices.

When Khalid mentioned she was working the story, it reminded me of the DIY 'pulse ox' sensor Sparkfun sells. It, like other pulse oximeters, shines light into the skin and makes measurements based on how that light is absorbed. I've built heartbeat-driven projects before and had been exploring new ways to monitor pulse rates. So I got one.

Sparkfun warns in red letters that 'this device is not intended to diagnose or treat any conditions,' and I offer the same caution if you're tempted to build one. The process wasn't hard at all. I got it running quickly .. and then added an LED display for fun and flourish.

Here's how I made it, and the code, too.

The heart (ha) of the project is the Pulse Oximeter and Heart Rate Sensor, which includes the sensor itself, a tiny brain to make the measurement calculations, and two 'Qwiic' connections. Qwiic is Sparkfun's system of making it easier to wire up sensors. So I also bought a little box of Qwiic wires.

I'd also need a microcontroller, a credit card-sized hobby computer, to run the show. Sparkfun makes its own version of an Arduino called a RedBoard that is Qwiic-friendly, and that's probably the easiest option for anyone starting from scratch. I have several Arduino Unos lying around, so I got a cheap Qwiic adapter for Arduino, which the Arduino world calls a 'shield.'

Building Pulseaudio

(While the Qwiic connectors made the project much easier, I could have soldered wires directly to the sensor. See the 'connection options' section of this page for an example of that.)

The sensor needs two additional wires to lead back to the Arduino, so I cut the ends off two jumper wires. Here it'd be simpler to use the pigtail wires Sparkfun recommends.

Finally, I got fancy and added an Adafruit RGB Neopixel shield — which is a fun grid of addressable LEDs — to make a display. This is wholly unnecessary; you can read values off the microcontroller with your own computer.

Mainly I followed the SparkFun Pulse Oximeter and Heart Rate Monitor Hookup Guide.

I added my Qwiic 'shield' to my Arduino Uno ..

Bodybuilding pulses

.. soldered up my jumper wires ..

.. and wired everything together, using a Qwiic cable to make the connection between the Qwiic ports.

The sensor uses a additional library, so to get that I followed the hookup guide instructions (which include links out to more instructions for people new to Arduino or to adding Arduino libraries). One note: The guide says to search the Arduino libraries for 'SparkFun Bio Sensor Arduino Library' — but that's actually not precisely what it's called now. Just search for 'Bio Sensor' and you'll find it.

Once the library was installed, several example programs become available. I used 'Example1_config_BPM_Mode1' which was available from my Arduino desktop software's menu bar at: File > Examples > SparkFun Bio Sensor Hub Library > Example1_config_BPM_Mode1.ino

I loaded the code onto my Arduino, pinched the board lightly between my fingers, and it worked right away! The values streamed into my serial monitor window, which is available from the Arduino desktop software 'Tools' menu.

I wanted to display the values for my pulse and saturated oxygen on my LED grid, so I used a RGB Neopixel shield from Adafruit .. and stacked it on top of my Qwiic shield — which I can do because they fit and they don't use any of the same 'pins' on the Arduino.

There's a huge guide on how to use this little matrix here, and more about how to make text and graphics appear with the GFX library. Trouble is, that the digits created by the GFX library are toooo big for what I wanted. On my matrix, the digit '1' filled the whole 'screen' vertically:

I suddenly remembered that I've been here before: when when I wanted to display the forecast temperature for my weather matrix project. So I stole a bunch of my own code from that project and incorporated it into the sensor example code.

Bodybuilding Pulses

The resulting program checks for the sensor's 'status' value (3 means a finger has been detected, for example) and waits for a valid oxygen saturation reading (greater than zero). Then it does some gymnastics to display digits representing the values.

There's not quite enough room to separate the '1' in '100,' so I just flash the first row of LEDs as a 1, which seems to work well enough. I also added some startup animation, a 'heart' icon to denote the pulse, and a 'lungs' icon to indicate the oxygen reading.

The full code is available on Github. Let me know if you find it useful!