SE: Osciladores?

kilometro
#16 por kilometro el 18/03/2004
por cierto hay por ahi un oscilador el la_memory32 parece que carga un listado o algo asi en formato *.mem, ¿sabe alguien de que va?.
Subir
kilometro
#17 por kilometro el 18/03/2004
encontre esto:

Mark Andrews escribió:
Hi PIE,

Yeah, a wavetable oscillator would be great. It is already on my todo list, but I'm not getting much time to spend on Synthedit stuff at the moment.

Using a wav or raw would be OK, but it does kind of limit things for changing voices mid sound. In case anyone hadn't figured it out, my memory32 is actually the prototype for a wavetable oscillator, the 32 is the number of samples per wave. Once I've better optimised the code for speed and a few other improvements, I will be doing a memory256 which will have the more typical 256 samples per wave and will probably have a bank of 256 wave shapes.

There will also eventually be a memory creator which will load wave files directly to convert into a memory bank. So the actual distributable sound file will be a single file with the wavetables in rather than having to include lots of small wav files with your synths.

My calender opens up a bit in September and more still in October so it shouldn't be long before I can get to this.


en:

http://www.la-la.com/forum/posting.php?mode=quote&p=52
Subir
TClaw
#18 por TClaw el 18/03/2004
Hey gente!
Yo se programar en Ada, Visual basic, php y aunque no venga al caso en Basic tb... :P

La cosa es que el tema me interesa... La verdad es que los osciladores y demas que trae synthedit tan muy bien pero es muy dificil inovar si te tienes que ceñir a enlazaar modulos... como vas a hacer un sinte realmente innovador de esta forma???

2 cosas quiero saber:

1) Si la programacionde modulos de Synedit es solo eso.. es decir que un dia me puedo preocupar de crear un modulo nuevo (por ejemplo un generador por sintesis aditiva) y otro dia ya me preocupare de crear algun sinte incluyendolo...

2) si existe documentacion sobre el tema (por basica que sea) en castellano... eso es lo que veo mas dificil... no tengo problema en aprender a programar para la ocasion siempre y cuando la lectura me sea facil... Realmente una vez has aprendido a programar solo se trata de que te cambien el lenguaje puesto que todos siguen el mismo esquema... La complicacion? pues que se cambia el tipo de operaciones, yo estoy acostumbrado a textos, busquedas en bases de datos y como mucho graficos... pasar a tratar ondas de sonido puede ser bestia pero es solo tiempo... pero es que si nisiquiera dispongo de ejemplos que pueda entender ni de alguna explicacion en la que para leer un parrafo necesite media hora (mi velocidad de lectura en ingles depende siempre de lo que tarde en encontrar las palabras en el diccionario :P) pos la cosa se va a hacer tan pesada que paso hasta de intentarlo...

creo que lo primero que habria que hacer es intentar encontrar toda esta info para que algunos podamos empezar a hacer nuestros pinitos...

Luego abrir un hilo pa ir mostrando como va consiquieno la gente que suene algo (porque imagino que sera dificil pasar de la senoide jejeje)...

Bueno voy a ver si encuentro algo en la red sobre el tema... ta luego
Subir
sivsfa
#19 por sivsfa el 18/03/2004
hombre... me encantan los berenjenales... pero mi idea era la de trabajar con osciladores hechos a base de wavs... grabar nosotros los sonidos y hacernos los osc dependiendo del tipo de sinte que queramos hacer... uno "industrial" estaría bien... nos vamos a las obras, grabamos, trabajamos el wav, lo loopeamos, etc... o uno basado en instrumentos acústicos... incluso mezclar osciladores de ese tipo con otras cosas para formar el sonido (loops convencionales que cambien el pitch, el start/endpoint según el osc) burradas así.. esa era mi idea... pero si quereis código... buff la idea me asusta, pero contribuiré en lo que pueda y algo más :)
Subir
kilometro
#20 por kilometro el 18/03/2004
hola:

el oscialador este que popsteo mas arriba creo que trata de este tema, intenta hacer uno en el cual tu puedas inluir 250 wavs en un listado.. lo que pasa es que no encuentro el programa para hacer los mem.... toy en pelotas....
Subir
kilometro
#21 por kilometro el 18/03/2004
si os animaseis a hacer un grupo de programadores seria cojonudo.
Subir
stockhausen
#22 por stockhausen el 18/03/2004
http://groups.yahoo.com/group/syntheditsdk/

Aki creo recordar q hay codigo para un oscilador senoidal en el directorio de files, pero no lo puedo postear ni confirmar porq ahora mismo el yahoo no me deja entrar con mi nick.. :(
Subir
sivsfa
#23 por sivsfa el 18/03/2004
ahi va... :)

