Shepard-Tonleiter: Eine akustische Illusion
Erzeugen Sie eine akustische Illusion.
In[1]:=
range = 12;
duration = 10;
lfoFreq = .05;
basePitch = 30;
numOsc = 8;
midiToFreq[m_] := 2^((m - 69)/12)*440.
Generieren Sie Rampen zur Kontrolle der Frequenzen und Amplituden der Oszillatoren.
In[2]:=
phasors =
Table[AudioGenerator[{"Sawtooth", lfoFreq, 2. Pi/numOsc (i - 1.)},
duration, SampleRate -> 500]/2. + .5, {i, numOsc}];
AudioPlot[phasors, PlotLayout -> "Overlaid", PlotRange -> All]
Out[2]=
Erzeugen Sie Frequenzen, die jeweils eine Oktave auseinander liegen und exponentiell zunehmen, sodass die Tonhöhe linear steigt.
In[3]:=
freqs = Table[
midiToFreq[(phasors[[i]])*12*numOsc + basePitch], {i, numOsc}];
AudioPlot[freqs, PlotLayout -> "Overlaid", PlotRange -> All]
Out[3]=
Erzeugen Sie Amplituden. Die Amplituden nehmen den Wert 0 an, wenn die Frequenzen auf den Mindestwert fallen.
In[4]:=
amps = Cos[#*Pi - Pi/2.] & /@ phasors;
AudioPlot[amps, PlotLayout -> "Overlaid", PlotRange -> All]
Out[4]=
Veranschaulichen Sie die Beziehung zwischen der Frequenz und der Amplitude eines Oszillators.
In[5]:=
AudioPlot[AudioNormalize /@ {freqs[[2]], amps[[2]]}, PlotRange -> All]
Out[5]=
Kombinieren Sie die erzeugten Frequenzen und Amplituden zu einer Oszillatorenbank.
In[6]:=
res = Mean[
Table[amps[[i]] AudioGenerator[{"Sin", freqs[[i]]}], {i, numOsc}]]
In[7]:=
Spectrogram[res, 8192, 4096, HannWindow,
PlotRange -> {All, {0, 10000}}, ImageSize -> Medium]
Out[7]=