Array issue please help
@Nk said:
So am I right in thinking the first 'filename' is left channel/stereo and the 2nd 'filename' is right channel?
No, but holy shit you seem to have stumbled on how to isolate a single channel of a multichannel file. So, thanks for that!
Well, you're sort of right, but they're not filenames; they're array names. What I was trying to say with my earlier example (and sorry for not being clear, I was rushing a bit) is that you would have two arrays, in this case named "rightarray" and "leftarray". These two arrays would hold the right and left channel of a stereo file "foo.wav", respectively.
Now, when [soundfiler] loads a multichannel file, it puts each channel in a different array depending on the number of array names you give it. If you only give it one, it loads the first channel of the file. If you give it two, it loads the first two, etc. With stereo files, the first channel is the left one and the second is the right one. So if you only give it one array, it will only load the left channel. In order to load the right channel, you have to give it a second array name. But, it seems that if you make both array names the same, it will load the left channel into the array, and then overwrite that with the right channel. Brilliant! 
Echo AudioFire12 in PD
Hi,
I have here the Echo Audio Fire 12 sound card. With PD I can only use 2 channels, I can't use the other 10 channels (by dac~ 3, 4,5 and so on).
With the standard (MMIO) driver I can select the card, I can set the channel number (12), but I can hear sound only by the first 2 channels (e.g. dac~3 doesn't work)
With the ASIO drivers, if I select 12 channels in the ASIO menu I can't hear anything from any channel. If I set 2 channel on the menu, I can use the first two channels.
Any suggestions?!
Thanks a lot
Receiving trigger from multi-channel \[adc~\]
Hi Folks,
I am looking for a method which will allow me to receive a trigger from a [adc~] object which I have set-up to work with a multi-channel (8) sound card. I intend for audio to be coming in through each of the eight channels concurrently. I'd like for PD to be able to tell me which channel is receiving audio and which is not, preferably in the form of a trigger/bang.
Is the best way to achieve this via [threshold~]? Is there a way around having multiple instances of this object for each channel in order to reduce CPU overhead? Thanks in advance for your help.
Best wishes,
Ricky
Interaction Design Student Patches Available
Greetings all,
I have just posted a collection of student patches for an interaction design course I was teaching at Emily Carr University of Art and Design. I hope that the patches will be useful to people playing around with Pure Data in a learning environment, installation artwork and other uses.
The link is: http://bit.ly/8OtDAq
or: http://www.sfu.ca/~leonardp/VideoGameAudio/main.htm#patches
The patches include multi-area motion detection, colour tracking, live audio looping, live video looping, collision detection, real-time video effects, real-time audio effects, 3D object manipulation and more...
Cheers,
Leonard
Pure Data Interaction Design Patches
These are projects from the Emily Carr University of Art and Design DIVA 202 Interaction Design course for Spring 2010 term. All projects use Pure Data Extended and run on Mac OS X. They could likely be modified with small changes to run on other platforms as well. The focus was on education so the patches are sometimes "works in progress" technically but should be quite useful for others learning about PD and interaction design.
NOTE: This page may move, please link from: http://www.VideoGameAudio.com for correct location.
Instructor: Leonard J. Paul
Students: Ben, Christine, Collin, Euginia, Gabriel K, Gabriel P, Gokce, Huan, Jing, Katy, Nasrin, Quinton, Tony and Sandy
GabrielK-AsteroidTracker - An entire game based on motion tracking. This is a simple arcade-style game in which the user must navigate the spaceship through a field of oncoming asteroids. The user controls the spaceship by moving a specifically coloured object in front of the camera.
Features: Motion tracking, collision detection, texture mapping, real-time music synthesis, game logic
GabrielP-DogHead - Maps your face from the webcam onto different dog's bodies in real-time with an interactive audio loop jammer. Fun!
Features: Colour tracking, audio loop jammer, real-time webcam texture mapping
Euginia-DanceMix - Live audio loop playback of four separate channels. Loop selection is random for first two channels and sequenced for last two channels. Slow volume muting of channels allows for crossfading. Tempo-based video crossfading.
Features: Four channel live loop jammer (extended from Hardoff's ma4u patch), beat-based video cross-cutting
Huan-CarDance - Rotates 3D object based on the audio output level so that it looks like it's dancing to the music.
Features: 3D object display, 3d line synthesis, live audio looper
Ben-VideoGameWiiMix - Randomly remixes classic video game footage and music together. Uses the wiimote to trigger new video by DarwiinRemote and OSC messages.
Features: Wiimote control, OSC, tempo-based video crossmixing, music loop remixing and effects
Christine-eMotionAudio - Mixes together video with recorded sounds and music depending on the amount of motion in the webcam. Intensity level of music increases and speed of video playback increases with more motion.
Features: Adaptive music branching, motion blur, blob size motion detection, video mixing
Collin-LouderCars - Videos of cars respond to audio input level.
Features: Video switching, audio input level detection.
Gokce-AVmixer - Live remixing of video and audio loops.
Features: video remixing, live audio looper
Jing-LadyGaga-ing - Remixes video from Lady Gaga's videos with video effects and music effects.
Features: Video warping, video stuttering, live audio looper, audio effects
KatyC_Bunnies - Triggers video and audio using multi-area motion detection. There are three areas on each side to control the video and audio loop selections. Video and audio loops are loaded from directories.
Features: Multi-area motion detection, audio loop directory loader, video loop directory loader
Nasrin-AnimationMixer - Hand animation videos are superimposed over the webcam image and chosen by multi-area motion sensing. Audio loop playback is randomly chosen with each new video.
Features: Multi-area motion sensing, audio loop directory loader
Quintons-AmericaRedux - Videos are remixed in response to live audio loop playback. Some audio effects are mirrored with corresponding video effects.
Features: Real-time video effects, live audio looper
Tony-MusicGame - A music game where the player needs to find how to piece together the music segments triggered by multi-area motion detection on a webcam.
Features: Multi-area motion detection, audio loop directory loader
Sandy-Exerciser - An exercise game where you move to the motions of the video above the webcam video. Stutter effects on video and live audio looper.
Features: Video stutter effect, real-time webcam video effects
Bug report receive~
Hi,
I don't whether this is the right place to report a bug. I appologize in advance is it's not.
I have noticed a problem with the [receive~ ] object. I was working on a channel selector for the audio output of a patch, with three possible choices : stereo, mono right and mono left. I choosed to send [Set name( messages to my [receive~ ] objects : the stereo position sends each channel to each receive~ (which works fine), the mono right position sets both receive~ objects to get the right channel (which also works fine), but it doesn't seem to work with the mono left position. Both receive~ objects are set to get the left channel, but the ouput is clearly not mono (it is quite different from what i hear when i plug my left channel directly into both inputs of my [dac~] object.
I have tried sending the set messages simultaneously, ot through a [t s s] object, or even manually one after the other, but it doesn't seem to make any difference. I suppose there must be a bug somewhere.
Has anybody had such a problem before?
03.connection.pd : is the author of tutorials around ?
no, that's not a miracle:
the right inlet of the [+] object stores the incoming value until the the operations gets started by an incoming event at the left inlet. if you connect the number box first to the right inlet and then to the left inlet, the following happens:
the number box shows 10, then the second inlet of the [+] object receives the value first and stores it, but it will not trigger an operation. immediately the left inlet receives the value (10) - this event triggers the operation (in this case an addition) and results in an output value of 20 (10 on the right + 10 on the left, then processed addition)
if you first connect to the left inlet of [+] and then the right inlet, the left inlet receives the data and imediately triggers the opereation - so it receives a 10 and triggers an addition with the last stored value at right input:
if you tweaked the number box from 0 to 10, the last stored input at the right inlet has to be a 9, so the result is 19. if you tweaked it down from a higher number, the last stored value must have been an 11 so the result is 21.
edit: i'm sorry, i must have been to tired, when i typed that shit yesterday.... i changed some things now!
hope you understand what i mean...
"Morphine" - fx-morphing engine
for some reason, the list of error messages became even longer...... 
mix.switch.nice 101
... couldn't create
init.post.dollarg
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
flow.receive
... couldn't create
[makesymbol] part of zexy-2.2.3 (compiled: Feb 25 2009)
Copyright (l) 1999-2008 IOhannes m zmölnig, forum::für::umläute & IEM
flow.@parse
... couldn't create
flow.receive
... couldn't create
init.dollar.zero.top
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
list.build
... couldn't create
[demultiplex] part of zexy-2.2.3 (compiled: Feb 25 2009)
Copyright (l) 1999-2008 IOhannes m zmölnig, forum::für::umläute & IEM
init.make.unique
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
list.split 1
... couldn't create
list.length
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
wahwah~: an audio wahwah, version 0.1 (ydegoyon@free.fr)
expr, expr~, fexpr~ version 0.4 under GNU General Public License
mix.switch.nice 101
... couldn't create
init.post.dollarg
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
flow.receive
... couldn't create
flow.@parse
... couldn't create
flow.receive
... couldn't create
init.dollar.zero.top
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
list.build
... couldn't create
init.make.unique
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
list.split 1
... couldn't create
list.length
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
mix.switch.nice 101
... couldn't create
init.post.dollarg
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
flow.receive
... couldn't create
flow.@parse
... couldn't create
flow.receive
... couldn't create
init.dollar.zero.top
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
list.build
... couldn't create
init.make.unique
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
list.split 1
... couldn't create
list.length
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
mix.switch.nice 101
... couldn't create
init.post.dollarg
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
flow.receive
... couldn't create
flow.@parse
... couldn't create
flow.receive
... couldn't create
init.dollar.zero.top
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
list.build
... couldn't create
init.make.unique
... couldn't create
flow.receive
... couldn't create
flow.receive
... couldn't create
flow.send
... couldn't create
list.split 1
... couldn't create
list.split 1
... couldn't create
list.length
... couldn't create
flow.send
... couldn't create
flow.send
... couldn't create
error: inlet: expected '' but got 'symbol'
... you might be able to track this down from the Find menu.
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'symbol'
error: inlet: expected '' but got 'list'
i'd really love to check out, what you have build there! 
How to populate 1 array with 4 incomming number streams
Hi all,
This should be the easiest thing in the world, but I cant for the life of me figure it out.
I need to populate an array with input from four different number streams were the order of appearence of numbers in the stream puts them into an queue to bang messages from 0,1,2 etc.
A brief explanation
I presume is pretty
easy when you know how, but A brief explanation of the project might be in order
The idea is to back project onto a series of screens and give people
IR LED "paintbrushes" so they can paint with procedural graphics and
sound.
We're using "touchlib" blob tracking software (and webcams)to
differentiate between the blobs. the software assigns each blob a
numbered ID for the length of its lifetime, based on the order in
which they come into existence : so the first blob in existence is "ID
0" (until it dies, when it takes its pace in the queue), the second
is "ID 1" etc.
These IDs allow us to assign specific graphics to different blobs in
Processing, and also to give each an individual piece of audio.
Its easy with just one machine sending these messages as each ID
corresponds nicely to the order of tracks to be triggered in the
sequencer,
but we're using four separate modular machines each running touchlib
and we want the sound to be global.
We have networked the machines and each of the four graphics modules
can talk to the machine running the sound. The sound module is running
PD which receives messages from the other machines and then sends MIDI
messages to the sequencer. So PD is getting four streams of numbers -say from zero to three- which correspond to the order in which touchlib blob IDs pop into existence - (each stream local to its own machine)
these numbers trigger a fade in/out of a
mixer track in say for example Reason). Ideally the first person who enters the space will
trigger some pad sounds (fader 1 in reason say) regardless of which
screen they paint on.
that way it will work if there is only one person in the space. The
next person would trigger some percussion, and the full track would
build naturally. The alternative is to have every ID locked to a
sound, meaning it would really only work for four people in the space.
So to the question. There are 4 data streams coming into PD, literally
numbers 0 - 3 in each number box. as you can see in the
"four_machine_dilemma"patch attached.
what I need to do is fix it so that if (and only if) computer A has
sent a message triggering track 1 that computer B, or the next stream,
when it sends its own "ID number 1" is converted to ID number 2 , that
is, it occupies the next position in the global array, triggering
track two (because track 1 is occupied) even though it thinks it is
"ID number 1", and so on down the chain.
is there some way to store a boolean for the track's on state and use
it to reassign a value to the next incoming message?
Or just to fill positions in an array with the incoming messages in
the order they are received. It seems like it it should be
straight-forward but I'll be buggered blind if I can figure it out.
Hope this is not to long winded for a simple question.
Thanks in advance,
wadeorz
Appending samples to the end of a wave file?
Hey all-
Is there a way to append samples to the end of a wave file in PD? I'm working on some voice activity detection stuff, and I basically want to read in a multi-channel wave file, determine if every 80 samples is speech or non-speech, and add another channel that contains the information about speech / non-speech.
I would like to write all of the original channels, plus the new channel, to a new wave file. My concern is that the channels will be too large to simply load them all into arrays, and then write out all the arrays (maybe I'm wrong and maybe I should just do that). I would like to basically...
read in 80 samples
determine speech
write out 80 samples (on all 5 channels)
repeat until the end of the file
Is there any way to do this? Or should I just try to load them all into arrays and just write the file @ the end (the files are like 20 minutes each, 4 channels, 8kHz).
I've looked at soundfiler (will let you skip parts of the array, but not parts of the file) and writesf (seems to only write in real time; stopping must be followed by an open before more writing, which overwrites the file)...
Any help would be appreciated!
All the best,
-Zach
Parsing/sorting numbers?
I have a patch that receives an ID number when an object is added on a physcial table, and receives the ID number of an object when it is removed (from the table).
All add IDs come through the same outlet, and all the remove IDs come out another outlet.
Is there a way I can sort or list out what IDs are currently active or save the numbers received through the add or remove outlets? Since the ID numbers aren't received in a single list or message (but one after the other) how can I keep track of them when they come out the same outlet?
For example, the add outlet may receive a 1, then a 2, then a 3, then a 4 and then the remove outlet may receive a 3. This means only 1, 2, and 4 are still active.
One thought I had was creating a
all add objects, but is there a way to remove things from a list if they match what is inside? For example, if a 1 is in the add list, and the remove ID outlet receives a 1, it'll remove the number "1" from the add list.

