• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

A Low-Cost Music Server With High-Resolution Metadata

jeffb

Member
Joined
Sep 22, 2017
Messages
14
Likes
11
Location
Montana
What is the intersection of the set of audiophiles and the set of music lovers? Many posts at this forum understandably focus on sound quality, but presumably the ultimate objective of the quest for higher sound quality is greater enjoyment. Many of us music lovers find that information about the music we are hearing also enhances our enjoyment. Depending on the style of music, it might be interesting to know the names of performers, the names of composers, the date of a performance, and more. If the music came from a CD, you might like to read the liner notes. You might want to access Wikipedia for background information. Most music player software is able to present only limited metadata that conform to standards such as ID3. Roon provides more, but you are at the mercy of Roon as to the metadata associated with a recording and you need to pay a recurring fee to access it. High-resolution metadata is the counterpart of high-resolution audio. It is for listeners who totally engage with their music, both intellectually and emotionally.

Existing music player programs are hobbled by constraints imposed by hoary, misbegotten standards. Users should not have to think about what goes in Artist versus Album Artist or when to set the Compilation flag. Users should not have to pack redundant information, such as the identity of a symphonic work, into every track title. Users should not have to think about how to pack the names of the conductor, the orchestra, the chorus, and the soloists in the artist tag. The computer is supposed to serve the user, not vice versa.

My Wax software is immune to these and other vexations of existing programs. By ignoring inadequate standards, I was free to develop software capable of delivering the user experience that I – and other music lovers, I believe – craved. Wax is able to preserve and present unlimited metadata. It also provides viewers for liner notes and Wikipedia. For basic operations, Wax is intuitive and friendly, so it is easy to learn and use. For advanced users, there is a detailed user manual written in English with illustrations and tips. Despite its power, the computational demands are small enough that Wax can run on a Raspberry Pi 4B, which opens the door to a low-cost music management system. Wax allows users to focus on their music without having to exercise programming skills, and it gives music lovers ownership of their music and their metadata.

Wax differs from other music players in three fundamental ways:

1. The fundamental unit for entries in the Wax catalog is a “work”, not a track. A work is usually a collection of tracks. In pop music, a work can be an album. For symphonic music, a work can be a single symphony, even when the tracks come from a CD with more than one piece. For musicals (or operas), a work can be a single musical even when the tracks come from multiple CDs. Music collectors usually think in terms of works, so a music manager that supports the concept makes operation more natural.

2. Genres are fundamental to the organization of your collection rather than an attribute of a track. The ideal way to catalog works varies by genre. You decide what genres best characterize subsets of your collection, and for each genre you decide how many keys and what keys to assign to the genre. For example, pop recordings can be cataloged using the metadata keys group and title (or album and artist, if you cherish ancient standards); symphonic works can be cataloged with composer, work, conductor; and shows can be cataloged with show, composer, lyricist, date. Diligently sorting your collection by genre also makes it easier to find recordings.

3. Wax tightly integrates cataloging, selecting, and playing. With Wax, you go to Edit mode to rip a CD; to import sound files, art, or liner notes; and to specify the metadata. You go to Select mode to select works directly, to search for works, to randomly select works, or to recall a queue of works. And Play mode is where you go to view all the metadata associated with a work, cover art, liner notes, or a Wikipedia browser. You can create, supplement, or edit metadata while listening to music, and any changes that you make to the catalog immediately propagate to all views.

In the next post, I will provide a brief tour of Wax with screenshots and directions for downloading and installing Wax. The Wax program itself, several utility programs, and a detailed user manual are free forever and available at GitHub (github.com/jeffbarish). Wax runs on Raspberry Pi OS, Ubuntu, and presumably any Linux with GTK3, GStreamer, and Python 3.12, or on Windows under WSL 2 (with one limitation). In the third post, I will describe how to assemble hardware with parts cost in the $200-$400 range for running Wax. Alternatively, Amir’s ASR Music Server is an excellent hardware platform with more power than you need to run Wax (and it conveniently includes the CD drive, which is external in my options).
 
But we need standards and you'd need "marketing muscle" introduce a new standard. Non-standard tags are not a big problem but they aren't that useful if existing players can't read & display them.

P.S.
Another thought - MiniLyrics is a plug-in that works with several existing player applications. I don't know how they accomplished that but the same concept could work with expanded metadata.
 
