This page provides copies of some of the software I've written to process or analyse digital soundfiles. You are welcome to download copies and use them if you wish. Each program includes a text ‘help’ file which you should read before trying to use the program. I have provided a compiled binary so you can use the programs without having to compile them. But I have also included a copy of the source code which is in ‘C’ so you can examine this. You are welcome to modify the programs or convert them for other operating systems if you wish.
Here I have provided two forms of program. One type is for use on RISC OS (RO) computers and are provided as zip archives. The other is for use on Linux machines and are provided as tgz archives. Note that as they stand none of the programs will run on Windows or MacOS as I never use those operating systems. However the RO versions should work using a RO emulator like RPCEmu or VirtualRPC. The Linux versions are provided as ROX applications, but the help file explains how they can be made to work on other Linux setups.
The output from some of the RISC OS versions can be plotted using applications like !Tau or your favourite spreadsheet. The ROX versions produce Veusz output files that can be used to load the results and display them using the Veusz scientific plotter application. I currently have a number of other programs that only exist in RISC OS form. At present I am (slowly) producing ROX Linux versions. As these are done I will add both versions to this page and make them available for other to use.
I originally started writing RISC OS versions of these articles for my own use, and as examples for a series of articles in Archive (a magazine for RISC OS users). Over a period of years the programs have been developed and improved. You can find a number of articles explaining the details of the RO versions on my webpages on the Archive articles. The Archive webpages also provide copies of the versions of the programs which I had produced at the time each article was published. I have also used the programs to produce results for articles in Hi Fi News and on my websites. Webpage versions of the Hi Fi News articles/results are linked to my main AudioMisc page
More recently I have also started using Linux and began to produce ROX Linux versions of the programs. It then occurred to me to produce this webpage to ensure that the most up-to-date versions of the various WAV programs were easily available.
I have split the following into three sections: The first section contains programs for which I have written both ROX/Linux and RISC OS versions. The second and third sections are for ROX/Linux-only and RISC OS-only programs.
Section 1: ROX/Linux and RISC OS
Unless stated otherwise, the following ‘WAV’ applications are all designed to work on basic LPCM WAV files with the common standard 44-byte header. They should work with files that are in mono or stereo, 16 or 24 bits per sample, with sample rates up to 192ksample/sec. Hence they should be useful for all the common sample rates in domestic use.
!WAV_Maker (RO) / WAVChopper (ROX Linux).
This program allow you to chop up a long sound file into smaller segments. This is useful if you wish to edit down a long recording to remove sections and/or divide it into tracks for writing to an Audio CD.
!WAV_Cleaner (RO) / WAVCleaner (ROX Linux).
This program differs from the others because it should be able to read WAV files that have extended metadata chunks in the header. It allows you to generate a ‘cleaned’ version with the same sound data payload but with the simple 44 byte standard WAV header. In effect it lets you produce a clean copy which the other WAV applications can then read and understand. I have found it works OK with a variety of types of LPCM WAV file that have added comments and metadata. For example it works with BWF files (Broadcast WAVE Files) and generates a clean copy. But it probably won't make sense of every type of LPCM WAV file as some of them have non-standard or fancy features I have not encountered.
!WAV_Stats (RO) / WAVStats (ROX Linux).
This program generates a statistical analysis of the peak and rms levels found in a WAV file. This is useful for assessing the dynamic range of the recording and to check for possible clipping or other problems. It provides output showing how the level varies with time and also provides histograms of the percentage of time the sound is at various loudnesses.
!ReadWAVHeader (RO) / ReadWAVHeader (ROX Linux)
This lets you examine the metadata in the header of the WAV file to check the sample rate, number of bits per sample, etc. It also saves a listing of the sample values from a section of the sound sample payload at the start of the file so you can examine the waveforms if you wish. It also lets you check that the WAV file does have a recognisable 44 byte header, or a more extended set of metadata. (As with other WAV apps in the series it may fail to recognise WAV files with extended metadata in the file header.)
!WAV_Reader (RO) / WAVReader (ROX Linux)
This performs a similar function to ReadWAVHeader, but allows the user to choose a portion of the soundfile payload waveform to examine and display.
!WAV_Gen (RO) / WAVGenerator (ROX Linux) This allows you to generate WAV files containing various types of waveform. The forms include Sinewave, Squarewave, Trianglewave, Periodic Impulses, and user defined waveforms. The output can be either 16 or 24 bits per sample, and the sample rate can have any of the standard values from 44.1ksamples/sec up to 192ksamples/sec. You can therefore use this to produce test files of various kinds.
!WAV_FFTScan (RO) / WAVFFTScan (ROX Linux) This lets you do a series of 8k-point Fast Fourier Transforms on a user-chosen section of a WAV file. It produces various results. The main result is a time-averaged power-frequency spectrum of the chosen section. It also examines each 8k-point section of the sound data and computes other useful information. For example, if the signal is nominally a sinusoid it will report the frequency and level of the sinusoid and determine the THD (Total Harmonic Distortion) value.
!WAV_Difference (RO) / WAVDifference (ROX Linux) This lets you examine the differences various kinds of processing can make to an LPCM Wave file. Given two similar input WAV files it subtracts the sample values in one of the files from the samples in the other. This is done on a sample-by-sample basis. The results are used to create a new ‘difference’ WAV file. In effect this contains the difference between the waveforms in the two input files. So, for example, would reveal the changes produced by something an mp3 encode-decode cycle.
!WAV_IQGen (RO) / WAV_IQ_Generator (ROX) These applications allow you to generate an output LPCM Wave file containing an ‘IQ’ waveform for performing an IQ Test on a system and determine its timing behaviour. You can find more details in the included help files and on the IQ Test webpage.
!WAV_IQ_FFT (RO) / WAV_IQ_FFTScan (ROX Linux) These applications carry out a detailed analysis of an IQ waveform LPCM Wave file. If you record the output of a system playing an IQ test file then these applications let you assess the timing details of the playback and detect variations in playing rate. The result is a sort of modern “wow and flutter” measurement, but with a very high sensitivity that can detect rate variations of the order of a part per billion! An example of the use of this analysis is shown on the Time For a Change webpage.
!PeakExpandHDCD (RO) and WAV_HDCDexpander (ROX Linux) are programs designed to expand the dynamics modifications that High Definition Compatible Disc (HDCD) apply to recordings on HDCD-coded music CDs. You can find a fuller discussion of this topic on the webpage where I outline how HDCD is said to operate, and the page where I used these programs to examine some examples of HDCD material.
Section 2: ROX/Linux
FUN_Sweeper. This program works with the FUNCube Pro Plus to generate swept spectrum analyser type measurements. You can use it to obtain wideband RF spectra over the band tunable with the FUNCube Pro Plus.
FUN_Mini_Scope. This program allows the user to examine the output from a FUNCube Pro Plus. It provides both an oscilloscope and a spectrum display. It also provides some basic measured values for calibration and check purposes.
!IyoScope (RO) / ROXScope (ROX Linux) These programs allow the computer to act as a combined audio oscilloscope and FFT spectrum analyser. For periodic waveforms they also evaluate the frequency and harmonic distortion level. For Linux systems with a smaller screen ROXMiniScope is an alternative that shows its output in a smaller window.
ROXTone. (ROX Linux) This is a very basic sinewave tone generator program. It was written partly as a demo of how to use the Linux ALSA library to directly output audio to computer sound hardware. It also serves as a simple sinewave generator for test purposes when used in combination with ROXScope. This version can play tones at sample rates from 44100 (Audio CD) up to 96000 samples/sec if your soundcard can cope!
The following programs are ROX applications for use with a DVB tuner. In each case you would need to install the standard distro packages to provide commands like scan, tzap, etc. Each application contains a Help file and a Settings file you should edit to suit your requirements. The source code, in 'C', is included and you are welcome to adapt or improve the programs as you wish.
DVB_Record. This helps you make recordings from DVB using a computer tuner that responds to the tzap command.
DVB_Traffic. This logs data from the DVB tuner and can be used to monitor the results. It logs two sets of information. One log counts the received data packets and shows the rates for various packet identity values (PIDs). This info can be used to examine the data rates for the video and audio, etc, for the stations carried on a multiplex. The other log records details of the signal level, signal/noise, and error rates to examine any variations in reception.
ROXAudioRecorder. This is a simple ROX application that allows you to make stereo audio recordings. Given a suitable input card/device for capturing audio it can record directly to an LPCM Wave file. Whilst running it provides a running report on the progress of the recording, including some ‘PPM’ level indicators. So far as possible it will transfer sampled values from device to file without any conversions or alterations to ensure optimum quality. It should work with most ALSA-based cards and devices that can supply LPCM stereo. It has been tested OK with devices that can record both 16 and 24 bit samples.
Section 3: RISC OS
!SoundCheck (RO) This program examines your RISC OS machine and reports what it can discover about the current sound settings, etc. I produced this because modern RO systems seem to have an increasingly complex set of controls, modules, and stages though which the audio is passed. The result can be confusing as so many ‘cooks’ now have a chance to change the results on its way to your ears! The !help file explains the results you get and also provides some examples of how you can alter some settings if you wish.
Upsampling. I have also produced two programs that employ ‘upsampling’ so people can experiment with its effects. One of the programs generates a new file with upsampled contents. The other can be used on a modern RISC OS machine to play a wave file using upsampling. You can see the upsampling page by clicking here. Direct links to the programs are given below. The zips include the source code and help files.
!ClassicRip This is a simple program that can make the process of ripping sets of tracks from CDs easier. It serves two purposes in addition to ripping the audio to wave files. 1) It generates timing data when saving series of successive tracks to one file. This makes it easier to, say, find movements of a classical work when the work is ripped as a single multi-movement file. 2) It allows the user to chose and compare two different rippers. One is the CDParanoia program. This is relatively slow, but does a lot of checking and attempts to correct any disc or reading errors, where possible. The other is a simple ripper which can rips faster than CDParanoia but only makes minimal checks against possible disc or drive problems. Both rippers are included for convenience. I wrote this partly as a demo/test, but also because it makes ripping classical music easier!
RISC OS and USB Audio
This is a set of applications for use with suitable USB Audio device. It includes:
- !USBPlayer. This will allow you to play standard LPCM wave files using a USB DAC.
- !USBRecorder. This will allow you to record audio using a USB ADC.
- !USBAudioProbe. This will scan your USB system and report the details of any suitable devices it finds.
- !USBScope. This is a simple audio oscilloscope and FFT spectrum analyser. It lets you observe the waveform being captured by a USB Audio device and perform basic measurements to obtains voltages or frequencies for test signals.
The zip file USBAudioApps contains these four program.
At the time I write this (26th Feb 2014) you need to load a set of modules before the programs will function. These come from two places:
- New USB modules which include the support for USB audio. These have been developed by Colin Granville. It is intended that these will be added into the standard RISC OS ROM image in due course. Note that you need to be using RO5.18 or later for these to work. The modules are accompanied by Colin's demo/test player and recorder programs.
- New USBAudio module. This has been developed by Dave Higton and it should be loaded after installing Colin's modules. It is accompanied by Dave's test/demo player. You can also find the API, etc, at http://davehigton.me.uk/Audio/. This is also to be included in future releases of RO.
At present these modules and programs are experimental test versions. However they are known to work on an Iyonix as well as on modern machines like the ARMiniX and PandaRO. In principle any USB Audio device that adheres to the official USB Audio 'class' releases/specifications should work. Unfortunately many makers either fail to ensure this or can't be bothered to tell anyone if this is the case! Examples of devices known to work are:
DACs (players): Various Cambridge Audio DACs, e.g DAC Magic and DAC Magic Plus. the ARCAM rDAC. The Halide Bridge.
ADC+DAC (play and capture audio):
The Focusrite Scarlett 2i2 - This will record and play at the standard rates 44.1k 48k 88.2k and 96k and handle 24bit samples.
The Behringer UCA202 - This will play 32k 44.1k and 48k. It will record at these rates, half these rates, and a quarter of these rates. However it is limited to 16bit resolution.
The Behringer UMC202 - This will play and record 44.1k 48k 88.2k and 96k with 24bit resolution.
I will add other devices to this list if and when someone confirms they work with the RO USB Audio modules. Note that as things stand the test/demo players and recorders only function when you wish to play or record material that matches a sample rate provided by the USB device.