[PPA 01] Herramientas y Saludos

Este articulo es la memoria de las dos primeras sesiones (Junio 21 y 28 del 2011) del curso de programación para audio que se está dictando en el Subterrakeo. Haga click aquí para info de horarios, cómo llegar o para suscribirse a la lista de correos.


Pure Data.

  • Info general sobre PureData.
  • Binarios para diferentes plataformas. Asegúrese de instalar el paquete pd-extended.

Hola Mundo

Aquí están dos programas muy sencillos, el primero imprime el mensaje "Hola, mundo!" y el segundo genera una señal senoidal, la muestra en pantalla usando un array y la envía a la salida de audio del sistema para que suene.
saludos puredata.zip

Señales Senoidales.

 a=A_o\times \sin(2 \times\pi\times f\times t+\beta)
 T = 1/f

Imagen tomada de http://es.wikipedia.org/wiki/Archivo:OndaSenoidal.svg

C++

Instalación de herramientas en Ubuntu

1
2
3
$ sudo apt-get install build-essential
$ sudo apt-get install gnuplot
$ sudo apt-get install audacity

Nota: Algunas instalaciones de Ubuntu no tienen el repositorio universe en la lista de fuentes para adquisición de software. Si no se encuentra alguno de los paquetes anteriores al tratar de instalarlo, edite el archivo /etc/apt/sources.list, quite el comentario a las lineas que dicen universe y haga $ sudo apt-get update

INSTALACIÓN DE HERRAMIENTAS EN MAC OS X

  1. Instale Xcode de aquí o de el dvd de instalación de Mac OS X. Asegurese de seleccionar el paquete Unix Developer Tools.
  2. Instale Homebrew.
  3. Instale gnuplot así: $ brew install gnuplot.
  4. Instale Audacity.

Documentación y Libros

Hola Mundo (Texto)

hola.cpp:

1
2
3
4
5
6
#include <iostream>

int main(int argc, const char *argv[]){
    std::cout << "Hola, Mundo!" << "\n";
    return 0;
}

Compilar:

1
$ g++ -Wall hola.cpp -o hola

Ejecutar:

1
$ ./hola

makefile:

1
2
all:
    g++ -Wall hola.cpp -o hola

Compilar con make:

1
$ make

Hola mundo 2 (onda senoidal y gnuplot)

hola.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//==================================================//
//  Rafael Vega <rvega@elsoftwarehamuerto.org>//
//  Licenciado Bajo Creative Commons Attribution    //
//  http://creativecommons.org/licenses/by/2.5/co/  //
//                                                  //
//  Dibuja una onda senoidal como texto             //
//==================================================//

#include <iostream>
#include <math.h>

#define PI 3.141692654

int main(int argc, const char *argv[]){
    std::cout.precision(9);

    int numSamples = 64;
    double angleIncrement = 2*PI / numSamples;

    for (int i = 0; i < numSamples; i++) {
        double sample = sin(i*angleIncrement);
        std::cout << sample << "\n";
    }

    return 0;
}

makefile:

1
2
    all:
      g++ -Wall hola.cpp -o hola

Ejecutar y guardar el resultado en un archivo:

1
./hola > samples.txt

Ver el dibujo de la onda generada con gnuplot:

1
2
3
4
5
    $ gnuplot
    gnuplot&gt; plot "samples.txt" with lines
    gnuplot&gt; plot "samples.txt" with impulses
    gnuplot&gt; plot "samples.txt" with steps
    gnuplot&gt; quit;

Hola mundo 3 (onda senoidal y audacity)

hola.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    //==================================================//
    //  Rafael Vega <rvega@elsoftwarehamuerto.org>      //
    //  Licenciado Bajo Creative Commons Attribution    //
    //  http://creativecommons.org/licenses/by/2.5/co/  //
    //                                                  //
    //  Dibuja una onda senoidal como archivo raw       //
    //==================================================//

    #include <iostream>
    #include <math.h>

    #define PI 3.141692654

    int main(int argc, const char *argv[]){
        std::cout.precision(9);
           
        float duration = 1.0; //seconds
        float frequency = 440; //Hz
        float samplerate = 44100; //Samples/second

        FILE* f = fopen("audio.raw","wb");
        if(f==NULL){
            std::cout << "Error creating output file";
            return 1;
        }

        int numSamples = (int)(duration*samplerate);
        double angleIncrement = 2*PI*frequency / numSamples;

        for (int i = 0; i < numSamples; i++) {
            double sample = sin(i*angleIncrement);
            float fsample = (float)sample;
            if(1 != fwrite(&fsample, sizeof(float), 1, f)){
                std::cout << "Error writing data to file";
               return 1;
            }
        }
       
        fclose(f);
        return 0;
    }

makefile:

1
2
    all:
        g++ -Wall hola.cpp -o hola

Ejecutar:

1
$ ./hola

Abrir audio.raw en audacity: File->Import->Raw Data...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>