¿Cómo traduzco una matriz numpy a música polifónica?

Quiero usar una matriz para reproducir música / sonidos. La salida de música / sonidos debe ser polifónica.

Intenté esto:

from scipy.io.wavfile import write import numpy as np duration=0.24 amp=1E4 rate=44100 def note(freq, duration, amp, rate): t = np.linspace(0, duration, duration * rate) data = np.sin(2*np.pi*freq*t)*amp return data.astype(np.int16) # two byte integers tone0 = note(0, duration, amp, rate) #silence tone1 = note(261.63, duration, amp, rate) # C4 tone2 = note(329.63, duration, amp, rate) # E4 tone3 = note(392.00, duration, amp, rate) # G4 seq1 = np.concatenate((tone1,tone0,tone0,tone0, tone1),axis=1) seq2 = np.concatenate((tone0,tone2,tone0,tone0, tone2),axis=1) seq3 = np.concatenate((tone0,tone0,tone3,tone0, tone3),axis=1) song = np.dstack((seq1,seq2,seq3)) write('song.wav', 44100, song) 

Me gustaría tocar el archivo song.wav y escuchar las notas C, E y G una después de la otra, luego un silencio y luego el acorde C (las notas C, E, G se tocan al mismo tiempo).

Lo que obtengo, en cambio, es un error por la función de escritura. Y eso está bien porque la función de escritura (que yo sepa no puede crear archivos wav polifónicos).

Por si acaso, el error es:

 Traceback (most recent call last): File "music2.py", line 26, in  write('song.wav', 44100, song) File "/usr/lib/python2.7/dist-packages/scipy/io/wavfile.py", line 168, in write fid.write(struct.pack('<ihHIIHH', 16, 1, noc, rate, sbytes, ba, bits)) struct.error: 'I' format requires 0 <= number <= 4294967295 
  1. ¿Conoces una alternativa a la función de escritura que soporta la polifonía?
  2. Estoy abierto a una alternativa completa de mi código. El punto importante es generar (o reproducir) sonidos polifónicos a partir de una matriz numpy. Estoy tratando de hacer algo como esto: http://img44.imageshack.us/img44/6182/music.swf , pero mucho más simple; no GUI; no interactiva, solo la misma idea de una matriz 1 y 0 era la fila asignada y el sonido / nota específico y el código de las columnas para el momento en que se tocan esas notas.

El error que está recibiendo se debe a que se write solo una matriz bidimensional o bidimensional. Le estás pasando una matriz tridimensional (la salida de dstack es 3D).

No estoy seguro de que entienda lo que quiere decir con polifónico, pero si simplemente quiere decir que quiere que se superpongan diferentes tonos, entonces todo lo que necesita hacer es superponer las formas de onda:

 song = seq1 + seq2 + seq3 # Assumes seqs are of same length 

Al final, es probable que desee pasar una matriz 1-D. Los arreglos 2-D son para si quieres escribir sonidos estéreo.