Last edited:
Relevant xkcd:
standards_2x.png


I applaud the effort, but I'm not hopeful a new standard in a rather niche music player will solve the problem you're trying to tackle. You'd need powerful players in the market to adopt the standard first to reach a critical mass of users. That doesn't mean that you won't find anybody who likes your solution, though. I'm just sceptical it will appeal to a larger audience this way. I like the plugin idea @DVDdoug brought up.

Also, I'm very sorry, but the wording "High-resolution metadata" is marketing nonesense. The "resolution" of metadata is not defined - it doesn't have a continuous dimension in which you could measure a quantity and hence can't have a resolution. Simply having more of something - or structuring stuff differently - doesn't make it "high resolution". Maybe "high definition metadata for your high res music" would be a better angle.
 
I like the idea. The software is being made available at no cost. Many of us already have hardware it will run on. You are free to use it if you like, or not. The OP expressed frustration with what’s currently available, and instead whining and carrying on, he just wrote something he thinks works better. What he’s saying makes sense to me. I don’t see where he’s trying to turn the world on its ear. I’m looking forward to finding out more.
 
  • Like
Reactions: EJ3

Part 2​

In this post, I will provide a tour of Wax. To animate the tour, I will pretend to be ripping a CD, as that common task will naturally take us to all three modes of Wax. Wax offers benefits to lovers of music in any genre, but classical music typically presents the greatest cataloging challenges, so I will use a recording of classical music for this tour.

AD_4nXdBeRCWxmcQGNNDHDiNR_Gbp_haoBrAalTXdUQnrI3STxJOhXWL2bkANJU2RuR8qsukAZxaNQWRU0ZZ-Buaw8zANN7tI5EjORyGpJdrZ6axMqAaPQRs3A71_KQCNgZd8QbtDeVP0Q


Edit mode is where you go to rip a CD or to import tracks. You initiate a rip by clicking the Create button. While the rip is underway, Wax requests metadata from Musicbrainz. The metadata that it finds there appears in the panel on the right. The forms on the left are where you specify the metadata that you want to associate with the recording. You are looking at the page for specifying the work metadata. Wax recognized the title of the work, the names of the composer, the conductor, and the orchestra, and the date in the Musicbrainz metadata and automatically copied that information to the appropriate fields on the left. If Wax does not recognize a name, you can select it and drag it to the appropriate field. Wax will learn unfamiliar names when you save a work. In the worst case, you can type in values. When you do, Wax will suggest autocompletions. When I created the Symphonic genre, I specified a field for subgenre. In this case, the only information I have to provide manually is the subgenre (“Late Romantic (Mahler)” – I have so many Mahler recordings in my collection that I created a sub-subgenre of “Late Romantic”).

The four primary metadata fields allow for a long form and a short form. You will see that the short form is what appears in Select mode and the long form in Play mode. If there are multiple values for a metadata field, you can click the right arrow to open additional fields. If a recording has unusual information that you want to preserve, you can create nonce fields and specify a suitable key and value.

AD_4nXeQC4iBHMreBgfVySmSMe-4nNElzzmrigD2b6BuaurnInChjMF0csaG2pS5MyLO_bIkCujvRYwdce62dj_nN3yGFCg01E_Ul09RnLwObTpLqR-k-M9c5r78ccfjmi26SkbK-GEQAw


The Tracks tab exposes the form for specifying track metadata. The screenshot shows what Wax downloaded from Wikipedia. This screenshot illustrates one of the problems with existing standards to which I alluded earlier: Because tracks exist individually in the prior art, each one must redundantly include the title of the work. In Wax, the work title goes in the work metadata, so it is superfluous here. Wax can remove this redundant information easily in four clicks. It leaves in track titles only the portion unique to each track. Since tracks exist as part of a work in Wax, it is also possible for Wax to remove the numbering because the position in the list corresponds to the position in the work.

Images that Wax finds automatically at Amazon or CAA (Cover Art Archive) appear on the Images page. You can also paste images or import files that you find on the web or create yourself. The Docs page is for importing liner notes. If you purchase recordings on line, they often come with a PDF of the liner notes. Otherwise, you can scan the physical liner notes.

