2009-04-26 18 views
6

Me gustaría producir sonidos que se parezcan al audio de instrumentos reales. El problema es que tengo muy poca idea de cómo conseguirlo.¿Cómo sintetizar sonidos?

Lo que sé esta lejos de instrumentos reales es que suena que la salida son rara vez limpia. Pero, ¿cómo producir esos sonidos inmundos?

este momento he llegado a hacer esto, se produce un sonido bastante sencilla de la que no estoy seguro de que incluso utilizando el alsa correctamente.

import numpy 
from numpy.fft import fft, ifft 
from numpy.random import random_sample 
from alsaaudio import PCM, PCM_NONBLOCK, PCM_FORMAT_FLOAT_LE 

pcm = PCM()#mode=PCM_NONBLOCK) 
pcm.setrate(44100) 
pcm.setformat(PCM_FORMAT_FLOAT_LE) 
pcm.setchannels(1) 
pcm.setperiodsize(4096) 

def sine_wave(x, freq=100): 
    sample = numpy.arange(x*4096, (x+1)*4096, dtype=numpy.float32) 
    sample *= numpy.pi * 2/44100 
    sample *= freq 
    return numpy.sin(sample) 

for x in xrange(1000): 
    sample = sine_wave(x, 100) 
    pcm.write(sample.tostring()) 

Respuesta

8

Alegre, si quieres generar (desde cero) algo que realmente parezca "orgánico", es decir, como un objeto físico, probablemente sea mejor que aprendas un poco sobre cómo se generan estos sonidos. Para una introducción sólida, puede echarle un vistazo a un libro como Fletcher and Rossings The Physics of Musical Instruments. También hay muchas cosas en la web, es posible que desee echar un vistazo a la cartilla James Clark tiene here

Tener al menos un descuido sobre este tipo de cosas le dará una idea de lo que se enfrenta. ¡Modelar instrumentos físicos con precisión es muy difícil!

Si lo que quieres hacer es tener algo que suena física, más bien algo que suena como instrumento de X, su trabajo es un poco más fácil. Puede generar frecuencias con bastante facilidad y juntarlas, agregar un poco de ruido, y obtendrá algo que al menos no suena como un tono puro.

Leyendo un poco sobre el análisis de Fourier, en general, va a ayudar, como las técnicas de modulación de frecuencia (FM).

¡Diviértete!

15

La síntesis de sonidos es un tema complejo que requiere muchos años de estudio para dominar.

Tampoco es un problema totalmente resuelto, aunque la evolución relativamente recientes (tales como la síntesis de modelado físico) han hecho progresos en la imitación de instrumentos del mundo real.

Hay varias opciones disponibles para usted. Si está seguro de que desea explorar más la síntesis, entonces le sugiero que empiece por aprender sobre la síntesis de FM. Es relativamente fácil de aprender e implementar en software, al menos en formas básicas, y produce una amplia gama de sonidos interesantes. Además, consulte el libro "The Computer Music Tutorial" de Curtis Roads. Es una Biblia para todo lo relacionado con la música por computadora, y aunque tiene algunos años, es el libro de elección para aprender los fundamentos.

Si desea una forma más rápida de producir un sonido real, considere usar técnicas de muestreo: es decir, grabe los instrumentos que desea reproducir (o utilice un banco de muestras preexistente), y solo reproduzca las muestras. Es un enfoque mucho más directo (y a menudo más efectivo).

+0

No me gustaría usar bancos de muestra. Quiero algo que se parezca a los instrumentos, no a la vida en absoluto. – Cheery

1

Estoy de acuerdo en que esto no es muy trivial y no existe un "camino correcto", pero debería considerar comenzar por (o hacer uno propio) MIDISoundFont.

0

Como dijeron otras personas, no es un tema trivial en absoluto. Existen desafíos tanto desde el punto de vista de la programación (especialmente si te preocupa la baja latencia) como la parte de la síntesis. Una mina de oro para la síntesis de sonido es la página de Julius O. Smith. Hay mucho de las técnicas para la síntesis http://ccrma-www.stanford.edu/~jos/.