Error: tabsend~: $O-hann: no such array
Aha! This is a very interesting subject. Please forgive my presumptions.
The full FFT vocoder patch is attached. To use it you must experiment with loading different files and cross synthesising them. It is from the help files and should work as is.
Some problems will present themselves very quickly...
-
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. -
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.
-
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.
-
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.
Csound has a LPC suite. Linear predictive coding is particularly well suited to speech.
ii) Tapestrea is a wonderful tool that uses wavelet analysis. It also has a graphical front end that makes alignment of phonemes easier.
iii) Praat (Boersma and Weenink - Amsterdam Institute of Phonetic Sciences) is a great voice synthesis system based on articulatory tract models, where you can morph speaker models. You may find that a purely synthetic method yields data more suitable for this experiment.
> It is really hard (impossible or even sin) to convience TEACHERS.
Did you mean even cos, sin is an odd function, write it out 50 times! 
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.
Voice morphing/conversion. PD & voice conversion
I want to convert person A voice into person B's voice. so can I do this using PD.
and if yes, what objects of pd would be used.
eg consider I want to change the pitch of voice into another pitch (male voice into female voice) , what objects of pd I should use.
As I am a new to pd, so I would highly appreciate the detailed answer.
Thanks.
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