Author Archives: michael salmons

About michael salmons

Michael Salmons- web developer and photographer with a life-long obsession with recording things. I have a phalanx of old reel to reel, vinyl and cassette players, just waiting to extract sounds from odd finds in the thrift shops and on the web. Each week a new recording with background info. Audio is stored on Soundcloud. If you encounter problems, please let me know at michael@michaelsalmons.com.

Review: Weyes Blood- And in the Darkness, Hearts Aglow (Sub Pop, 2022)

Natalie Mering’s fifth LP grapples with the separation and alienation we’ve all been feeling thanks to the yawning distance- both physical and cultural- that has thrown modern society such a loop the past few years. While Mering muses about how to cope with unprecedented heart-heaviness, her music takes that darkness and floods it with light and transcendence.

These piano-driven songs, completely modern and hearkening to less mechanized times all at once, balm the wounds with a warm bath of strings, background singers, bells and harp (courtesy of Mary Lattimore) and, of course, Mering’s dulcet and clear voice leading us through. The chord progressions of “Children of the Empire” recall the best of Brian Wilson’s late 60s work with Van Dyke Parks, but temper the elated feelings with the cosmic heartbreak of minor/diminished/augmented progressions inspired by George Harrison. But these influences find a new kind of synthesis that only Mering could accomplish that yields feeling in equal measure with her impassioned lyrics. “God Turn me into a Flower” gets some inspiration from old-time gospel, updated for our times. The words evoke the same concept as “bend like a reed” of Taoism.

As long as I stand to face the crowd
To know my name, to know its sound
It’s good to be soft when they push you down
Oh, God, turn me into a flower
It always takes me, it’s such a curse to be so hard
You shatter easily and can’t pick up all those shards

Simple organ chords and Mering’s passionate voice starts the song perfectly, and it builds to a nature-meets nurture crescendo that’s the most moving thing I’ve heard since Spiritualized’s Songs in A&E.

Kudos also to Subpop for the quiet, distortion-free vinyl. Absolutely stunning. Without a doubt this is my favorite album of 2022.

Get back… to Mixtapes

Recently I took the plunge on an older cassette deck. I say “older” instead of “old’ because of relativity; I’m older than the deck, and am not young, so to call a mid-1980s piece of technology “old” seems a bit hypocritical, if not outright cruel. Like all older stereo equipment that makes it to the auction block, it’s been used by others and evenutally rejected. This one plays and records but has a mysterious problem with the meters on playback. I decided I really didn’t care what the meters said on playback- it really only matters when you record. I received it intact and it makes good recordings. I’m glad, because I’ve been itching to get back into making honest to goodness mixtapes.

I spent decades making mixtapes. Most were utilitarian- so I could play a record in the car, or to play instead of the vinyl so as to not wear it out. But over time I thought of the work I did on mixtapes a labor of creativity, and the humble mixtape itself as an artform.

Yesterday I resolved to make my first all-vinyl mixtape in many years on this new-to-me tape machine. I dedicated a vintage, new in box TDK SA-90 from my stash. Considering the options and limitations caused a flood of old instincts and decisions to return to my mind. Firstly, the creative aspect: What’s the theme of this tape? Who and what will go on it? Then the practical matters: Should I compose each side to leave as little blank tape as possible? Or should I just wing it? I decided to wing it and choose a starting track, each subsequent song I chose a reaction to hearing the previous selection. To set the levels, I queued up the first song- “Return,” the first track from Emma Ruth Rundle’s miraculous 2021 album, Engine of Hell- hit Record (some decks require choosing Record AND Pause for setting levels), and checked out the peak on the meters. It looked just right- only occasionally spilling over from green into orange. (LED meters- I much prefer the old fashioned VU needles, but LEDs will do)- hit Pause, lifted the arm, set it back on precisely at the beginning, and pressed Play, which on this deck sets the deck back into Record mode. Let Rundle’s beautiful mournful voice and spare piano fill the room with its solemnity- hit Pause when it was complete. And so on.

