Wolfram Language

Verarbeitung von Audioelementen

Shepard-Tonleiter: Eine akustische Illusion

Erzeugen Sie eine akustische Illusion.

In[1]:=
Click for copyable input
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]:=
Click for copyable input
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]:=
Click for copyable input
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]:=
Click for copyable input
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]:=
Click for copyable input
AudioPlot[AudioNormalize /@ {freqs[[2]], amps[[2]]}, PlotRange -> All]
Out[5]=

Kombinieren Sie die erzeugten Frequenzen und Amplituden zu einer Oszillatorenbank.

In[6]:=
Click for copyable input
res = Mean[ Table[amps[[i]] AudioGenerator[{"Sin", freqs[[i]]}], {i, numOsc}]]
Out[6]=
In[7]:=
Click for copyable input
Spectrogram[res, 8192, 4096, HannWindow, PlotRange -> {All, {0, 10000}}, ImageSize -> Medium]
Out[7]=

Verwandte Beispiele

en es fr ja ko pt-br ru zh