Wolfram Language

Audio de calcul

La gamme de Shepard: une illusion auditive

Créez une illusion auditive.

In[1]:=
Click for copyable input
range = 12; duration = 10; lfoFreq = .05; basePitch = 30; numOsc = 8; midiToFreq[m_] := 2^((m - 69)/12)*440.

Générez des rampes d'accès pour contrôler les fréquences et les amplitudes des oscillateurs.

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]=

Créez des fréquences qui permettront de contrôler les oscillateurs. Les fréquences sont séparées exactement une octave les unes des autres et augmentent exponentiellement, de sorte que la tonalité augmente de façon linéaire.

In[3]:=
Click for copyable input
freqs = Table[ midiToFreq[(phasors[[i]])*12*numOsc + basePitch], {i, numOsc}]; AudioPlot[freqs, PlotLayout -> "Overlaid", PlotRange -> All]
Out[3]=

Créez des amplitudes qui contrôlent les oscillateurs. Les amplitudes vont à 0 lorsque les fréquences chutent à la valeur minimale.

In[4]:=
Click for copyable input
amps = Cos[#*Pi - Pi/2.] & /@ phasors; AudioPlot[amps, PlotLayout -> "Overlaid", PlotRange -> All]
Out[4]=

Affichez la relation entre la fréquence et l'amplitude d'un oscillateur.

In[5]:=
Click for copyable input
AudioPlot[AudioNormalize /@ {freqs[[2]], amps[[2]]}, PlotRange -> All]
Out[5]=

Combinez une banque d'oscillateurs en utilisant les fréquences et les amplitudes créées.

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]=

Exemples connexes

de en es ja ko pt-br ru zh