Miraculously, spontaneously choosing the tracks resulted in nearly filling up the first side. It resurrected an old familiar feeling- that rush of anticipation near the end, wondering if you’d have to fade out the last song because you’ve run out of tape. If you peer in the little window where you see the tape reels, you can see the clear leader tape which appears at the beginning and ending of a reel of tape. it gives you about a two seconds to fade the last song out as smoothly as your motor control allows as you turn the recording level knob back to zero. But I lucked out and the last song ended within seconds of the end of the tape! I felt a joy I hadn’t for far too long.

So what about the theme? I’m one of those who likes to set themes based on a representative track, something about the track suggesting the theme. For this one I picked a line from Broadcast’s “Black Cat-” “Curiouser and Curiouser.” As I choose tracks, I myself am increasingly curious about where this tape is going to go, so the theme seems fitting. And where that is, we’ll find out today, when I finish.

It’s a marvelous thing, an excuse to really sit and listen to your collection, make choices about transitions and sequence, to be the navigator, just like a well-designed Spotify playlists, but through a peculiar, specific, meditating activity, producing an artifact accessible only to the chosen few who partake of this arcane medium. It’s been a cleansing ritual, I highly recommend it.

Trying Brian Eno’s 3-channel “ambient speaker system” is a blast

I’ve been a Brian Eno fan for decades. There are lots of interesting bits from his album packaging that stuck in my memory- like the set of post cards by Peter Schmidt mentioned on the cover of Before and After Science (which apparently come with the 2-LP reissue- now I need to get that). But the most intriguing is the 3-channel “ambient speaker system” proposed on the back cover of Ambient 4: On Land. In the text and with accompanying diagram, he describes a system where in addition to a stereo pair of front speakers, a third speaker is added. The third speaker is wired strangely: one wire goes to the positive terminal of the left speaker connection, the second goes to the positive terminal of the right speaker connection. (I call them “one” and the “other” because it doesn’t seem to matter which is left and which is right.)

Eno doesn’t quite understand what’s happening, but he suspects what is common to both speakers cancels out, and what is played by the third speaker is only information unique to one channel or the other. Therefore, if you have a mono recording, nothing is reproduced to the third channel.

I finally decided the pandemic was a good time to mess around with this setup, so I bought a single speaker of the same type as my primary pair that happened to be on ebay. It arrived a few days ago.

On my amplifier, it didn’t work to use the positive terminals of the “B” set of speakers. So instead I wired the third speaker directly with the “A” set already connected to the amp. Sure enough, it worked. That is also how Eno indicates it should be connected- see http://music.hyperreal.org/artists/brian_eno/onland-txt.html. So I guess that’s the only way it can work.

I situated the third speaker behind the couch, similar again to his diagram.

The result is, it’s been a lot of fun experiencing this pseudo surround sound. For albums with a lot of things happening in different channels, it’s been a real blast. The Flaming Lips’ Soft Bulletin now spawns an infinite dimension behind my head. Tujiko Noriko’s self-titled celebration of electronic avant-pop whirrs and whizzes around in the room. Bitchin’ Bajas Baja Fresh imparts a feeling like floating in space, calming and slightly disorienting. And yeah, Eno’s On Land is infinitely more fun, offering secret nooks and corners buried in the mix that make you feel like wandering around an island in the dark stubbing toes on roots and rocks.

I also confirmed mono albums send nothing to the speaker. If a recording has extreme stereo separation, the opposite is true. If you listen to rough mixes of the Beatles’ early three-track recordings (as found on the Anthologies) or a stereo version of their first, Please Please Me, this setup adds basically a mono channel behind you.

Since low frequencies are rarely confined to one channel or the other, your third speaker doesn’t have to be a big, full-ranged one. A satellite will do. for the most part you’ll hear mids and highs in the third speaker.

Anyway, it’s been a fun, cheap way to hear familiar albums like new again, something you might enjoy doing with your old gear while in lockdown.

