Libreria in linguaggio C per elaborazione audio in real time



Documenti analoghi
Nota di Copyright. Interfaccia audio. Libreria portaudio. Callback function. Un piccolo problema. Fondamenti di Informatica

La voce di Elvis Presley, la chitarra di David Gilmour e le funzioni di callback in linguaggio C

Scrittura di programmi applicativi per audio real-time: la libreria portaudio

Codifica dei numeri interi positivi e negativi

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Introduzione al corso

Linguaggio C e sistema operativo

Codifiche Binary Coded Decimal (BCD) e Gray

Linguaggio C I puntatori

Dal linguaggio macchina al linguaggio C

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Codifica del video

Codifica dei segnali audio

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Programma sorgente, compilatore, file oggetto, file eseguibile. Traduzione effettuata dal compilatore. Dichiarazione di variabili (esempi)

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio

Architettura del processore. Modello di calcolatore. Caratteristiche del processore. Caratteristiche del processore. Fondamenti di Informatica

Linguaggio C Vettori e stringhe

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Introduzione alla programmazione strutturata

Architettura e funzionamento del calcolatore

Linguaggio C Debugging

Elementi di crittografia

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Input/output in C e in C++

Gestione della memoria di massa e file system

2001 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. Codifica dei testi

Linguaggio C Struct e union

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

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

Linguaggio C Strutture di controllo

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Controllo e correzione degli errori

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Tecniche di compressione senza perdita

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione JPEG

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6

Elementi di crittografia

Autenticazione, firme digitali e certificati digitali

Nota di Copyright RETI DI CALCOLATORI. Lezione 2: indice degli argomenti. Lezione 2. I servizi offerti dalle reti di calcolatori

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

RETI DI CALCOLATORI II

Il cablaggio strutturato degli edifici: cosa c e` ` di nuovo?

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

Nota di Copyright RETI DI CALCOLATORI. Lezione 8: indice degli argomenti. Lezione 8. Fibre ottiche. Struttura di una fibra ottica

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

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

RETI DI CALCOLATORI II

Nota di Copyright RETI DI CALCOLATORI. Lezione 28: indice degli argomenti. Lezione 28. Il collegamento agli Internet Service Provider

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

Memoria cache. Memoria cache. Miss e Hit. Problemi. Fondamenti di Informatica

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

Primo: eliminare la confusione

Argomenti della lezione

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione

Metro VLAN Switch e standard 802.1ad

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Trasmissione bilanciata e amplificatore differenziale

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

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

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

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

Gestione dei processi

Sicurezza applicata in rete

Mathematics Binary System basic concepts

RETI DI CALCOLATORI II

La programmazione in linguaggio C

LO STANDARD TIA/EIA 607

RETI DI CALCOLATORI II

Gestione della memoria per sistemi multiprogrammati. Obiettivi. Partizioni fisse. Partizioni fisse. Fondamenti di Informatica

Network Address Translation

Shielding. E.M.I. Shield e Grounding: analisi applicata ai sistemi di cablaggio strutturato. Pier Luca Montessoro.

Progettazione delle dorsali in fibra ottica

Memoria cache, interrupt e DMA

2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2) Fondamenti di Informatica.

Linguaggio C Struttura dei programmi

Le trappole del linguaggio C

Il protocollo DHCP. Pietro Nicoletti. Mario Baldi

Mobile IP Mobilità nelle reti IP Mario Baldi Politecnico di Torino

Wireless LAN: le motivazioni e le ragioni del successo

2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

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

Spanning Tree Multipli IEEE 802.1s

Cenni sull architettura protocollare TCP/IP

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

Cenni sull architettura protocollare TCP/IP

INTRODUZIONE AI SISTEMI DI CABLAGGIO STRUTTURATO

Reti di calcolatori. Concetti di base. Mario Baldi. Politecnico di Torino. mario.baldi[at]polito.it staff.polito.it/mario.baldi. M.

HDLC e PPP. Silvano GAI

Internet and Intranet Access

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Reti logiche

Transcript:

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) 1

Nota di Copyright Fondamenti di Informatica - Real-time audio 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. 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2

Interfaccia audio dispositivo hardware driver software programma applicativo qui ci pensa il costruttore qui tocca a noi! 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 3

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) 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 4

Un piccolo problema Il driver software esiste già. Come fa a chiamare una funzione della nostra applicazione? Funzioni di CALLBACK!!! 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 5

Callback function driver software programma applicativo f_inizializzazione (indirizzo_fz_appl) chiamata di (*indirizzo_fz_appl)() 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 6

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) 7

rtalib: funzioni di inizializzazione int init_stream_for_input (void) int init_stream_for_output (void) int init_stream_for_input_and_output (void) 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 8

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) 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 9

rtalib: temporizzazione e chiusura void sleep_while_stream_is_running (double seconds) int close_stream (void) 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 10

Esempio: play_wave (main) WAVE wave; int current_playback_position; int main (int argc, char *argv[]) { FILE *fpin; if (argc!= 2)... fpin = fopen (argv[1], "rb"); if (fpin == NULL)... wave = ReadWave (fpin); fclose (fpin); play_wave (); } ReleaseWaveData (&wave); return EXIT_SUCCESS; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 11

Esempio: play_wave (inizializzazione) void play_wave (void) { current_playback_position = 0; if (init_stream_for_output() == -1) { printf ("error opening output stream\n"); exit (EXIT_FAILURE); } sleep_while_stream_is_running (wave.numofstereosamples / (double) SAMPLINGRATE); } return; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 12

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) 13

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; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 14

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; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 15

Fondamenti di Informatica - Real-time audio Esempio: overdrive 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 16

Overdrive analogico Fondamenti di Informatica - Real-time audio 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 17

Overdrive analogico 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 18

Overdrive analogico: il caldo suono delle valvole 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 19

Il diodo ideale: clip 30000 20000 10000 0-40000 -30000-20000 -10000 0 10000 20000 30000 40000-10000 -20000-30000 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 20

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; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 21

Verso un suono più caldo: saturazione esponenziale 40000 30000 20000 10000 0-40000 -30000-20000 -10000 0 10000 20000 30000 40000-10000 -20000-30000 -40000 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 22

Verso un suono più caldo: saturazione esponenziale sample = input_buffer[current_position] * gain / MAXVALUE; overdriven_sample = 1 - (exp (-K * fabs(sample))); if (sample < 0) overdriven_sample = -overdriven_sample; output_buffer[current_position] = overdriven_sample * MAXVALUE; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 23

Verso un suono più caldo: saturazione esponenziale asimmetrica 15000 10000 5000 0-40000 -30000-20000 -10000-5000 0 10000 20000 30000 40000-10000 -15000-20000 -25000-30000 -35000 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 24

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) 25

Fondamenti di Informatica - Real-time audio Esempio: delay (eco) 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 26

L effetto eco prima del digitale 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 27

L effetto eco prima del digitale 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 28

L effetto eco prima del digitale 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 29

Delay digitale Fondamenti di Informatica - Real-time audio 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 30

Delay digitale Fondamenti di Informatica - Real-time audio 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 31

Il nastro magnetico digitale in C Buffer circolare posizione di estrazione posizione di inserimento avanzamento degli indici 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 32

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; 2010 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 33