Once you have specified all the metadata for a work, you click Save. When you switch to Select mode, the new recording will already be selected on the Selector page. All works in the selected genre appear in the upper panel and the tracks for the selected work appear in the lower one. To play the work, drag it to the panel on the right (the play queue) and click the play button.

AD_4nXdGb6dCRh-nmBxXwMHNcSsxfy8X7nuJySv8ibt0mjs3ghamePI7Zr5_i_cgckEMF5xdgdX2HP93rfzItCJuIZKIMjkoXbiPcerAIxuiL4Qg8ZAApG_AZXULIH9VzXgqogmfS1M5


Notice how easy it is in Wax to directly select a desired work. After you choose the genre, Wax sorts all works by the value in the first column (composer, in this case), then by the value in the second column, and so on. When you have multiple versions of a work, as in this case, the selector display makes it easy to find the work you want to hear and to select the desired performance of the work.

If direct selection is inconvenient, Wax offers incremental search. For example, if you wanted to find all recordings with Michael Tilson Thomas – regardless of genre – you could do an incremental search:

AD_4nXeHuJFEE0-660mmMVDbFOynEnYOUtnE5MVX8IXX6VzZDnUUmXb3BAXrQOkl3nIcrSrbKdryG47DARjScHkTVzUBsxkEkXL1xYt6wL4m7f-1ZB5DwhYRlHOrzeQgapqgGrHSrlpn


Random creates a play queue by randomly selecting works from your collection. You can specify the genres from which Wax should make the random selections, the weight to be given to each genre, and whether to choose individual tracks from each work or entire works. You can also save a queue file if you would like to be able to revisit one at a later time.

The final mode is Play. Play mode exposes all the metadata associated with a work (in their long form). There are also controls for advancing to the next track or the next work in the queue and for displaying progress through the track and the work. The Wikipedia page gets populated automatically (or manually) with information related to the work. Docs displays the liner notes.

AD_4nXerSiiIxRzwgPQ00lyNPkKq36ryYMWTfwO8YpgNJ01to3sHkW4mbI6mc3hIwI1jLOxcDZECWpnioB-iYQ37Z06-1WtJW6fqXxsurhNo14Nx0nCZdDsadiTZsBaIhv91PjfB6noiNQ


Wax has many other capabilities. I did not mention one of my favorite features, track groups. Read about it (and much more) in the manual.

Some readers might be thinking, “This is all well and good, but I already ripped and tagged my CDs”. You will want to read the section in the manual about importing. You can import the tracks that you ripped previously. When you do, Wax will extract the tags that you carefully specified, display them in the panel on the right, and automatically assign any names it recognizes to the appropriate fields on the left. Dragging any remaining values to the appropriate fields on the left is quick and easy. If you are inclined to clean up values (e.g., by removing redundant work titles in the track titles) or to add information, you can do so anytime. Even if you never polish the metadata, other powerful features of Wax – Wikipedia, for one – are available at your command.

It is worth mentioning that Wax also supports movement of sound files in the opposite direction: When you rip a CD and save a recording, Wax converts as much of its rich metadata as possible into tags. Those tags will provide a familiar experience if you choose to play the sound files with some other player.


To get a copy of the software, go to github.com/jeffbarish. There are four repositories. One is for Wax. wax-config is for a separate program called WaxConfig which is used for configuring Wax (e.g., creating genres) and for displaying statistics about your database (e.g., the number of works in each genre). There are two installer scripts in wax-install. The README in wax-install explains how to use the installers to install the software (basically, you just run the two “installer” commands).


In the final post, I will describe hardware for running Wax.
 
  • Like
Reactions: EJ3

Part 3​

In this final post, I will describe two systems that I built for running Wax. Both include an SSD for the sound files and a DAC, but the CD drive (for ripping CDs) is separate.

The low computational requirement of Wax lends itself to a low-cost platform based on a Raspberry Pi processor. I prefer the Raspberry Pi 4B over the 5 because the latter requires a cooling fan. Fans are anathema for audio products because they make noise, although the tiny fan required for the Raspberry Pi 5 makes so little noise that you probably would not notice it in practice. In any case, the Raspberry Pi 4B is sufficiently powerful to run Wax and it is cheaper.

