• Non ci sono risultati.

Nota di Copyright

N/A
N/A
Protected

Academic year: 2021

Condividi "Nota di Copyright"

Copied!
6
0
0

Testo completo

(1)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO

Facoltà di Ingegneria Università degli Studi di Udine

Libreria in linguaggio C per elaborazione audio in real time

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà dell’autore prof. Pier Luca Montessoro, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. L’autore non assume alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 3

Interfaccia audio

driver software dispositivo

hardware

programma applicativo

qui tocca a noi!

qui ci pensa il costruttore…

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 4

Libreria portaudio

• http://www.portaudio.com/

“Portable cross-platform Audio API”

• Compatibile con cygwin/gcc

• Wrapper per le esercitazioni di

“Architettura dei calcolatori”:

rtalib (real-time audio library)

Fondamenti di Informatica - Real-time audio

Un piccolo problema

Il driver software esiste già. Come fa a chiamare una funzione della nostra applicazione?

Funzioni di CALLBACK!!!

Fondamenti di Informatica - Real-time audio

Callback function

driver software

programma applicativo f_inizializzazione (indirizzo_fz_appl)

chiamata di (*indirizzo_fz_appl)()

(2)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 7

rtalib

• Limitata al formato CD audio (44.1 KHz, 16 bit, stereo)

• Richiede i file cygportaudio-2.dll e libportaudio.dll.a (Windows) o libportaudio.so (Linux), portaudio.h, rtalib.c, rtalib.h, wav.c, wav.h, (sul sito www.montessoro.it)

• per compilare:

cc_rta <nome programma>

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 8

rtalib: funzioni di inizializzazione

int init_stream_for_input (void)

int init_stream_for_output (void)

int init_stream_for_input_and_output (void)

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 9

rtalib: funzioni di callback

void write_buffer_to_play

(signed short int *buffer, int buffer_size)

void read_recorded_buffer

(signed short int *buffer, int buffer_size)

void read_and_write_buffer

(signed short int *input_buffer, signed short int *output_buffer, int buffer_size)

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 10

rtalib: temporizzazione e chiusura

void sleep_while_stream_is_running (double seconds)

int close_stream (void)

Fondamenti di Informatica - Real-time audio

Esempio:

WAVE wave;

int current_playback_position;

Fondamenti di Informatica - Real-time audio

Esempio: play_wave (inizializzazione)

(3)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 13

Esempio: play_wave (callback)

void write_buffer_to_play

(signed short int *buffer, int buffer_size) {

int i;

for (i = 0; i + current_playback_position <

wave.numofstereosamples && i < buffer_size; i++) {

*buffer++ = SAMPLE(wave, LEFT,

i + current_playback_position);

*buffer++ = SAMPLE(wave, RIGHT,

i + current_playback_position);

}

while (i < buffer_size) {

/* silence left ... and right */

*buffer++ = 0; *buffer++ = 0; i++;

}

current_playback_position += buffer_size;

return;

}

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 14

Esempio: wire

void wire (void) {

if (init_stream_for_input_and_output() == -1) {

printf ("error opening output stream\n");

exit (EXIT_FAILURE);

}

printf ("Playing... 'X' to terminate.\n");

while (toupper(getchar()) != 'X');

return;

}

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 15

Esempio: wire

void read_and_write_buffer

(signed short int *input_buffer,

signed short int *output_buffer, int buffer_size) {

int i;

for (i = 0; i < buffer_size; i++) {

*output_buffer++ = *input_buffer++; /* left */

*output_buffer++ = *input_buffer++; /* right */

}

return;

}

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 16

Esempio: overdrive

Fondamenti di Informatica - Real-time audio

Overdrive analogico

Fondamenti di Informatica - Real-time audio

Overdrive analogico

(4)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 19

Overdrive analogico:

il caldo suono delle valvole

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 20

Il diodo ideale: clip

-30000 -20000 -10000 0 10000 20000 30000

-40000 -30000 -20000 -10000 0 10000 20000 30000 40000

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 21

Il diodo ideale in linguaggio C

sample = input_buffer[current_position];

overdriven_sample = fabs (sample * gain);

if (overdriven_sample > DYNRANGE * MAXVALUE) overdriven_sample = DYNRANGE * MAXVALUE;

if (sample < 0) overdriven_sample = -overdriven_sample;

output_buffer[current_position = overdriven_sample;

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 22

Verso un suono più caldo:

saturazione esponenziale

-40000 -30000 -20000 -10000 0 10000 20000 30000 40000

-40000 -30000 -20000 -10000 0 10000 20000 30000 40000

Fondamenti di Informatica - Real-time audio

Verso un suono più caldo:

saturazione esponenziale

Fondamenti di Informatica - Real-time audio

Verso un suono più caldo:

saturazione esponenziale asimmetrica

(5)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 25

Verso un suono più caldo:

saturazione esponenziale asimmetrica

sample =

input_buffer[current_position] * gain / MAXVALUE;

if (sample < 0) overdriven_sample =

- (1 - (exp(-K*fabs(sample))));

else

overdriven_sample =

(1 - (exp(-K*fabs(sample*ASYMGAIN))))/ASYMGAIN;

output_buffer[current_position] =

overdriven_sample * MAXVALUE;

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 26

Esempio: delay (eco)

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 27

L’effetto eco prima del digitale

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 28

L’effetto eco prima del digitale

Fondamenti di Informatica - Real-time audio

L’effetto eco prima del digitale

Fondamenti di Informatica - Real-time audio

Delay digitale

(6)

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 31

Delay digitale

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 32

Il “nastro magnetico” digitale in C

• Buffer circolare

posizione di estrazione

posizione di inserimento

avanzamento degli indici

Fondamenti di Informatica - Real-time audio

© 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 33

Il “nastro magnetico” digitale in C

• Per il delay, scrittura e lettura sono sincronizzate (semplificazione!)

output_buffer[i] = input_buffer[i] +

nastro[indice_estrazione]*attenuazione;

nastro[indice_inserimento] = output_buffer[i];

if (++indice_inserimento >= DIM_BUFFER) indice_inserimento = 0;

if (++indice_estrazione >= DIM_BUFFER) indice_estrazione = 0;

Riferimenti

Documenti correlati

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e