Winter project: daap radio station

In late October of last year, I had a tangle with gift wrap and a set of stairs, and I lost, breaking and dislocating my right ankle in the process. Ever since I’ve been stuck at home for the most part. First there was a the trip to the emergency room, where my broken, dislocated ankle was put back in proper position and put in a splint and cast. Next there was the surgery- added to my natural arsenal was a plate and some screws. Re-splint, re-cast. Finally, after enough time, I was told to wear a CAM boot, which incidentally weighs at least twice as much as a cast. So I’ve had a lot of time to consider my situation. (Actually not a lot of time- I made arrangements to work from home once I could sit in a chair and access a laptop.)

One thing I had wanted to experiment with was finding a way to improve my “radio station-” really just an FM transmitter connected to whatever was handy. I have a bit of a reputation in the neighborhood for providing a Christmas radio station. Being near the crest of a bluff, the reach of this little box is remarkably good, spanning the immediate area, neighborhoods downhill from us and even on the ridge across from us. So I feel a bit of pride and an obligation to maintain and improve.

Two Christmases ago I moved from Windows- basically an m3u playlist dragged and dropped onto Winamp and shuffled and looped from December through January. During that time, Winamp needed at least three restarts, and Windows 8 would cough up a hairball and die about once every two weeks. I had grown tired of tuning into the station only to hear dead air and realized it was time to up my tech game. I had this windows laptop around when I got the wild hair to play radio Santa and spent enough time compiling music for this project, let alone tweaking the setup. But I’d had enough.

At first it was a simple alternative. I wanted to use the same machine of limited capabilities, so it had to be very low resource. I installed Ubuntu and booted it straight into the console. I used a simple console player- MP3123- and invoked one command on startup, for MP3123 to play all of the files it found in a certain subdirectory. And it worked pretty well. No dead air. No restarts. But there was zero flexibility. playlist management consisted of adding and deleting files. And while I do have a few radios and even an FM tuner in my stereo, I really wanted to access the station in more modern ways.

Enter DAAP- Digital Audio Access Protocol. It’s most commonly known as the transport protocol used by iTunes. Fortunately, it also has wide platform adoption beyond Apple. What really sold it was finding a Linux daemon called daapd that supports MTP clients. One example of that is my ten-year old Roku Soundbridge, which has been gathering dust in a cabinet for a few years now. Another is an app in the play store. Yet others are a couple of Linux programs. So I could set up a server to make the playlist available via several devices; one of the less mobile ones can be the dedicated radio station device that will output right to the FM transmitter. So many bases covered!

forked-daapd supports these kinds of clients:

DAAP clients, like iTunes or Rhythmbox
Remote clients, like Apple Remote or compatibles for Android/Windows Phone
AirPlay devices, like AirPort Express, Shairport and various AirPlay speakers
Chromecast devices
MPD clients, like mpc (see mpd-clients)
MP3 network stream clients, like VLC and almost any other music player
RSP clients, like Roku Soundbridge

Here is a list of working and non-working DAAP and Remote clients. The list is probably obsolete when you read it 🙂

