WAV Abstraction in Pure Data
July 21, 2018 by Chris Johnson. Filed under
Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 378
Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 379
Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 380
Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 381
Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 382
Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 383
Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 378
Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 379
Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 380
Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 381
Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 382
Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 383
music, public.
Those poor students who get a teacher that is teaching a subject for the first time. I’m that teacher these next three weeks, and our subject matter is digital music and Pure Data. One of the questions I was asked in this first week is how to create an abstraction that plays an arbitrary WAV file. I didn’t have the answer, but I do now!
The client of this abstraction should be able to specify the path to the WAV file as either a creation argument or as a message. The WAV should be played when a bang or the path message fires. Like this:

To read a sound file and play it, we use the readsf~ object. It expects a compound message of the form open PATH, start. But per the client needs, PATH can’t be hardcoded in the abstraction. It needs to be a parameter.
I knew that I could reference the creation argument in the abstraction with $1, but this didn’t work in open $1, start. The reason is that $ references are interpreted in two different ways. In objects, $1 refers to the first creation argument. In message boxes, $1 refers to the first element of the list passed into it.
We need a medley of components to work with these dual semantics. First, we need an object to capture the creation argument. Second, we need the object to forward the captured value to the open message. The symbol object satifies both these needs, with the added benefit of also firing on bangs.
That leads us to this solution:
