In [ ]:
import os, sys
from TimeFreqAuditoryScene import *
from IPython.display import Audio, display, clear_output
from IPython.html import widgets
from IPython.html.widgets import interactive
%matplotlib inline

Generating opponent shifts in inharmonic chord

Two Chords T1,T2 are generated

  • T1 is inharmonic with random intervals
  • T2 is build from T1 with various ratios of up or down shifts for individual tones in T1

T1 and T2 share a gaussian spectral envelope


In [ ]:
# Parameterization
# Global parameters
fs = 44100
delay = 1./8.
duration = 1./8.
mu_log=np.log(500)
sigma_log=2.
genv = GaussianSpectralEnvelope(mu_log=mu_log, sigma_log=sigma_log)

In [ ]:
duration=0.1
delay=0.0
fb = 10.

n_tones = 18
intervals_st = np.random.randint(6,7,n_tones)

def shift_inharmonic(th=0.1):

    # random shift up and down,
    shifts_st = (np.random.rand(n_tones)>th)*2-1

    scene = Scene()
    tone1 = Chord(fb=fb,
                  intervals=2.**(intervals_st/12.),
                  duration=duration,
                  env=genv)
    tone2 = Chord(fb=fb,
                  intervals=2.**((intervals_st)/12.),
                  duration=duration,
                  env=genv,
                  delay=duration+delay)
    tone2.shift_tones(2.**(shifts_st/12.))
    scene.add([tone1,tone2])

    # draw spectrogram
    sd = SceneDrawer()
    sd.draw(scene)
    plt.show()
    # generate sound
    x = scene.generate(fs=fs)
    display(Audio(x, rate=fs, autoplay=True))

w = interactive(shift_inharmonic, th=(0.,1.))
display(w)