The highest CPU load I have seen is 2.4 (with 4 cores, the processor is theoretically capable of sustaining a load of 4.0). To hit that load, I had Wax playing and ripping at the same time, and I was quickly paging through PDF liner notes. The highest processor temperature I have seen is about 45°C (throttling begins at a temperature of 80°C).

I have found that 4GB of memory is more than enough for Wax. In fact, I have never seen the memory requirements exceed 2GB, so you might even get away with a cheaper version of the Raspberry Pi (and knock $10 off the total below).

Neither of the Raspberry Pi builds requires a soldering iron or any tool other than a screwdriver. I am old-fashioned, so I take precautions to minimize the risk of damage due to electrostatic discharge (often a wrist strap connected to ground) when handling electronic components. The components in these builds are pretty robust, but I would still advise that you at least touch ground before touching any of them.

Build 1​

AD_4nXdeYlI80av37QcxpNLSaerZAqOx-56KewmF9YnL6vBW3N6ZTGeTSNTuX8EUo0wnkqo22Fgke9YaOGdrq2MR_s_IimW-mzg-mRGDeDdMv0DohLkvY7XRUddVdL5GiNNbl7BhCj4pLg


The first build is based on the NanoSound One DAC with the Argon One M.2 case. The NanoSound One DAC uses the TI PCM5122 DAC (112 dB SNR). The Argon case makes it possible to integrate an SSD for the sound archive. Mine is 2 TB, which is sufficient for all but the largest collections. My collection of 3700 recordings (mostly FLAC) consumes only about 750 GB. For most people, a 1 TB SSD would suffice – and you could knock $52 off the total below ($259 total).

Here is an image of the first layer of the stack inside the case with the 2 TB SSD.

AD_4nXeIuPV_PaIlDfmLFEvJvkAFYDa2HqdJDHunZCrrTKZW-5sIyDfpEJrbJ6I4jNzIVyp-N6BeVLGVI9j0xGBww8dM2CukemlJO25zpp4BhbQrO4_6itg0CSHHCSJNIfmxzswp4wOB


Here is a table of parts with approximate prices as of this writing:

Raspberry Pi 4 Model B/4 GB $55
NanoSound One Hi-Fi DAC Case $80
M.2 SATA SSD board $20
Power supply $8
microSD card (minimum 2GB) $10
Fikwot FN203 2TB M.2 SATA SSD $108
CD drive $30

TOTAL $311

With the potential savings noted above, the total price could be as low as $249.

I see at the Argon40 website that there is now an option for adding an NVMe SSD rather than the SATA one I specified above. I have no experience with this option. If you are tempted to try it anyway, be aware that the higher transfer rate offered by NVMe would provide no benefit in this application, although the lower idle power consumption might be attractive.

I like this system because it is self-contained (aside from the CD drive, monitor, keyboard, and mouse), and the case includes a turner board that positions all connectors (RCA, USB, HDMI, ethernet, and power) on the back of the case. Also, the case is compact and attractive.

Build 2​

A different approach uses the recently released Raspberry Pi Touch Display 2, a 7” 720x1280 touchscreen display. The dedicated touchscreen display avoids the need to connect a monitor, keyboard, and mouse. You can mount the two-card stack on the back of the display and use the Pibow Frame from Pimoroni to hold it. The bulk storage in this system is an external USB SSD.

AD_4nXeI-32P-adl0OfP-4Uw7iRDlb_pVlmdfShQNHNkasVBI4u0vHezyMYq9MHAnA808dBZJh4ppJWRQ01VOiVY1e2A2VJ4vwYzyDvPKbsJaI0TbvbHsnaazSTto7FymhqVl6PrCJLupA


Here are some tips for achieving the best experience:
  • Set the display to landscape mode: On the main menu, go to Preferences | Screen Configuration | Screen Orientation.
  • Scale the display using the command
wlr-randr --output DSI-1 –scale=1.3

Put this command in ~/.config/labwc/autostart to activate the scaling automatically.
  • Use WaxConfig to set the width of the right panel of Wax to 400 (on the Parameters tab).
  • Operate Wax in fullscreen mode. To activate fullscreen mode, run Wax and then type Alt-space to open a menu for controlling the window. Select fullscreen. (Repeat that procedure to get out of fullscreen mode.)
  • Mount the Raspberry Pi stack with the connectors facing up. The plugs (power and audio) will not fit otherwise even using 90° adapters like this and this. Use the adapters instead to encourage the cables to remain hidden behind the touchscreen.
  • Try using a stylus if you find yourself fat-fingering because of the small size of the 7” touchscreen.