le voy a echar un vistazo...
Subir
TClaw
#24 por TClaw el 18/03/2004
a ver... pregunta simple:

que software necesito para programar para synthedit???
donde se descarga?
es gratuito??? (si no lo es sorry pero no me meto :P)
Subir
stockhausen
#25 por stockhausen el 18/03/2004
bbrrrrrrrrffffffffffffffffffff :?
FUNCION PRINCIPAL
---------------------------------------------------

#include
#include
#include "Module.h" /* ESTI YE UNA LLAMADA Q VA EN ARCHIVO APARTE*/

#include "SEMod_struct.h"
#include "SEPin.h"

#define PN_X_IN 0
#define PN_Y_OUT 1
#define PN_FREQ_SCALE 2

#define TWO_PI 6.28318530718f
#define VOLT_PER_OCTAVE 0
#define VOLT_PER_KHZ 1


Module::Module(seaudioMasterCallback seaudioMaster) : SEModule_base(seaudioMaster)
{
}

Module::~Module()
{
}

// main process
void Module::sub_process(long buffer_offset, long sampleFrames )
{
float *x = buffer_offset + x_in;
float *y = buffer_offset + y_out;
float freq;

if( *x != prev_x )
{
prev_x = *x;
if( freq_scale == VOLT_PER_OCTAVE )
freq = 440.0f * (float) ( pow( 2.0f, ( ( *x * 10.0f ) - 5.0f ) ) );
else
freq = *x * 10000.0f; // 1 volt/kHz, 1.0 = 10 SE volts

delta_ramp = TWO_PI * freq * sampleRateRecip;
close_enough = TWO_PI - ( delta_ramp * 0.5f );
}
for( int s = sampleFrames; s > 0; --s )
{
ramp += delta_ramp;
if( ramp >= close_enough ) ramp -= TWO_PI;
*y++ = ( ( (float) sin( ramp ) ) * 0.5f );
}
}


void Module::open()
{
// this macro switches the active processing function
// e.g you may have several versions of your code, optimised for a certain situation
SET_PROCESS_FUNC(Module::sub_process);
SEModule_base::open(); // call the base class
sampleRateRecip = 1.0f / sampleRate;
ramp = 0.f;
prev_x = -20.0f;
getPin(PN_Y_OUT)->TransmitStatusChange( SampleClock(), ST_RUN );
}


// this routine is called whenever an input changes status.
// e.g when the user changes a module's parameters,
// or when audio stops/starts streaming into a pin
void Module::OnPlugStateChange(SEPin *pin)
{
}


// describe the module
bool Module::getModuleProperties (SEModuleProperties* properties)
{
properties->name = "SineOsc"; // this is the name the end-user will see

// return a unique string.
// if posible include manufacturer and plugin identity
// this is used internally by SE to identify the plug. No two plugs may have the same id.
properties->id = "dehauptSineOscV1.0";

// Info, may include Author, Web page whatever
properties->about = "SineOsc module V1.0\n©David Haupt, 2003\nAll Rights Reserved\nwww.dehaupt.com/SynthEdit\ndave@dehaupt.com";
return true;
}

// describe the pins (plugs)
bool Module::getPinProperties (long index, SEPinProperties* properties)
{
switch( index )
{
case PN_X_IN:
properties->name = "Pitch";
properties->variable_address = &x_in;
properties->direction = DR_IN;
properties->datatype = DT_FSAMPLE;
properties->default_value = "1";
break;
case PN_Y_OUT:
properties->name = "Signal Out";
properties->variable_address = &y_out;
properties->direction = DR_OUT;
properties->datatype = DT_FSAMPLE;
properties->default_value = "0";
break;
case PN_FREQ_SCALE:
properties->name = "Freq Scale";
properties->variable_address = &freq_scale;
properties->direction = DR_PARAMETER;
properties->datatype = DT_ENUM;
properties->datatype_extra = "1 Volt/Octave,1 Volt/kHz";
properties->default_value = "0";
break;
default:
return false; // host will ask for plugs 0,1,2,3 etc. return false to signal when done
};
return true;
}





EL ARCHIVO MODULE.H , QUE LLAMA EN LA CABECERA
------------------------------------------------------------------


#if !defined(_SEModule_INCL_)
#define _SEModule_INCL_

#include "SEModule_base.h"

