Cyclone: can't load library
I have this problem too on OSX. For OSX you can edit file org.puredata.pd.default.plist, which is in your Pd-extended package in your Applications folder, but it won't help anyway because there are no *.pd_darwin or *.d_ppc files in PD application package for OSX. Here is the cut from the startup log with verbose:
tried ./cyclone.d_ppc and failed
tried /Library/Pd/cyclone.d_ppc and failed
tried /System/Library/Fonts/cyclone.d_ppc and failed
tried /Library/Fonts/cyclone.d_ppc and failed
tried /Users/Alex/Library/Fonts/cyclone.d_ppc and failed
tried /usr/X11R6/lib/X11/fonts/TTF/cyclone.d_ppc and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home/lib/fonts/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/msttf/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/intl/TrueType/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/applettf/cyclone.d_ppc and failed
tried /Applications/Pd-extended.app/Contents/Resources/extra/cyclone.d_ppc and failed
tried ./cyclone.pd_darwin and failed
tried /Library/Pd/cyclone.pd_darwin and failed
tried /System/Library/Fonts/cyclone.pd_darwin and failed
tried /Library/Fonts/cyclone.pd_darwin and failed
tried /Users/Alex/Library/Fonts/cyclone.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/cyclone.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home/lib/fonts/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/msttf/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/intl/TrueType/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/applettf/cyclone.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/extra/cyclone.pd_darwin and failed
tried ./cyclone/cyclone.d_ppc and failed
tried /Library/Pd/cyclone/cyclone.d_ppc and failed
tried /System/Library/Fonts/cyclone/cyclone.d_ppc and failed
tried /Library/Fonts/cyclone/cyclone.d_ppc and failed
tried /Users/Alex/Library/Fonts/cyclone/cyclone.d_ppc and failed
tried /usr/X11R6/lib/X11/fonts/TTF/cyclone/cyclone.d_ppc and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home/lib/fonts/cyclone/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/msttf/cyclone/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/intl/TrueType/cyclone/cyclone.d_ppc and failed
tried /sw/lib/X11/fonts/applettf/cyclone/cyclone.d_ppc and failed
tried /Applications/Pd-extended.app/Contents/Resources/extra/cyclone/cyclone.d_ppc and failed
tried ./cyclone/cyclone.pd_darwin and failed
tried /Library/Pd/cyclone/cyclone.pd_darwin and failed
tried /System/Library/Fonts/cyclone/cyclone.pd_darwin and failed
tried /Library/Fonts/cyclone/cyclone.pd_darwin and failed
tried /Users/Alex/Library/Fonts/cyclone/cyclone.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/cyclone/cyclone.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home/lib/fonts/cyclone/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/msttf/cyclone/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/intl/TrueType/cyclone/cyclone.pd_darwin and failed
tried /sw/lib/X11/fonts/applettf/cyclone/cyclone.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/extra/cyclone/cyclone.pd_darwin and failed
cyclone: can't load library
Voicing framework
When i created my last synth i was looking (again) for a way to implement multiple voices. I came up with a system with fixed envelopes (AHR), which is fine for me.
I extracted the logic and created a little voicing framework which i can easily reuse in the future. Attached you'll find the framework and a very basic implementation (4 voice sinewave player).
If you want to use it do this :
- copy the framework into your patch (including the envelope sliders)
- implement the playing algorithm of your choice in the first voice
- make as many copies of that voice as needed and link them (like in the example)
It's only the first version, so i'm sure many things can be improved. I'm just not sure how to implement a Sustain option. If you improve it, please let me know.
Enjoy it,
Domien
Voicing framework
When i created my last synth i was looking (again) for a way to implement multiple voices. I came up with a system with fixed envelopes (AHR), which is fine for me.
I extracted the logic and created a little voicing framework which i can easily reuse in the future. Attached you'll find the framework and a very basic implementation (4 voice sinewave player).
If you want to use it do this :
- copy the framework into your patch (including the envelope sliders)
- implement the playing algorithm of your choice in the first voice
- make as many copies of that voice as needed and link them (like in the example)
It's only the first version, so i'm sure many things can be improved. I'm just not sure how to implement a Sustain option. If you improve it, please let me know.
Enjoy it,
Domien
Programmable sweep management?
This may sound confusing, if so no worries.
OK... right now I'm working with 4 voices, each with 5 values that I want to be able to occasionally sweep (fund freq, vibrato range & speed, tremolo level & speed). I don't have a piano keyboard, and may never get one because I prefer to send ordered, pre-loaded lists of notes and envelopes to the instruments to control their sounds, rather than MIDI device inputs. I'm wondering if there's an easier way to program sweep information than the method I'm building now (which is to store each upcoming sweep as it's own pre-loaded table of offest values, and have each list of tables accessed by sending the address referencing the voice-modifier I wish to sweep). That way I can encode the ranges, direction changes, and speeds of a particular sweep motion with a single, easily-resized data structure.
Basically when I want a certain input to a particular voice swept, I just negate the value I'm sending (since they are all otherwise positive), then use a cell logic to return the abs values to the voice player, and if negative then also send a message to my sweep sequencer consisting of "addresses", which are just numbers representing which voice's modifers I want swept on the current beat. The sweep sequencer then decodes this address using a large [select] to choose which of 20 lists of sweep-offset-tables to use: (to tabread through @ 1 index/ms, then send & add the sweep-offset values to the proper modifier input of my voice player, and finally, prime the next offsets table to use next time the same address is sent to the sweep sequencer.
This means that my little 4-voice synth, with 5 sweepable modifiers per voice, will require 20 separate lists of tables (I figure anywhere from 0-30 tables per list in a given track). To me this seems like kind of an ugly/expensive approach, but it's alot faster than the only other programmable-sweeps method I could come up with.
I bet this post looks like a train wreck, but hopefully someone else has "been there" and can visualize what I'm trying to do. Is this going to be the easiest way for sending programmed sweeps? Maybe there's something I'm overlooking that would do this with less work and code volume?
And if this is my best bet, then is 1 index/ms a good speed to use for extracting sweep offests from the tables? This is kindof a guess... I shouldn't need my sweep response to be faster, but maybe it needs to be slower? The most voice modifiers I'll ever sweep simultaneously on a given beat is 12, with the average being more like 1-2.
Error: tabsend~: $O-hann: no such array
- To cross synthesise two voices you must ensure that two speakers make exactly the same utterances which are phonetically aligned. This is hard as I can tell you from experience of recording many voice artists. Even the same person will not speak a phrase the same way twice.
<< This is not possible in my experiment, as I am supposed to morph the actual conversation, so it is upto subjects what ever they want to speak. There is some work done by (Oytun Türk , Levent M.Arslan) who conducted experiment in passive enviornment (not at real time).
- The result is not a "timbral morph" between the two speakers. The human voice is very complex. Most likely the experiment will be invalidated by distracting artifacts.
Here's some suggestions.
- Don't "morph" the voices, simply crossfade/mix them.
<< yes I also want to do this, crossfading and mix, as I just want to create illusion, so that listner start thinking whether it is B's voice or A's voice>>
- For repeatable results (essential to an experiment) a real-time solution is probably no good. Real time processing is very sensitive to initial conditions. I would prepare all the material beforehand and carefully screen it to make sure each set of subjects hears exactly the same signals.
<<Yes, I agree, but it is demand of experiment, I can not control the environment, but to create some good illusion (or to distract listner, I may add noise in the siganl at real time, it would challange the listner brain in identification, so I may use such kind of tricks for the sucess factor)
- If you want a hybrid voice (somewhere between A and
then vocoding is not the best way. There are many tools that would be better than Puredata which are open source and possible to integrate into a wider system.
<<Actually now I have a little familarity with pure data, so it is more good for me to stick with it for a while (due to short time), yes if i continue my phD in this domain, I would explore other tools as well. for the time being it is a kind of pilot study>>
Question :
Is VoCoder alone is sufficient for morph/mix/crossfade among two voices?
or I should also add the pitch shifting module with VoCoder to get some more qualitative results.
Question 2:
I already tried this VoCoder example, but could not change it according to my requirements. In my requirements, I have a target voice (the target voice is phonetically rich) and now source speaker is speaking (what ever he want to speak) and source voice is changing into target voice. (illusion/crossfade/mix)
The (changetimbre1.pd ) file that I attached first, give you an idea of what kind of operational interface I am looking for.
Question 3:
what should be the ideal length of target wave file?
Before the start of experiment, I would collect the voice sample of all participants.
I am highly oblige for your earlier help and looking for more (greedy). Meanwhile I would once again study this vocoder example to change it according to my requiement. ( though i doubt I may change it).
Thanks.
Error: tabsend~: $O-hann: no such array
Yes U are right but I am also not wrong:) Actually neither I am a signal processing student nor I have any ambition in this field. My actual task is some thing different.
I have to evaluate (Only EVALUATION) of voice morphing technology. There are some other avaialble voice morpher tools (such as AVS, Vodi, and many others etc) but those tools do not serve my purpose as they are hard to integrate with my other application.
So if I would not make myself dirty with DSP, it would not hurt my master:) I and my master goal and intentions are different. Even my master is not from Engineering field . He is a socialgist . at least her last degree is in socialiogy.
I am also not an from electrical engineering field and I also know, that may be at higher level I would undersatnd the meaning of
Filters, FFT, pitch, timbre, formant, pitch shifting, Vocoder, phase alignment etc.
but I would never understand this domain in depth (not due to my incompetency rather due to my different domain)
so as you said
"It will not help you if I just change it to work. Neither will you learn much if somebody just completes your assignment for you ".
So it would works for me, as my final goal is some thing different. (that goal is experientaion/evaluation, Human Psycholgy etc )
So Guru, I assure you, that if you do this work for me. You would not be penalized by Plagrism act:). rather I would fully document your name in my final thesis.:)
I give you some idea, what I want to do
A says: let's go to cienma (centre)
B says: no busy in course work (left of A)
C says: me too (right of A)
B says: hmm... we would go on TUESDAY. (morph into C,s voice)
(morphed B,s voice into C's voice and send at right channel of A ).
Now in this all conversation, A brain is tune up that what ever is coming from left is B's voice and on right it is C's voice.
so Here i would challange the human brain in voice recognition process? and would try to identify that how much location matters in voice recognition?
so you can guess that I have to do nothing with DSP:) Sorry I try to convience you - though I know It is really hard (impossible or even sin) to convience TEACHERS.
Voice morphing/conversion. PD & voice conversion
Hi Ahmad,
This is a hard problem with a bunch of other tough computer science and DSP problems as part of it. I think it's ambitious. However, nothing like a mountain to challenge the spirit of man... so here's what I know about it.....
To change the voice of a speaker in real time you need to do a 3 stage process, analysis, resynthesis, and a magical intermediate stage of transformation in the "parametric domain".
The analysis / sysnthesis part is fairly easy. Mobile phone technology already uses applications of LPC (linear predictive coding) and phase vocoders that split up the voice into a set of filter coefficients and an excitation signals. These are recombined in the recieving handset by a resynthesis stage. So, something that few people realise, when you are listening to your friend talk on a mobile phone you are not hearing their real voice, you are hearing a resynthesised voice. The signal is split up this way because it is good to reduce bandwidth and compress the data sent, but it has another possibility.....
If you alter the filter coefficients it's possible to change the voice, even to another age or gender.
It will sound artificial unless you get the mapping exactly right. Getting this part to work is at the front of research into speaker independent speech recognition, to deal with the words as matrices in a "parameter space" rather than as simply time or frequency signals. Perry Cook and Eduardo Miranda have done some of this, but going only one way, from the physical parameters to the signal, however to make a voice changer as you describe you need to do it both ways, to be able to derive the physical parameters from the signal, alter the physical parameters, and then resynthesise the voice.
This would make a good post doctoral reseach project for team of 2-5 programmers....Just to let you know what you're getting into ! And it has no practical commercial uses other than deception, so outside an artistic context I would remain mindful of that if I were you.
A good place to start would be with the phase vocoder and experiment goofing with the analysis data to shift the formants. A better system is probably (edit: *wavelet analysis and Fourier resynthesis*) Linear Predictive Coding because that makes it easier to transform formants independently of anything else. See the Tapestrea software for sound design, which could have interesting applications on this. A dirty solution would be a form of cross synthesis with a limited dictionary of recognised transformations.
As a quick and practical solution you might find that certain VST plugins similar to Antares auto tune can be subverted to alter speech in a way that renders the speaker unrecognisable. This is used in TV documentaries for interviews where the person wants to be anonymous. Not to be alarmist, but it is actually possible to reverse this process and obtain the original voice if you know what you are doing, and speaker identification software works by analysing the mannerisms of speech not the exact signals...so to truly disguise a speaker it's best to get an actor to read their words.
In sumary: changing a voice so that it sounds like another (generic) person - quite easy,
changing speaker A into speaker B so that a human would be fooled....very difficult.
Install gridflow on linux
I've tried to install under root session but it still doesn't work!...
the full output for 'make install' is (sorry this is very very very long!!!):
ruby -w base/source_filter.rb base/grid.h base/grid.h.fcs
ruby -w base/source_filter.rb base/grid.c base/grid.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/grid.c.fcs -o base/grid.o
ruby -w base/source_filter.rb base/main.c base/main.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/main.c.fcs -o base/main.o
ruby -w base/source_filter.rb base/number.c base/number.c.fcs
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS1
-c base/num ber.c.fcs -o base/number.1.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Ymulshr8<T>::is_neutra l(T, LeftRight) [with T = uint8]':
base/number.c.fcs:266: instantiated from here
base/number.c.fcs:200: attention : comparaison est toujours fausse en raison d'u ne gamme limitée de type de données
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS2 -c base/num ber.c.fcs -o base/number.2.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS3 -c base/num ber.c.fcs -o base/number.3.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
ruby -w base/source_filter.rb base/bitpacking.c base/bitpacking.c.fcs
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/bitpacking. c.fcs -o base/bitpacking.o
ruby -w base/source_filter.rb base/flow_objects.c base/flow_objects.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
bas