Tuesday 20 September 2016

Batsound under Linux and Macs

When running courses on analysing bat echolocation calls, I often get asked if it's possible to run sound analysis software on Mac computers (and occasionally Linux too). There is of course Kaleidoscope from Wildlife Acoustics, but as I run my courses using Batsound, that's not much of a help. You can of course run windows within Linux and Mac OS using virtualisation software (most notably parallels on a Mac), but this has some serious performance issues unless you have a fast machine, plus you need a legal copy of Windows as well.

I have been able to get older versions of Batsound to run under WINE in Linux. WINE stands for the recursive acronym Wine Is Not (an) Emulator and allows Windows programs to run on Macs and Linux machines without having to install windows. It basically converts calls to windows functions into Mac or Linux functions on the fly, so (should) run faster. Wine is also free. However, more recent versions of Batsound have failed to run as they need a Microsoft Visual C++ runtime library as well which is happy under Windows, but less so under Linux (and I assume Macs as well).

Nevertheless, after a lot of tinkering, I have been able to get the latest version of Batsound (version 4.2 not Batsound Touch) to work under Linux. This process should also work for Macs as well.

I've been using crossover by Codeweavers. This is basically a front-end to WINE. It's not free, but profits from Crossover go back into the development of Wine. You can download a trial version and test it out for free though. Crossover makes the installation of windows programs a whole lot easier.

The basic process is to create a Windows 7 bottle to contain all your Batsound programmes, then install the Visual C++ x86 redistributable provided with Batsound (the 2012 version). This will install but not function under Crossover but needs to be there for Batsound to install. Next. install Batsound. Batsound will install and the installation will finish, but Batsound but not work. The finally get Crossover to install the 2010 version of the Visual C++ redistributable which does work under Crossover and which batsound will use. Batsound should work fine. The only thing that seems to be missing is the ability to export graphics, but you can always use a screen grabber for that anyway.

Here is the process step by step:

1. Download and install Crossover.

2. Create a new Windows 7 bottle by selecting the wine bottle icon top left and then clicking +add at the bottom. make sure it's a Windows 7 bottle from the drop down list and give it a memorable name.





3. Now we have a Windows bottle with it's own C: drive and programs directory.

4. We now need to install the Visual C++ redistributable into that bottle.

5. Select the bottle and click Install Windows Software (bottom right).


6. Click Select a Bottle to Install to (you have to keep making sure it's going to install it into the right place - if you find a new bottle appears on the left, it's installed the software to its own bottle and it won't work).


7. Continue and click Select Application and you will be faced with a menu of windows software profiles you can install (we will use these later...). Go to Unknown and Other applications and then Continue.


8. Select Choose installer file Navigate to your Batsound install folder and select vcrredist_x86. This is the Visual C++ redistributable we will need to make Batsound install. Click Open.





9. The redistibutable will now install.


10. Once that has completed, now install Batsound. It's the same process as the redistibutable.

Select the bottle:


Select an application to install and go to Unknown and Other


Select Batsound


And install it.


If it's working so far, you should get the Batsound registration page to enter the serial number.


If you don't get the option to enter your name and serial number then I'm afraid the installation has failed. Go back, delete the bottle and try again.

11. Now Batsound has installed but it won't work. For that we need an older WINE compatible version of the C++ package and we're going to let crossover install that for us.

12. Select the bottle again.


13. Click on install windows software.

14. This time, when you click on select an application to install, type 'visual' into the search box. A lot of options will turn up, but select Microsoft Visual C++ (10.0) Redistibutable, and then click Continue.


15. And then click install.


16. Crossover will first install an xml parser and you need to enter a name (can be made up if you're feeling cheeky).



17. And then the Redistributable will install. Click yes to reading the terms and conditions.


18. If all that goes according to plan, then once that has installed, Batsound should run. Click on your bottle, and then double click the Batsound icon.



All functions seem to work so far, the export graphics option will export a file but it will be empty. I assume there are other graphics libraries that are needed somewhere along the line. Even the audio playback works.

Anyway, this is how I've gotten it to run. If you want to try it I strongly suggest that you download both the demo copies of Crossover and Batsound and try those first before buying either. Oh, and I've not tested it on a Mac, only Linux, but I'd be interested to hear how that goes from any mac users out there.



Wednesday 29 June 2016

Bat data and GIS

There is still some way to go with seamless integration of GPS data and sound capture data, but the new release of Map-a-Bat Pro goes some way to addressing that. Many detectors now either have built-in GPS or GPS as an optional add-on, and being able to extract that data and map it allows you to locate and map your bat contacts. Not only does this help with surveys, but by using the data with free GIS tools such as Google Maps and Quantum GIS can help you to identify flight lines, important habitat patches and better understand species' habitat preferences.

The workflow for extracting GPS information can sometimes be a little challenging (Google Earth can be a bit annoying in this respect) but the rewards are great, and a little time investment in understanding how to process the data can save a lot of time in the future and add great value to project reports.



From map-a-bat promo material from Wildwood Ecology.

Thursday 23 June 2016

Auto-identification software.

Last week I ran two workshops for BCT on bat identification. The first whole day workshop was looking at manual identification of bat echolocation. We looked at call characteristics and how we need to understand issues such as directionality, attenuation and analysis protocols to understand what is going on - basically to 'read' a sonogram for the story it tells. Most of this was done through Batsound, which I still think is the best single package for sound analysis, though it does lack some of the other features such as GPS extraction (though I believe the new version of Batsound Touch can do this in some form - it can certainly tag sound files with GPS location anyway).

The second whole day workshop was looking at automatic identification and some of the packages that can be used to do it. We reviewed the principles behind it, some of the assumptions it makes, then looked at the range of software available. We then focussed on Wildlife Acoustics 'Kaleidoscope' and Biotope's 'Sonochiro'. We ran the same sets of sample calls through each and looked at how we interpret the outputs. The participants then had an opportunity to try each of the packages themselves on sets of pre-identified calls and also on some standard field data from a range of different hardware types. Thanks to both Wildlife Acoustics and Biotope for the training licences for each.

In general we found that both packages were pretty good at picking out pipistrelles, though identification of other species was variable. The take home message was really that these packages help to scan huge volumes of files and identify species of interest, but those files then really have to be manually checked, or at least a sub-set manually checked for validation.

This is pretty much what BCT recommends in some guidelines it has published on its website. With fifteen people on each course, it was a great opportunity to explore bat identification. I certainly learnt a lot, and I was running it. We're running it again in September.

Wednesday 22 June 2016

Bat call broadcasts.

For training purposes, I've been using the Pettersson D1000x to play back previously recorded bat calls so that participants at workshops can then listen through heterodyne, frequency division or even time expansion to practise using bat detectors. The calls have been broadcast through an L400 loudspeaker which is pretty good even up to 100 kHz.

Being a 'belt and braces' sort of person, I was always worried that if the technology decided not to work one day, then the whole workshop would be wasted, so I looked around for another way of broadcasting high frequency .wav files. I initially tried LabVIEW, but the problem with the version I had was that it wouldn't accept .wav files with high sampling rates, so you had to read in the file in other ways, which was cumbersome. In the end, I found a quick and easy way in Matlab.

You will need the Matlab base package, and the data acquisition toolbox. You will also need a compatible data acquisition card capable of Digital to Analog output of about 500 kHz. I use a National Instruments USB-6251 box. You will need a suitable high frequency loudspeaker and some original files to broadcast. If they are time expanded you will just need to put in a little function to raise the sample rate back up 10x (be careful that your card can handle arbitrary sample rates though as 44.1 kHz becomes 441 kHz which some cards may not be able to deal with).

The Matlab code is really ridiculously simple, and easy to adapt to different cards or situations.


% Matlab .m script to select a .wav file and then play that file back


% through a USB D/A Device - in this case a NI USB-6251.


%


% GUI commends to select a file and get the path to that file


[filename pathname] = uigetfile({'*.wav'},'File Selector');


fullpathname = strcat (pathname, filename);


% Use audioread to open the file identified from Pathname: Note that will


% not open batsound .wav format files. Use Batsound to open them and then


% save as standard .wav files first.


[Wave_File, Fs] = audioread(fullpathname);


% Fs is the sample rate it gets from the .wav file. Report it.


Fs


% Plot an oscillogram of the signal to check it has loaded properly.


plot(Wave_File)


% Plots the sonogram though the frequencies aren't right. Currently commented


% out as it takes ages for long files. The y axis option swaps the x and y


% axes to put frequency up the side.


% spectrogram(Wave_File,128,120,128,1e3,'yaxis')


% Reports which devices are found - ni: National Instruments USB-6251 (BNC)


% (Device ID: 'Dev1')


devices = daq.getDevices


% ni is the device label, creates a session.


s = daq.createSession('ni')


% Set the sampling rate to that of the loaded .wav file


s.Rate = Fs


% Add a D/A Output channel. Dev1 is the device and ao0 is the analog output


% channel: 1 2 channels ('ao0','ao1')


addAnalogOutputChannel(s,'Dev1','ao0','Voltage')


% Loop ten times. Change if you want more or less.


for lp = 1:10


% queue the data to the D/A device


queueOutputData(s,Wave_File)


% Start the output of the data and return command to matlab when done


startForeground(s)


end

One day I might get around to writing a nice GUI for it, but this works very well as it is.































Tuesday 5 April 2016

Pettersson M500-384

Pettersson have just released a new version of the M500 ultrasonic microphone, the M500-384.  While this has a lower sampling rate than the standard M500 at 384 kHz rather then 500 kHz at 16 bit resolution, it can be used on a number of different devices.


The key feature is that a range of operating systems will detect the device via the USB port as a standalone USB microphone, so there is no need for custom drivers. All you need then is an app or program that will support 384 kHz sampling rates.


Audacity should work on all available platforms such as Linux, Mac and Windows. For android, a number of apps have been tested as working, and will provide either recording only, or recording plus a scrolling sonogram, screen.


USB Audio Recorder Pro will record directly from the device but not show you what you are recording or give audible feedback.
Bat Recorder is a fully fledged app that works with USB microphones and gives a nice sonogram, display. Importantly, this app allows the audio monitoring of bat calls, making it function like a normal bat detector.
USB Bat Detector also works but is reported to currently have some issues.






While this device will work with a range of devices, it requires the device to support USB OTG, which is where the device can act as both master and slave. There are apps on the Google Play Store which will test whether the device can support OTG,


This looks like a very nice device that can be used in a whole range of different situations. One thing to note is that you will still need some form of software to analyse the recordings. These applications will record and also display during recording, but will not allow you to review an analyse the signals, you will still need something like Batsound or the new Batsound Touch for that.

Monday 16 June 2014

Bat lures


How to make a bat lure.


Acoustic lures are now sometimes being used for bat surveys whereby ultrasound is used to attract bats to mist nets or harp traps. This can be especially valuable in dense woodland which is difficult to survey, and where bats may be feeding high up in the canopy. The addition of acoustic lures to Natural England Class 19 and 20 licenses also means that more consultants are now able to use this technique.

The broadcast of ultrasound has always been problematic however. Most commercial loudspeakers only work up to the low 20 kHz range, and even then are relatively low-powered. The excellent Ultrasound Advice S55 loudspeaker and amplifier is no longer available which used to be the only commercially available speaker to be able to output at sufficiently high levels over the full ultrasound range used by bats.

There are now a number of commercially available acoustic lure systems, but here I will show how it is possible to make an acoustic lure for bats and generate the sound files necessary based on separate components which are currently available.
The two major limitations are the loudspeaker, and the signal generator.

The speaker

The Pettersson L400 ultrasound loudspeaker is a specialised tweeter housed within a rugged aluminium box and powered by either eight AA batteries or a 12-28 Volt external supply. It can handle a frequency range of between 10-110 kHz at up to 100 dB SPL at 1 m. It has a built-in volume control knob and a female phono connection to accept input signals. It’s available from NHBS at £1400 or direct from Pettersson.


There is also a standard camera tripod mounting bush on one side allowing it to be mounted on a tripod. The frequency response (below) shows it more than capable of outputting signals over the range used for acoustic lures.


The extended frequency response should also allow realistic reproduction of bat echolocation calls, but this would require very high sampling sound cards (which are only now becoming available) or digital to analogue output cards running via data acquisition software such as Labview. There are now some sound cards that operate at 192 kHz which could potentially allow playback of frequencies up to 85 kHz.
The broadcast system

This used to be a severe limitation in the broadcast of ultrasound signals in that you need a sampling rate at least twice that of the highest frequency signal you want to output. The typical industry standard maximum sampling rate was 44.1 kHz, meaning that you could only output signals up to 22 kHz. This would actually work fine for social calls of pipistrelles, but is a bit of a limitation for anything else. However, improvements in technology and demands from consumers for better quality audio has meant that higher sampling rates are now available in small affordable devices, and the new maximum sampling rate often quoted is 96 kHz. This means that it should be possible to output signals at up to 48 kHz, good enough for low frequency bats. The broadcast of full bat echolocation calls is still very specialist and usually requires complex (and expensive) data acquisition cards. However, 48 kHz is more than good enough for an acoustic lure.


One such device is the Roland R-05 recorder (sometimes marketed under the Edirol brand – Edirol being just a brand used by Roland). While this device can sample at up to 96 kHz, so theoretically output up to 48 kHz, the specification shows it limited to 40 kHz, probably due to anti-aliasing filters somewhere along the line. The Zoom devices such as the Zoom H1, H2 and H4 also appear to have 96 kHz sampling rates, so should also be suitable, though I haven’t been able to find any specifications on the actual available bandwidth. If you don’t have one of these devices, you could also use the speaker (line) output from a laptop if it supports the higher sampling rates.
Connecting the two

All you will need to do now is to connect the recorder to the speaker, and for this you will need a 3.5mm stereo jack to phono lead. The jack goes into the recorder, and one of the phono leads attaches to the speaker. For the recorder, it is important to put the lead into the Line-out socket, not the headphones socket. If you recorder does not have a line-out socket, the headphone socket may be configurable as a line-out socket through the device’s menu or by a switch. Have a look at the manual.

As your recorder is a stereo device, it can create two separate tracks for each file, a left and a right. If you create the file on one channel (see below) then you will need to connect the right end of the lead to the phono socket on the loudspeaker. The easy way to remember this is that Red is Right. So if you create your file with the lure sound on the right channel, connect the red lead, if it’s on the left channel, connect the white lead. If it’s on both channels it doesn’t make any difference which lead you use. It’s also possible to create a mono file that doesn’t have two separate channels, so again, connect either lead. I don’t suggest you do this as some modern digital devices have trouble with mono files and don’t know what to do with them. It’s safer to create a stereo file as you know it will work.

Now that you have the hardware set up, all you need to do now is to create the lure sound files.
Creating the lure files

One of the easiest and most versatile pieces of software to generate lure files is Adobe Audition, however, this is a costly piece of software (about £250), so I’ll show how to do it in Audacity, an excellent freeware program available for Windows, Linux and Macs from:


So download and install Audacity, which is quite a small program so installs very quickly.

You should now be looking at something like that below:


The first thing we need to do is to change the project settings to reflect both the correct data type and the correct sampling rate.

Go to Edit>Preferences then select ‘Quality’ and change the settings for the Default Sample rate to 96000 Hz and the Default Sample Format to 16-bit.


The Roland recorder, and many others, are capable of recording and outputting files at 24 bit. However, for our purposes, this just means that the files are bigger and there is a greater risk of them not outputting correctly, so it’s safer to stick to 16 bit.

Then click ‘OK’.

You should now see that the project rate in the bottom left hand corner of the screen says 96000 Hz.



Now we’re ready to generate out lure files.

There is a great deal of debate about what acoustic lure files work best, and it’s still a matter of trial and error, so we’ll create one that has the elements of those which are suggested to work well. Once we can create one, then we can tweak all the components as much as we like.

First, create a new blank track.

Go to Tracks>Add New>Stereo Track

This should create a new blank audio track that we can put out generated signals into. By default, what we generate in one track should also happen in the other track too.


So now we’re looking at two tracks, click the mouse into one of the tracks at the far left hand side.

Then go to Generate>Chirp and in the box that appears, select the waveform as Sine, the start frequency as 35000, the end frequency as 25000, the start amplitude as 0, the end amplitude as 1, the interpolation as logarithmic and the Duration as 00.025 seconds, as shown below.

Then click OK



This will generate a tone that will start quiet at 35 kHz, then sweep down logarithmically to reach maximum intensity at 25 kHz 25 ms later. This is the first half of our tone. We now need to make it sweep back up again.


This time, select the right most side of the signal you have just generated, but now go to Generate>Chirp, but do the opposite, start at 25000 and intensity 1, and end at 35000 intensity 0, with the duration still set to 0.025 seconds.


If you now go to View>Fit In Window, you should see the signal looking something like this:


So now we have a signal that starts at 35 kHz, sweeps down to 25 kHz, then back up to 35 kHz in 50 ms.

The sonogram, (in Batsound) looks like this:


Notice that there is a little frequency  ‘blip’ at the bottom of the sweep, this is caused by the joining of the two signals that are not quite in phase. This is a little messy, which is why it’s easier to generate these files in Adobe Audition where we can generate these frequency modulations more easily, but we can live with this.

Now we have one sweep cycle, we can just copy and paste the generated file as often as we like to build up a sequence.

Click the mouse onto the left hand of the waveform and either drag it to the right hand side, or click over the left hand side of the waveform and hold down the Shift key and use the right hand arrow button to select the whole waveform. This is better as the selection stops when you reach the right hand side.

The select Edit>Copy and click or use the cursor keys to select the right hand end of the waveform and lick Edit>Paste or use Control+V and you’ve added a copy of the waveform, so now you have two up and down cycles. If you can’t see it all, go to View>Fit In Window.

Now go to the end of the next waveform and press Control+V again, and you get another one, go to the end of that one and press Control+V and so on. I’d suggest perhaps ten cycles, so the total lasts now 500 ms. In Batsound it now looks like this.


Now we could leave it at that, and it will work, but it’s nice to have a bit of a lead in and lead out time, so we’ll put some silences at the beginning and end, I suggest  500 ms will do.

Select the very start of your sequence, and then go to Generate>Silence. In the box put in 00.500s


Click OK, then go to View>Fit in Window.

Do the same at the end of the track to add a 500 ms silence at the end.

And that’s it!

The final file looks like this:


You can now save your file as a .wav file onto the memory card of your recorder go to File>Export  and choose WAV file format, paying attention to any specific file format rules that might apply to your recorder. The Roland R-05 should be able to play files with any name.


After exporting your .wav file, you can save your project file, it is saved as an .aup file which audacity can then edit again.

If you have a repeat play function on your recorder, then simply play the file but set it to repeat over and over. If you don’t have a repeat play option, then simply copy and then paste the whole of your sequence at the end of the preceding part to double it up, and then copy and paste again to double that up and so on until you have a sequence the length you need.

Once you have mastered the general principles you can create files of almost any structure by combining sweeps, tones, silences, noise and so on.

If you want to make more complex amplitude modulations (i.e. change the loudness up and down), then a good way is to use the Envelope Tool, which allows you to select different parts of the waveform and then drag their amplitude up and down as shown below.




Audacity is a very sophisticated program, and there are better ways of achieving the same end but this requires the use of scripting to combine two or more waveforms to achieve both the frequency modulation and the amplitude modulation.

If the clicks bother you at the bottom of the waveforms then you can use Audacity to high pass the signal above 20 kHz (go to Effect>High Pass Filter then set the slider to 20000 Hz).  It may be that the bats like the clicks. The signals that they seem attracted to bear no relation to their normal social calls, perhaps they’re just very inquisitive animals?
Using real social calls

One final note is that if you have recordings of real social calls, you might want to use those instead. However, you will need to convert the sample rate to that of the output device. In principle, this is can be easily done in Audacity, but there are a number of issues to consider.

 If you have files from a D500x, D1000x or other device that streams the sound files to a memory card, then the file header has the real sample rate embedded within it, such as 500 kHz. In this case if you simply open the file and go to the Tracks>Resample option and type in the new sample rate, Audacity will resample the track down to the new sample rate which should match that of the recorder i.e. 96 kHz to maintain both the duration and the frequencies of the original signal. However, you are in effect aliasing the signal by resampling at too low a sample rate to preserve all the information. This means that parts of the signal higher than 48 kHz will be aliased which may create some unwanted lower frequency elements. Anything below 48 kHz should remain unaffected. It does seem though that Audacity will automatically low-pass the signal before resampling, meaning that aliasing should not be a problem, though obviously anything above 40 kHz will be lost.
The situation is a little more complicated for time-expanded signals which have been recorded on an external recorder. Say a 2 second sequence has been recorded and output as 10x time expansion so that it lasts 20 seconds and recorded onto an external device at a sampling rate of 44.1 kHz. If we resampled this signal up to 96 kHz, we would still have a 20 second long track where all the frequencies were 10x lower than we needed, we would just have a signal with a higher sampling rate.

First we need to change the sample rate in the file header to make the sequence 2 seconds long again, and so with the drop down box from the ‘Audio Track’ option to the right of the track, select ‘Set Rate’ and choose a sample rate 10x that of the original file – if it was 44.1 kHz, select  Other’ and type in 441,000 Hz (note that Audacity works in Hz rather than kHz so always multiply any kHz frequencies by 1,000).


Now we have a file of the right length (2 seconds) and with the right frequencies, we have to choose the Tracks>Resample option and set it to 96 kHz, to allow out recorder to play it.
It should be pointed out that resampling can sometimes introduce some nasty artefacts into recordings, so always look (and listen) to the recordings afterwards to make sure they are faithful to the original.
 
I should add of course that ultrasound is very directional, and will be beamed quite tightly from the loudspeaker, higher frequencies being more directional. So a low frequency (15-20 kHz) signal will be broadcast quite widely, while a 40 kHz signal will be pretty directional. The Sussex Autobat has the famous 'twiddler' that broadcasts that signal around (and also adds some amplitude and frequency modulations that appear to make the signal more attractive), so using the L400 it would be best to change the direction of broadcast frequently during a session.