class Module : public SEModule_base
{
public:
Module(seaudioMasterCallback seaudioMaster);
~Module();

virtual bool getModuleProperties (SEModuleProperties* properties);
virtual bool getPinProperties (long index, SEPinProperties* properties);
virtual void sub_process(long buffer_offset, long sampleFrames );
void OnPlugStateChange(SEPin *pin);
virtual void open();

private:
float *x_in; // frequency
short freq_scale;
float *y_out;
float ramp, prev_x, delta_ramp, close_enough;
float sampleRateRecip; // ( 1 / sampleRate )
};
#endif


Brrffffff, ahora preguntarme a cuento de que sale un sonido de todas estas operaciones, NPI :? , entre esto y el disco de pizzicato five q estoy escuchando... vaya momento... estoy llegando al nirvana :lol:
Subir
sivsfa
#26 por sivsfa el 18/03/2004
hombre, el sonido sale de aquí... aquí se "dibuja la onda"... CREO, claro... :D

// main process
void Module::sub_process(long buffer_offset, long sampleFrames )
{
float *x = buffer_offset + x_in;
float *y = buffer_offset + y_out;
float freq;

if( *x != prev_x )
{
prev_x = *x;
if( freq_scale == VOLT_PER_OCTAVE )
freq = 440.0f * (float) ( pow( 2.0f, ( ( *x * 10.0f ) - 5.0f ) ) );
else
freq = *x * 10000.0f; // 1 volt/kHz, 1.0 = 10 SE volts

delta_ramp = TWO_PI * freq * sampleRateRecip;
close_enough = TWO_PI - ( delta_ramp * 0.5f );
}
for( int s = sampleFrames; s > 0; --s )
{
ramp += delta_ramp;
if( ramp >= close_enough ) ramp -= TWO_PI;
*y++ = ( ( (float) sin( ramp ) ) * 0.5f );
}
}
Subir
stockhausen
#27 por stockhausen el 18/03/2004
TClaw escribió:
a ver... pregunta simple:

que software necesito para programar para synthedit???
donde se descarga?
es gratuito??? (si no lo es sorry pero no me meto :P)


En principio un compilador d C/C++ y la sdk de steinberg q es gratuita. El compilador creo q hay alguno gratuito, sino tienes alguno muy barato.
Animo TClaw, de esta podemos comprar oberheim y sacar el OB24 :lol:
Subir
TClaw
#28 por TClaw el 18/03/2004
jejejeje... pos esta muy claro...

primero incluye el partido rapido pero se da cuenta de que necesita mas tiempo e incluye el partido normal luego incluye el modulo que esta claro que es de donde sale el sonido y lo demas es para rellenar y no tiene nada qu ever con el sonido...

ahora explico el modulo:

1 si se define el modulo de synthedit
2 definelo

Ta claro no?

3 Clase de modulo: modulo de synthedit publico...

sigue sin problemas...

4 Robot virtual: va sacando propiedades del modulo

5 y viene la parte en privado que como se ve que habla de frecuencia y escala se ve claro que genera el sonido no?


--------------------------

Conclusion... es el tipico programa pa despistar en el que la parte importante es privada...

QUE NO OS ENTERAIS!!

(creo que hoy no deberia haberme levantado de la cama)
Subir
stockhausen
#29 por stockhausen el 18/03/2004
sivsfa escribió:
hombre, el sonido sale de aquí... aquí se "dibuja la onda"... CREO, claro... :D

// main process
void Module::sub_process(long buffer_offset, long sampleFrames )
{
float *x = buffer_offset + x_in;
float *y = buffer_offset + y_out;
float freq;

if( *x != prev_x )
{
prev_x = *x;
if( freq_scale == VOLT_PER_OCTAVE )
freq = 440.0f * (float) ( pow( 2.0f, ( ( *x * 10.0f ) - 5.0f ) ) );
else
freq = *x * 10000.0f; // 1 volt/kHz, 1.0 = 10 SE volts

delta_ramp = TWO_PI * freq * sampleRateRecip;
close_enough = TWO_PI - ( delta_ramp * 0.5f );
}
for( int s = sampleFrames; s > 0; --s )
{
ramp += delta_ramp;
if( ramp >= close_enough ) ramp -= TWO_PI;
*y++ = ( ( (float) sin( ramp ) ) * 0.5f );
}
}


No se tio, yo ya cruce la pleyada y estoy flotando ente nebulosas y supernovas. vaya berenjenal.. vaya berenjenal!. TENEMOS Q HACERLO :D !!
Subir
TClaw
#30 por TClaw el 18/03/2004
ahora en serio...

1) identificar las entradas midi y salidas de audio.. de la forma que las entienda el synthedit

2) programa base apartado para crear una senoide... a partir de ahi to mamao...
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo