This page provides copies of some of the software I've written. 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 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_NoiseShaper (RO) / WAVNoiseShaper (ROX Linux). This program can be used to Noise Shape 24bit high resolution files down into 16bit versions. The use of Noise Shaping allow the 16bit result to contain more of the detail in the original 24bit version, and to have a lower audible noise floor. When you store the files in FLAC format these 16bit files may also take up much less disc space than the 24bit versions. The programs will work for sample rates up to 384k. For current RO users a particular advantage is that the 16bit Noise Shaped files are compatable with more RO players than 24 bit files. The noise shaping also optimises the results using 16bit systems
!LP_WowAndFlutter (RO) / LP_WowAndFlutter (ROX Linux) This program allows you to examine and measure any “wow and flutter” produced by an LP replay system, etc. You need to be able to play a test LP and record a suitable test tone, capturing the result as an LPCM Wave file. This program can then analyse your recording and give you wow and figure values, etc. The results should comply with the AES standards for wow and flutter measurements. (N.B. These versions currently only accept input files at sample rates up to and including 96k.)
From 5th November 2019 the Linux/ROX version of this program has been updated and expanded to version 0.26. It now gives fuller reports in improved graphical form via use of the ‘Veusz’ plotting package.
From 25th November 2019 the RISC OS version has also been updated and can now plot its results as a set of graphs, etc, in a DrawFile. This version uses DrawGen, and the relevant modules and source code are provided.
!CD_HealthCheck (RO) / CD_HealthCheck (ROX Linux) This program allows you to carry out a statistical examination of the audio sample values contained by an Audio CD in the optical drive of your computer. The results allow you to spot various kinds of flaws caused by poor analogue to digital conversion or digital processing when the CD was mastered. Note that the Linux version requires you to have installed cdparanoia as it uses that to read the CD. The RO version uses a RO-specific access method. See Flac_HealthCheck below for more details as the two programs perform similar an equivalent analysis.
!Flac_HealthCheck (RO) / Flac_HealthCheck (ROX Linux) This program carries out a similar statistical analysis to !CD_HealthCheck. However it examines flac format sound files. It should work with stereo flac files that contain either 16 or 24 bits per sample with standard sample rates up to 192k samples/sec.
You can find out more about the details of the analysis it performs, and how to interpret the results by looking at two wepages which give examples of results. One looks at results from Audio CDs, the other from Flac files.
This application makes use of the standard flac utility program. Linux users should ensure this is installed before using Flac_HealthCheck. If you use RO and don't already have a RO version of the flac utility you can get a zipped version from here. Copy the flac file from this zip into the ‘library’ directory on your RO machine before using !Flac_HealthCheck. My program simply uses the standard version of flac as generated by others. If you wish you can obtain the flac source codes from risos.info or from xiph.org. Please read the !Help file inside Flac_HealthCheck for more details.
!ClassicRip (RO) / ClassicRip (ROX Linux) This is a simple program that can make the process of ripping sets of tracks from CDs easier. It allows the user to specify sets of successive tracks to be saved into a file. This is particularly useful for ‘classical’ music where you may wish to have a set of movements or sections of a work combined in one file. It also generates a text file giving the time offsets of the starts of the contents of these tracks. This makes it easier to find specific movements or sections when required.
The RISC OS version provides a choice of ripping utility. 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.
The above version for RISC OS runs via a TaskWindow or single tasking. However Terry Kelley has now created a WIMP interface for ClassicRip, and users may find this more convenient.
The Linux version uses CDParanoia for the actual ripping, so you will need to have installed this for ClassicRip to function.
I wrote ClassicRip partly as a demo/test, but also because it makes ripping classical music easier!
!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
AVchopper. This program provides a convenient way to ‘chop up’ an AV file into convenient sections. It operates on the basis that you give the program a list of chop times (in hh:mm:ss
format) from the start of a specified input file. It then reads though the input file and creates a series of new files. Each of these new files contains the AV data from the input file for the relevant time interval. The program uses either ffmpeg or avconv for the chopping process, so you need to have installed one of these for it to work. As supplied the program is set to chop up .ts
(transport stream) HDTV files, but this can be altered to any file format that ffmpeg or avconv can handle. The program uses the ffmpeg/avconv settings that force the audio and video data payload to remain unchanged, so the chopping process should not degrade the quality of the video or audio. However ffmpeg/avconv may ‘tidy up’ any quirks of the container as the content is copied to the output files. So in some cases the result may then play more reliably!
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. (Updated to version 2 in May 2019.)
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. From January 2016 onwards RISC OS supports the ability to select alternative sound devices. Provided you have a recent version of the OS which includes this ability and have suitable hardware it is now possible to send audio via HDMI to your monitor or to other HDMI equipment. From version 1.22 onward SoundCheck can report the relevant details of your OS sound system and HDMI device.
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.
RISC OS and USB Audio 2021
Most of the applications/programs listed below were developed a few years ago. More recently I have produced some new USB Audio applications.
!USBAudioProbe2 program will scan your USB connections searching for any USB Audio devices it can find. It will then list their details. Note that not all RO systems currently support USB Audio, so this may fail to find any are connected if you machine+OS doesn't support their use! However if devices are listed the details will tell you the available sample rates, sample sizes, etc, they can handle.
!USBScope_2p04 is a new version of !USBScope that offers some improvements over the older version.
!USBScopePlus extends the functioning of !USBScope by adding the ability to play out user-controlled test waveforms whilst capturing audio input. Given a suitable combination of USB Audio DAC for output and a USB Audio ADC for capture it can act as a ‘test bench’ for making measurements on the performance of items of audio equipment. Given suitable USB Audio devices like the Focusrite 2i2 USB DAC/ADC, etc it can provide results that match those obtained by professional audio engineers. Version 1.01 also works with Class 1 devices like the Behringer UCA202, although they give poorer performance. The new version also adds the ability for the user to define additional waveforms which the program can then play out.
These new programs make use of a new set of USB Audio library proceedures which Colin Granville has created. Without Colin's work and kind help I would not have been able to write them.
Older USB Audio programs...
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. (N.B. This version is now superceeded by the newer one, linked above.)
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 softloadable 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. (The versions available here were updated at the start of March 2016.)
- 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.