.. currentmodule:: brian

.. index::
   pair: example usage; Sound
   pair: example usage; play
   pair: example usage; set_default_samplerate

.. _example-hears_artificial_vowels:

Example: artificial_vowels (hears)
==================================

This example implements the artificial vowels from
Culling, J. F. and Summerfield, Q. (1995a). "Perceptual segregation of
concurrent speech sounds: absence of across-frequency grouping by common
interaural delay" J. Acoust. Soc. Am. 98, 785-797.

::

    from brian import *
    from brian.hears import *
    
    duration = 409.6*ms
    width = 150*Hz/2
    samplerate = 10*kHz
    
    set_default_samplerate(samplerate)
    
    centres = [225*Hz, 625*Hz, 975*Hz, 1925*Hz]
    vowels = {
        'ee':[centres[0], centres[3]],
        'ar':[centres[1], centres[2]],
        'oo':[centres[0], centres[2]],
        'er':[centres[1], centres[3]]
        }
    
    def generate_vowel(vowel):
        vowel = vowels[vowel]
        x = whitenoise(duration)
        y = fft(asarray(x).flatten())
        f = fftfreq(len(x), 1/samplerate)
        I = zeros(len(f), dtype=bool)
        for cf in vowel:
            I = I|((abs(f)<cf+width)&(abs(f)>cf-width))
        I = -I
        y[I] = 0
        x = ifft(y)
        return Sound(x.real)
    
    v1 = generate_vowel('ee').ramp()
    v2 = generate_vowel('ar').ramp()
    v3 = generate_vowel('oo').ramp()
    v4 = generate_vowel('er').ramp()
    
    for s in [v1, v2, v3, v4]:
        s.play(normalise=True, sleep=True)
    
    s1 = Sound((v1, v2))
    #s1.play(normalise=True, sleep=True)
    
    s2 = Sound((v3, v4))
    #s2.play(normalise=True, sleep=True)
    
    v1.save('mono_sound.wav')
    s1.save('stereo_sound.wav')
    
    subplot(211)
    plot(v1.times, v1)
    subplot(212)
    v1.spectrogram()
    show()
    

