01-wave-terrain-synthesis.py - Simple Wave Terrain Synthesis.

Wave Terrain Synthesis (WTS) is a sound synthesis technique that combines elements of traditional waveforms and more complex geometric manipulations, typically for creating new and unique sounds. It was developed as a way to generate evolving textures and timbres, using an approach that involves mapping a wave (or set of waves) to a 3D surface.

In this example, the terrain is generated with sin functions with sliding phase. It is then scanned with sine waves assigned to x and y positions in the 2D table.

from pyo import *
import random, math

s = Server(duplex=0).boot()

# Function to generate the terrain in a matrix.
def terrain(size=256, freq=1, phase=16):
    mat = []
    xfreq = 2 * math.pi * freq
    for j in range(size):
        ph = math.sin(j / float(phase))
        mat.append(
            [math.sin(xfreq * (i / float(size)) + ph) for i in range(size)]
        )
    return mat

# Size of a square matrix.
SIZE = 512

# Creates the terrain.
field = NewMatrix(SIZE, SIZE, terrain(SIZE, freq=2, phase=12)).normalize()
field.view()

# Creates the x and y moving positions to scan the matrix.
rnd = Randi(min=0.05, max=0.45, freq=0.1)
x = Sine(freq=[50, 50.2, 99.5, 99.76, 149.97, 151.34], mul=0.49, add=0.5)
y = Sine(freq=12.5, mul=rnd, add=0.5)

# Reads interpolated values in the matrix.
a = MatrixPointer(matrix=field, x=x, y=y, mul=0.05).out()

s.gui(locals())