AD_4nXe4BQ-SAxR8QRe_KlFlhAP4LwHjTnjn6z3L1EUb_P90fw90ZpFKsk7eygvluWZOC_zGu3vt0lcMwnIehpb325NI7-vvpWcTFpSMPyjgZnDU-KVmKoqU7-vlyJIDcBpcLGooIesr2A


Here is the parts list:

Raspberry Pi 4 Model B/4 GB $55
HiFiBerry DAC2 Pro $45
Raspberry Pi Touch Display 2 $60
Pimoroni Pibow Frame (£12) $15
Crucial X6 2TB SSD $110
2 GB SD card $10
CD drive $30
Power supply $8
RCA 90° adapters $2.50
USB C 90° adapter $3
Touch screen stylus $2.50

The total with the 4 GB Raspberry Pi 4B and 2 TB SSD is $341. With the 2 GB Raspberry Pi 4B and a 1 TB SSD, the cost would be $279.

There are some situations where the integrated touchscreen monitor is very convenient. It is inelegant that the stack is exposed, but the monitor hides it pretty well.

I suspect that most members of ASR own an external DAC. Replacing the HiFiBerry DAC2 Pro with the HiFiBerry Digi+ Standard ($35) provides an S/PDIF output (and trims $10) to which you can connect your DAC. I have read reports that it is also possible to output audio via USB. No doubt other members of this forum have more knowledge about this option.

Build 3​

A third approach is to use Amir’s ASR Music Server (AMS). Obviously, AMS is more expensive than either of the previous builds, but it offers advantages. Foremost among these is that it looks more like an audio component. Passive cooling to avoid the use of fans is very nice, and it is neat that the CD drive is built in. The power supply is in the case rather than a wall-wart or power brick. The computational power is greater than it needs to be, but the result will be a user interface that is more snappy.

The most straightforward way to run Wax on the AMS is to install a Linux OS. I use Kubuntu. Presumably Ubuntu would also work. Indeed, I believe that Wax would run on any Linux that provides GTK3, GStreamer, and Python 3.12. You can run Wax on Windows 11 under WSL 2, but I am aware of one limitation: WSL 2 does not support access to a CD drive as a device, so it is not possible to rip CDs. To circumvent this limitation, use Media Player to rip CDs and configure it to put sound files in the transfer folder of Wax so that you can then import them. Media Player does not embed cover art, so you will have to copy and paste art from Amazon or wherever you go for cover art. The import function of Wax works normally under WSL 2. Sound files that you purchase probably have cover art embedded, so obtaining cover art will not be an issue.

Remote control​

To realize the full benefit of Wax, you will want to be able to interact with Wax from the comfort of your listening position. That way, you can select music to play, control the volume, read about the music, and even polish the metadata all while enjoying music. I have a 12.9” iPad Pro and a Chromebook that I use for this purpose. I find that Raspberry Pi Connect works well once you establish the connection (which can take many seconds). If you use the AMS with Linux, you could use VNC, but I have found that NoMachine works much better. It is free for home use. With NoMachine, Wax feels native on my remote platforms.

If you are like me, you will always operate Wax remotely, so you do not actually need to connect a monitor, keyboard, and mouse to build 1 or build 3. A headless system typically integrates more elegantly in a home entertainment system. If you want to use a keyboard when ripping, connect to the headless system from your desktop system.

Conclusion​

When I started working on Wax, I had a vision of the ideal experience, but that vision was infeasible with the technology available at the time. Modern technology enables a solution that transcends my wildest dreams. It boggles my mind that a collection of recordings – LPs and CDs – that used to cover an entire wall now fits entirely in a tiny case with a parts cost of only $311. This system is not only more compact, it is more convenient. I can easily select any work to play from the comfort of my listening position without having to search through shelf after shelf to find a recording. I can read liner notes and Wikipedia without stirring to learn more about the music. I have been honored to share this vision with many music lovers, but I would be pleased if these postings help other music lovers who are handy with electronics to share it as well.
 
  • Like
Reactions: EJ3
Back
Top Bottom