Client Developer Type Platform Working (vers.)
iTunes Apple DAAP Win, OSX Yes (12.1)
Rhythmbox Gnome DAAP Linux Yes
WinAmp DAAPClient WardFamily DAAP WinAmp Yes
Banshee DAAP Linux/Win/OSX No (2.6.2)
jtunes4 DAAP Java No
Firefly Client (DAAP) Java No
Remote Apple Remote iOS Yes (4.2.1)
Retune SquallyDoc Remote Android Yes (3.5.23)
TunesRemote+ Melloware Remote Android Yes (2.5.3)
Remote for iTunes Hyperfine Remote Android Yes
Remote for Windows Phone Komodex Remote Windows Phone Yes (2.2.1.0)
TunesRemote SE Remote Java Yes (r108)
(https://github.com/feihugao/forked-daapd)

I even had the closest I could imagine ME having for a host computer- a fresh install of Ubuntu Server 17.04 on a headless IBM desktop. I had already set up SSH and was working on it remotely to set it up. It was ready to be used for something fun. The only problem was it was in the basement on my bench. I was upstairs in a cast. So however I did this, it had to be completely remotely. A challenge!

The first challenge was how to copy files. I could set up an rsync command to clone the collection over to the remote machine. But I wanted to pick and choose as I went, and a facility for moving things around on the remote machine quickly if needed. So I installed an FTP server. All I had to do was install:

$ sudo apt-get install vsftpd

Installing forked-daapd

https://github.com/ejurgensen/forked-daapd/blob/master/INSTALL

If you are the lucky kind, this should get you all the required tools and
libraries:

sudo apt-get install \
build-essential git autotools-dev autoconf libtool gettext gawk gperf \
antlr3 libantlr3c-dev libconfuse-dev libunistring-dev libsqlite3-dev \
libavcodec-dev libavformat-dev libavfilter-dev libswscale-dev libavutil-dev \
libasound2-dev libmxml-dev libgcrypt11-dev libavahi-client-dev zlib1g-dev \
libevent-dev libplist-dev libsodium-dev libjson-c-dev libwebsockets-dev

Optional packages:

Feature | Configure argument | Packages
--------------------|------------------------|---------------------------------------------
Chromecast | --enable-chromecast | libgnutls-dev libprotobuf-c-dev
LastFM | --enable-lastfm | libcurl4-gnutls-dev OR libcurl4-openssl-dev
iTunes XML | --disable-itunes | libplist-dev
Device verification | --disable-verification | libplist-dev libsodium-dev
Live web UI | --with-libwebsockets | libwebsockets-dev
Pulseaudio | --with-pulseaudio | libpulse-dev

After installation, edit the configuration file, /etc/forked-daapd.conf.

Note that ‘sudo make install’ will not install any system files to start the
service after boot, and it will not setup a system user.

forked-daapd will drop privileges to any user you’ll specify in the
configuration file if it’s started as root.

This user must have read permission on your library (you can create a group for this and make the user a member of the group, for instance) and read/write permissions on the database location ($localstatedir/cache/forked-daapd by default).

If your system uses systemd then you might be able to use the service file
included, see forked-daapd.service.

Otherwise you might need an init script to start forked-daapd at boot. A simple init script will do, forked-daapd daemonizes all by itself and creates a pidfile under /var/run. Different distributions have different standards for
init scripts and some do not use init scripts anymore; check the documentation for your distribution.

For dependency-based boot systems, here are the forked-daapd dependencies:
– local filesystems
– network filesystems, if needed in your setup (library on NFS, …)
– networking
– NTP
– Avahi daemon

The LSB header below sums it up:

### BEGIN INIT INFO
# Provides: forked-daapd
# Required-Start: $local_fs $remote_fs $network $time
# Required-Stop: $local_fs $remote_fs $network $time
# Should-Start: avahi
# Should-Stop: avahi
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: DAAP/DACP (iTunes) server, support for AirPlay and Spotify
# Description: forked-daapd is an iTunes-compatible media server for
# sharing your media library over the local network with DAAP
# clients like iTunes. Like iTunes, it can be controlled by
# Apple Remote (and compatibles) and stream music directly to
# AirPlay devices. It also supports streaming to RSP clients
# (Roku devices) and streaming from Spotify.
### END INIT INFO

after starting play, press the “*” button. Options will come up. This works for photos and music

#!/bin/sh

# save new source playlist

#grab date
now=$(date +"%m_%d_%Y")

# check for new items by building new playlist based on date
find /srv/Music/ -iname "*.mp3" > playlist$now.m3u

# shuffle the playlist
shuf playlist$now.m3u -o stationlist.m3u
#reset perms
chmod 777 stationlist.m3u

add a cronjob to to the daapd user:

30 00 * * * /srv/Music/newplaylist.sh

Make sure the daapd user has access to the cache folder:

chown -R daapd:nogroup /var/cache/forked-daapd/

For this distro, I can just restart Cron and it will pick up the script schedule:

# service crond restart

That’s it! Now just find your server on your daap player and let it play!

This was a fun project, though I have subsequently moved on to another project with more radio station-type automation, but the daap server project saw me through that Christmas season with no hiccups at all.

Fun with Python- Pivot table to csv

I recently had the need to enumerate all of the filespace being used on a server. I needed it broken down by folders, and within those folders, the space consumed by popular file formats, mainly, image formats and PDFs. The server OS is Windows Server and I had to use Windows 10 as the platform to do it from.

I have played a bit with Powershell and appreciate how sophisticated programming techniques are available right there in the command line. I googled a bit and found some bits and pieces to guide to my goal, which was basically to iterate over all the folders and spit out filenames and filesizes if the filename matched a variety of necessary patterns (.jpg, .gif, etc.). This is what I came up with:

 get-childitem -path w:\wwwroot -Include *.jpg,*.png,*.pdf,*.bmp,*.gif -Recurse | where {!$_.PSIsCo
ntainer} | select-object FullName, LastWriteTime, Length, Extension | export-csv -notypeinformation -path c:\local\allfi
les.csv | % {$_.Replace('"','')}

In a nutshell, this command does this:

  • get-childitem- used to look at a folder’s subfolders
  • path- searches over a certain path
  • Include- looks for that list of filetypes
  • Recurse- look through all subfolders
  • PSIsContainer- looks for items that match filters
  • select-object- used to select the various properties of objects. Here I’ve included Fullname (something like “w:\wwwroot\folder\yadda.jpg”), LastWriteTime (a date/time stamp), Length (the size of the file in bytes) and Extension (.jpg, .pdf, etc.) That last one pretty much makes this whole thing possible, as now I can sort and report totals by filetype.
  • export-csv- yep! I am exporting the results to a csv so I can monkey with it in Excel.

After running the command, it yields a file which looks like this:

site1,documents,9352,.pdf,W:\wwwroot\site1\documents\GreatFile.pdf
site1,documents,44567,.pdf,W:\wwwroot\site1\documents\BiggerFile.pdf

This can be put right in Excel and sorted, culled, summarized, etc. However… this document has 221,000 rows. It would take a long, long time to wrangle that by hand. And sure, some of it Excel can do out of the box, and for other things, there are macros… I might have been able to piece together various tools and code and get it done.

That’s when I thought of Python. I had already used Python to transmogrify text to do my bidding. Surely there was a way I could auto-magically achieve what I needed in a couple of steps or so. And indeed after some digging, I found some fun things using pandas (as pandas.pydata.org describes it, “pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language”). I already have Python 3 and pandas on my machine to do some things with analytics.

From my days as a trainer what seemed to be needed here was a pivot table, and sure enough, there is a pivot table dataframe for pandas that will do the job. This is the script I settled on eventually- it took all of four lines.

import pandas as pd
df = pd.read_csv (r'C:\local\allfiles.csv')
print (df.pivot_table(index='Site',columns='Extension',aggfunc=sum))
df.pivot_table(index='Site',columns='Extension',aggfunc=sum).to_csv('newoutput.csv')

Important parts:

  • df means dataframe. In the second line (after including pandas in our recipe), a dataframe for reading the generated csv file is invoked.
  • I started with the print line just to get visual confirmation it was working. I just kept it to serve the same purpose in the final version.
  • then the pivot table dataframe is created. the “Site” column is the index, and the contents of the “Extension” column are aggregated and summed for the output table- the filename of which is then specified.

Pandas is a powerful library. But what I find interesting is how it distills what is a bit of brainteaser of a concept into some clear directives, thus yielding a bit of insight into how a pivot table is structured. I guess that’s obvious, still I find it- informative? Fun? something.

But we’re not quite done here. it does output a lovely product:

pivot table printing to screen

What the heck is “4.094785e+08?” That is scientific notation. Excel will do with exceptionally large numbers if no specific format is selected. Since what’s happening here is a decrease of significant digits for the sake of brevity. I think this is a standard way of depicting these numbers when the format- in this case, the rows and columns of a pivot table- matter.

NaN means Not a Number- in this case the value is zero- nothing there.

The scientific notation bit threw me for a loop at first. I googled my fingers off looking for a way to convert the numbers to a specific format before exporting. There are some ways to do it, but I had a lightbulb moment, realizing unlike all the sorting and summing, changing number formats for a range of values is no problem at all in Excel. So I went ahead and imported it. I changed the format from General to number, and things started looking a lot more normal.

But it still didn’t strike me as being as “at-a-glance” as my needs dictated. On a Stack Overflow discussion I found several helpful tips about converting number formats to common filesize units- kilobytes, megabytes, gigabytes, etc. I decided MB was good enough for my purposes, though there are some elaborate solutions that take into account everything from bytes to petabytes- I highly recommend it. This example was what I needed:

[<1000]##0.00"  B";[<1000000]##0.00," KB";##0.00,," MB"

This will help all the numbers in this format to express themselves in terms of MBs.

After removing some extraneous bits- the filename and subfolders past the main site folders really weren’t of any use in this report; consolidating the “JPG” figure with the “Jpg” figures and “jpg” figures; click-dragging a few autosums; then setting the format of the numbers, I produced a pretty nice report of the filespace in several server folders taken up either by images or PDFs.

Not bad!

Dusty Grooves 45: Electronic Pioneers, pt.2

Part two of a two-part series. Non-definitive dip into the history of electronic music. Featuring Finnish sound surfers of the unconscious Kemialliset Ystävät, Italian electronic composer Pietro Grossi, German electronic band Popol Vuh, Prog rock icon Robert Fripp, Yellow Magic Orchestra alum Ryuichi Sakamoto, Star Trek original series soundtrack composer Alexander Courage, post-punk innovators Suicide, abstract Krautrockers Tangerine Dream, Swedish electronic duo the knife, mysterious strangers The Residents, legend Todd Rundgren, BBC Radiophonic workshop veteran Delia Derbyshire, dark overlords Zoviet France, psychedelic minimalists spacemen 3, with Raymond Scott ad spots scattered throughout.

For more information, follow us on twitter- @GrooverDusty.

Dusty Grooves 44: Electronic Pioneers, pt. 1

Part one of a two-part series. Non-definitive dip into the history of electronic music. Featuring mad scientist of experimental music, Daphne Oram; Mad Men meets synthesizers in the work of Raymond Scott; modern master David Sylvian; German noise outfit Der Plan; elegant works of Orchestral Manoeuvres in the Dark.

Playlist

The Little Orchestra in Sonovox- Pop Goes the Weasel/Mary Had a Little Lamb, from

Little People’s Band in Forestland

Daphne Oram- Studio Experiment No.1, from Oramics

Daphne Oram- Lego Builds it,  from Oramics

Kemialliset Ystavat- Hyppivat saaret, from Kultaista Kaupunkia Etsimassa

Der Plan- San Jose Car Muzak from Geri Reig

Jean Jacques Perrey- Gossipo Perpetuo 7”

Charles Dodge- He Destroyed her Image, from OHM: The Early Gurus of Electronic Music, 1948-1980

Kraftwerk- Kristallo, from Ralf und Florian
György Ligeti- Artikulation, from Ligeti

New Order- Truth, from Peel Sessions

Michael Salmons- Dawn Chorus, self-released

David Sylvian- the Only Daughter, from Blemish

Kraftwerk- The Model, from The Man-Machine

Hugh le Caine- Dripsody, from Various- Electronic Music

Raymond Scott- Cindy Electronium, from Manhattan Research, Inc.

Orchestral Manoeuvres in the Dark- Architecture and Morality, from Architecture and Morality

Orchestral Manoeuvres in the Dark- Time Zones, from Dazzle Ships