A Max/MSP newbie muddling through the of subjective testing for audio! This is the first of three posts which cover the test design for my research project. Click for two and three.
With the project moving at a nice pace I wanted to share some information with you about the test design.
Iin the subjective testing stage of my project, I am asking listening test participants to compare two recording extracts and answer some questions on them. I am testing three arrays, a traditional and two variants of a Soundfield recording. All recordings were done simultaneously. The ITU BS1116 standard for “the subjective assessment of small impairments in audio systems including multichannel systems” applies to my project in the most suitable way. There are certain key requirements which are set out by the standard which include:
– Test participants must be able to switch between recordings as they wish with no loss of place or jump in the sound (eg. Skipping a few sections)
– To avoid bias, test material should be randomised (see post 2)
– The transition between each sound extract must be 80ms in length.
– other things (too much to list!)
My problem was, I did not know of any way to do this without me being in the test room with the participant and even then, human error would be inevitable with timing differences between each switch being different, that and a whole host of problems to say the least! The bottom line is that this could be off putting to participants. Added to that, I needed a way to collect information and answers from the participants. So having one thing for that and another to get them to play sound tracks and switch between them would probably be messy. I needed something so instead of blindly researching a way to do it, I made my own!
Super Max! (Supermacs if you’re Irish)
Max/MSP was the program what I used to solve my problem. (now known as Max 6, despite my constant use of Max/MSP in these blogs) It is a program I was introduced to back at Queen’s University. Coding and programming is not my thing but I always found this program fun and logical. When I encountered Reaktor at Salford Uni I was less than impressed after coming from Max/MSP so when I had the idea of using object based programming to sort my problem out, Max was my first port of call. I have a feeling Reaktor could have done it, but not as well as I knew Max could. I have used both programs to complete the same objective in the past so that is what I am basing those remarks on.
What I have designed here is probably very likely an inefficient way of doing things, so if any Max savvy people are reading then don’t say I didn’t warn you! While I get more research done into what is required in subjective testing for audio, the layout and things like will probably change but under the hood I have the exact program I need to meet the fundamental aims of BS1116.
I wanted to play two surround sound files and allow the user to switch between them instantly without losing place, like I mentioned earlier. I also wanted it to record the answers to the test questions. By combining all these things into one interface, it means that I can save the participants answers using a unique file name and load up a new blank patch for the next person.
The GUI features of Max are fantastic. Maybe my colour scheme needs a look at (probably spelling too, but it’s a late night draft!). What the patch allows me to do is play two surround sound files at the same time, select between them in realtime and select my answer.
Here I selected the recording I preferred, hit confirm and the patch them told me what to do. But what if one of my participants makes a mistake like selecting both the options?
BOOM! The patch recognises that both preference buttons have been selected and gives a warning message. The user can then reset, reselect and confirm again.
This is the magic behind it.There are three main sections.The upper right quarter of the image is the playback system which is routed into the audio outputs in the lower middle. The upper left quarter to middle is where users can select what recording they are listening to and also the display which tells each participant this for their own reference. The bottom right quarter is where the participants answers are filled in and tested to make sure that two options or no options were selected by accident.
What the participant will see is what was in the previous pictures. This under the hood view is how they are all tied together. Max is an object based programming language. Each visual object you see has some traditional coding behind it, but the user does not need to worry about it. It allows the less code savvy like myself the ability to get some seriously powerful custom made projects done without worrying about syntax errors and languages. In fact, the only bit of traditional code that I have come across that you could need are if statements. That said, the help files are brilliantly done so help is always at hand.
Take the play and stop buttons for example. The button has some code under the hood that says when pressed, it sends a signal or a bang as it is called in Max. The output of that play button eventually goes into the object called “sfplay” by following the blue path. Sfplay plays soundfiles and there are two of them because I have two surround recordings that I need played at the exact same time. Note that the output (bottom of the boxes) have 6 green/grey lines. Each of those corresponds to a audio channel on my soundcard. Since 5.1 needs 6 channels I asked for an sfplay with 6 outputs.
Once sfplay gets the message “1” it will start playing, and when it gets a “0” it stops! You can see how the blue line from play goes through a grey box with “1” in it. So, what happens here is that the bang comes out of the button, bangs into a 1 message which is then sent into the audio player which starts playing the music! All this took was to create a few objects and tie them together. If I was to do this in a traditional coding language (I very much couldn’t) there would be a lot of code to mess around with. Some people love it, but I am not one of them so I love this method.
Anyway, I just wanted to share this short post inspired by my newly rekindled love affair with Max/MSP. A severe amount of fun was had designing this, thanks to my friend Michael McLoughlin for some assistance. What you saw here was very much a draft, and I am definitely not a master of the program and I am sure there is a better way to do what I want done but it does the job which is the main thing. If all goes well and it is accepted by my project supervisor, I will release the source code for anyone else doing surround sound subjective work. Hopefully, someone reading this may realise that Max/MSP may help them in some way so I hope this post gets you into it!
Keep on rocking!!