<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5383219750448858297</id><updated>2012-03-14T08:47:51.845-04:00</updated><category term='Software'/><category term='OSC'/><category term='Effects'/><category term='Arduino'/><category term='Synthesis'/><category term='Physical Model'/><title type='text'>Electrosonic Experimentation</title><subtitle type='html'>Projects and experiments in the field of computer music and music technology.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://musictechnick.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://musictechnick.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nick Donaldson</name><uri>http://www.blogger.com/profile/02560315579135851960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5383219750448858297.post-6156069776268726962</id><published>2011-10-02T11:44:00.004-04:00</published><updated>2011-10-02T11:46:32.499-04:00</updated><title type='text'>M.A. Thesis</title><content type='html'>&lt;br&gt;&lt;br /&gt;&lt;a href="http://mt.music.mcgill.ca/~donaldsonn/thesis/index.html"&gt;The result of more than a year's work towards my master's degree&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5383219750448858297-6156069776268726962?l=musictechnick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://musictechnick.blogspot.com/feeds/6156069776268726962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://musictechnick.blogspot.com/2011/10/ma-thesis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/6156069776268726962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/6156069776268726962'/><link rel='alternate' type='text/html' href='http://musictechnick.blogspot.com/2011/10/ma-thesis.html' title='M.A. Thesis'/><author><name>Nick Donaldson</name><uri>http://www.blogger.com/profile/02560315579135851960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5383219750448858297.post-4801791260294411910</id><published>2010-04-14T19:12:00.005-04:00</published><updated>2010-04-17T16:28:27.241-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Effects'/><title type='text'>Phase-Locked STFT Time-Scale Modification in MATLAB</title><content type='html'>&lt;br&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NzwqMnGhG8g/S8ZN8ckAIFI/AAAAAAAAAAU/5LDn5C6XytM/s1600/GUI.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 264px;" src="http://2.bp.blogspot.com/_NzwqMnGhG8g/S8ZN8ckAIFI/AAAAAAAAAAU/5LDn5C6XytM/s320/GUI.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5460137299087990866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is a non-realtime MATLAB implementation of frequency-domain time-scale modification algorithms by Puckette (1995)  and Laroche, Dolson (1999) which take into account vertical phase coherence between channels of the STFT. This type of technique is commonly referred to as the &lt;a href="http://en.wikipedia.org/wiki/Phase_vocoder"&gt;Phase Vocoder&lt;/a&gt;. For more information on these topics see the references below.&lt;br /&gt;&lt;br /&gt;The file PhaseVocoders.m launches a simple GUI for loading .wav samples, choosing parameters for the algorithms, and previewing and saving the results. The quality of the resulting time-scale modified signals is sensitive to the choice of parameters. The FFT size and overlap follow the standard STFT model for overlapping analysis/synthesis windows.&lt;br /&gt;&lt;br /&gt;There is a simple peak picking algorithm necessary for the Laroche/Dolson algorithms, which identifies spectral peaks whose amplitudes are larger than their &lt;i&gt;N&lt;/i&gt; nearest neighbors and are greater than a certain threshold (to avoid picking peaks in noise or silence). Both of these parameters for the peak picking algorithm can be chosen in the GUI.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.qdrive.net/en/download/sharelinkdownloader.php?id=114624&amp;key=CnP5zBLNDXX2XrGAXdzXbtxdHXKDjB9X7N8"&gt;Phase Vocoder GUI for MATLAB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;M. Puckette, “Phase-locked vocoder,” &lt;i&gt;IEEE ASSP Workshop on Applications of &lt;br /&gt;Signal Processing to Audio and Acoustics&lt;/i&gt;, 1995.&lt;br /&gt;&lt;br /&gt;J. Laroche and M. Dolson, “Improved phase vocoder time-scale modification of &lt;br /&gt;audio,”  &lt;i&gt;IEEE Transactions on Speech and Audio Processing&lt;/i&gt;, vol. 7, no. 3, pp. &lt;br /&gt;323-332, May 1999.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5383219750448858297-4801791260294411910?l=musictechnick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://musictechnick.blogspot.com/feeds/4801791260294411910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://musictechnick.blogspot.com/2010/04/phase-locked-stft-time-scale.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/4801791260294411910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/4801791260294411910'/><link rel='alternate' type='text/html' href='http://musictechnick.blogspot.com/2010/04/phase-locked-stft-time-scale.html' title='Phase-Locked STFT Time-Scale Modification in MATLAB'/><author><name>Nick Donaldson</name><uri>http://www.blogger.com/profile/02560315579135851960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NzwqMnGhG8g/S8ZN8ckAIFI/AAAAAAAAAAU/5LDn5C6XytM/s72-c/GUI.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5383219750448858297.post-507442264426695110</id><published>2010-04-11T13:36:00.009-04:00</published><updated>2010-10-04T23:42:01.544-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSC'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Physical Model'/><category scheme='http://www.blogger.com/atom/ns#' term='Synthesis'/><title type='text'>Modal Windchime</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NzwqMnGhG8g/S8II0JI_bTI/AAAAAAAAAAM/oJT0TSnv1OE/s1600/dimple+2010-04-10+14-54-58-91.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://4.bp.blogspot.com/_NzwqMnGhG8g/S8II0JI_bTI/AAAAAAAAAAM/oJT0TSnv1OE/s320/dimple+2010-04-10+14-54-58-91.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5458935390226312498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This project is a virtual model of a windchime, built using the &lt;a href="http://www.idmil.org/software/dimple"&gt;DIMPLE&lt;/a&gt; physical environment created in IDMIL at McGill's department of Music Technology. Six chime-like bars are suspended from a fixed top plates using ball joints. When they collide with each other or the center mass, modal synthesis events are triggered in Max/MSP.&lt;br /&gt;&lt;br /&gt;The modal synthesis patch in Max/MSP consists of three bandpass filters per chime voice (reson~ objects) which are tuned to the approximate first three modes of a metallic or bamboo woodchime, determined manually using LPC analysis to pick the three largest peaks in the spectral envelope of samples of each type of chime. Each chime collision in DIMPLE sends an OSC message to Max/MSP, triggering a burst of exponentially damped noise whose amplitude is proportional to the velocity of the collision. The noise excites the filters, producing the synthetic chime sound.&lt;br /&gt;&lt;br /&gt;Wiimote controls were also added using &lt;a href="http://glovepie.org/glovepie_download.php"&gt;GlovePie&lt;/a&gt;. The joystick and +/- buttons are used to control the camera pan and zoom, and the acceleration of the wiimote creates virtual "wind" forces on the chime objects proportional to the amplitude and direction of the acceleration. A video demonstration is shown below. Please excuse the slightly clicky audio track - the audio was synthesized on a netbook.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/UYRso4ldjPw&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/UYRso4ldjPw&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5383219750448858297-507442264426695110?l=musictechnick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://musictechnick.blogspot.com/feeds/507442264426695110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://musictechnick.blogspot.com/2010/04/modal-windchime.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/507442264426695110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/507442264426695110'/><link rel='alternate' type='text/html' href='http://musictechnick.blogspot.com/2010/04/modal-windchime.html' title='Modal Windchime'/><author><name>Nick Donaldson</name><uri>http://www.blogger.com/profile/02560315579135851960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NzwqMnGhG8g/S8II0JI_bTI/AAAAAAAAAAM/oJT0TSnv1OE/s72-c/dimple+2010-04-10+14-54-58-91.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5383219750448858297.post-1087257236445818185</id><published>2010-04-03T16:40:00.018-04:00</published><updated>2010-10-04T23:41:25.944-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSC'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>A method for sending OSC messages from Arduino over USB virtual serial port</title><content type='html'>This is a function for the Arduino compiler in addition to a small terminal program for Mac OS X which together implement a method of acquiring data from the Arduino over USB to be sent as OSC messages from the host computer. The serialOSC program is a simple C/C++ program written using the &lt;a href="http://www.audiomulch.com/~rossb/code/oscpack/"&gt;oscpack&lt;/a&gt; library for C++ and code for reading from the serial port by &lt;a href="http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/"&gt;Tod E. Kurt&lt;/a&gt;. It can send messages to any port on any host, as specified in the config.txt file, but is currently hard-coded to only send messages named "/arduino/data", with any number of arguments. Due to RS232 limitations, the maximum speed at which messages may be sent without error may vary. In the setup I was testing it with (Arduino Duemillanove at 115.2 kbaud), the maximum error-free rate I could achieve was around 500 Hz for a 4-argument message.&lt;br /&gt;&lt;br /&gt;The program has only currently been built and tested for Mac OS X with a PowerPC processor, but should theoretically also compile for Linux/Unix systems. Source requires installation of the &lt;a href="http://www.audiomulch.com/~rossb/code/oscpack/"&gt;oscpack&lt;/a&gt; library. I have not written a makefile for release yet, but assuming the standard C libraries are available, and the oscpack library files and headers are installed in a location accessible to the compiler, the source can be compiled using g++ from the source directory with:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;g++ -Wall -o serialOSC -loscpack serialOSC.cpp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also remember to use the proper endianness for your architecture when compiling the oscpack library.&lt;br /&gt;&lt;br /&gt;All instructions for usage are in the README.txt file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.qdrive.net/en/download/sharelinkdownloader.php?id=110064&amp;key=E3pdA6jxq7xIH7pXXpp5dmExX9pHL3G8xXG"&gt;serialOSC 0.9 for PowerPC Macs&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.qdrive.net/en/download/sharelinkdownloader.php?id=110063&amp;key=3IEXrgF23p2BAX1mnn4ptqHNrXxmtXxFEX1"&gt;serialOSC 0.9 Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The source for the Arduino function is below:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;// Function definitions for serialOSC library for Arduino&lt;br /&gt;// For use with serialOSC program&lt;br /&gt;// Nick Donaldson, 2010&lt;br /&gt;#include "WProgram.h"&lt;br /&gt;&lt;br /&gt;#ifndef SENDOSC_H&lt;br /&gt;#define SENDOSC_H&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void sendOSCData( int* data, int num)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  //begin message with 2 0xFF followed by comma&lt;br /&gt;  Serial.print(0xFF,BYTE);&lt;br /&gt;  Serial.print(0xFF,BYTE);&lt;br /&gt;  Serial.print(',', BYTE);&lt;br /&gt;  &lt;br /&gt;  // follow by number of arguments&lt;br /&gt;  Serial.print(num, BYTE);&lt;br /&gt;  Serial.print(',', BYTE);&lt;br /&gt;    &lt;br /&gt;  &lt;br /&gt;  // arguments&lt;br /&gt;  for(int dt=0; dt&lt;num; dt++){&lt;br /&gt;      Serial.print(data[dt]&gt;&gt;8,BYTE);&lt;br /&gt;      Serial.print(data[dt],BYTE);&lt;br /&gt;  }&lt;br /&gt;  Serial.print(',');&lt;br /&gt;&lt;br /&gt;  // end of message&lt;br /&gt;  Serial.print(0xFF,BYTE);&lt;br /&gt;  Serial.print(0xFE,BYTE);&lt;br /&gt;  Serial.print(',');&lt;br /&gt;&lt;br /&gt;  return;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5383219750448858297-1087257236445818185?l=musictechnick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://musictechnick.blogspot.com/feeds/1087257236445818185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://musictechnick.blogspot.com/2010/04/method-for-sending-osc-messages-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/1087257236445818185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5383219750448858297/posts/default/1087257236445818185'/><link rel='alternate' type='text/html' href='http://musictechnick.blogspot.com/2010/04/method-for-sending-osc-messages-from.html' title='A method for sending OSC messages from Arduino over USB virtual serial port'/><author><name>Nick Donaldson</name><uri>http://www.blogger.com/profile/02560315579135851960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
