0
Giu 26 2017

Guitar Biro

Tempo fa, avevo annunciato di voler creare un auto tabulatore per la chitarra.

È passato un po’ di tempo, però alla fine qualcosa ho fatto, e ne è uscito un bel proof of concept.

Come algoritmo alla fine ho scelto l’auto correlazione, quindi un’analisi nel dominio del tempo. Avevo fatto delle prove con la trasformata di Fourier, ma ottenevo dei risultati effettivamente peggiori, come riportato anche su degli studi su IEEEXplore e su vari siti. Inoltre per Fourier in C esistono delle librerie ma sono più difficili da usare dell’autocorrelazione.

L’autocorrelazione permetterebbe anche di determinare il punto su cui la nota è stata suonata, cosa che con l’assunzione che si suoni più o meno sopra i pickup, permetterebbe anche di trovare in quale corda è stata suonata la nota. Però questa è un’assunzione forte e spesso c’erano risultati non proprio corretti.

Quindi ho preferito mostrare tutte le posizioni in cui una nota può essere suonata e non consente di salvare i risultati ottenuti.

Mi spiace dover rilasciare sotto la GNU GPL v3, rilascerei volentieri sotto una licenza più leggera, come la MIT, però ho usato RSVG (da GNOME) per mostrare l’immagine del manico della chitarra. Se qualcuno riuscisse a togliere questa dipendenza potrebbe considerare tranquillamente il codice rilasciato sotto licenza MIT, e magari potrebbe farmi un pull su GitHub :-) .

Il software è stato scritto senza prediligere una piattaforma, però per il momento l’ho testato solo su Debian.

Inoltre mancano numerose funzionalità, una su tutte la possibilità di scegliere l’accordatura dello strumento, sebbene io l’abbia realizzata in modo parametrico.

Detto tutto ciò, su GitHub potete trovare tutto il codice sorgente.

Invece in esclusiva per il sito, pubblico la relazione sul progeto per l’esame.

0
Apr 20 2017

Nuovo progetto: auto tablatore per chitarra

Ultimamente il tempo che posso dedicare a sperimentare e in generale nerdare è abbastanza poco, però potrò, come si suol dire, unire l’utile al dilettevole.

Infatti dovrò realizzare un progetto in C per un corso all’Università, quindi ho deciso di realizzare un’idea che mi era venuta abbastanza tempo fa, ma che avevo sempre lasciato stare: scrivere un software in grado di riconoscere che nota è stata suonata a partire dall’audio della chitarra, in realtime, quindi visualizzarlo e magari poter esportare la tablatura.

Ancora non so quante feature riuscirò/avrò tempo per implementare. Probabilmente sarà in grado di riconoscere solo note singole, in quanto gli algoritmi che permettono di riconoscere toni di una frequenza singola (comprese le armoniche, eventualmente) sono diversi da quelli che permettono il riconoscimento di accordi.

Come moduli comprenderà sicuramente un’interfaccia con la scheda audio, probabilmente basato su Libsoundio, oppure, in alternativa, su PortAudio.

L’altro modulo sarà il riconoscimento della frequenza fondamentale. Ci sono diverse soluzioni, perlopiù basate sulla trasformata di Fourier e sull’autocorrelazione. Sul secondo metodo ho già trovato… [Leggi il resto...]

0
Ago 14 2012

Libavformat + Libavcodec + OpenAL = AVStream

Oggi volevo parlarvi del mio ultimo programma, AVStream, uno streamer di audio che si basa su Libavformat, Libavcodec e OpenAL.

In pratica per un mio altro programma mi serviva la possibilità di poter far sentire dell’audio 3D. Così ho scoperto che OpenAL è la cosa migliore, perché, nata nel 1999, è si prefigge di essere l’OpenGL dell’audio, ovvero una specifica di API da usare per fare lo stream audio.

Il progetto è stato portato avanti da Creative, che poi però l’ha abbandonato. Attualmente solo Apple la include (anche se in una directory sbagliata) ufficialmente; una buona implementazione per gli altri sistemi, rilasciata sotto LGPL, è OpenAL Soft. In pratica come API non cambia niente, cioè sono tutte le funzioni della specifica OpenAL 1.1, solo che è tenuta aggiornata e perciò funziona con molte configurazioni diverse. Io l’ho provata su Linux con PulseAudio, OSS e ALSA.

Inizialmente volevo usare il codec libero Vorbis, però il tutorial che avevo trovato voleva far caricare in RAM tutto l’audio decompresso, quindi riprodurlo. Era una cosa inaccettabile però per i miei scopi: potrei aver bisogno di molti suoni, non potrei tenerli tutti in RAM, neanche se pesassero… [Leggi il resto...]

2
Nov 03 2011

Dennis Ritchie

Trovo che i mass media siano stati ingiusti con Dennis Ritchie.

Molto probabilmente molti di voi non sapranno chi è, e devo ammettere che anch’io l’ho scoperto per sbaglio.

È stato un grande dell’informatica. Le sue invenzioni? Insieme a Ken Thompson ha inventato il C e Unix.

Il C è uno dei linguaggi programmazione più diffusi e ha influito su molti altri linguaggi, quali C++, Java, PHP e altri ancora Sicuramente la programmazione sarebbe diversa senza il C. Tanto per fare un esempio, il Kernel Linux è scritto quasi tutto in C ma anche Windows ha come maggior parte del codice C e C++.

Il sistema Unix è stato il modello di molti sistemi operativi, quali Linux, BSD, Solaris, HP-UX. Anche Mac ha un cuore unix.

Perciò sarebbe meglio ricordare anche lui, che per l’informatica è stato una persona importante.

0
Lug 30 2011

Qual è il resistore migliore?

Il resistore è uno dei componenti elettronici più elementari…

Solitamente si usano quelli con tolleranza del 5%, ma questa volta me ne serviva uno un po’ particolare: uno con tolleranza dell’1% ma avevo un pacchetto di poco meno di 50 resistori con lo stesso valore: comprarne altri 5 per essere sicuro di averlo all’1%?

Molto meglio usare il multimetro (o tester digitale) per vedere quale si avvicina di più al valore. Però 50 sono tante, così ho scritto un programma in C che una volta dato il valore della resistenza e il numero di resistori, dice quale è il più vicino e anche la percentuale.

Vi lascio il sorgente… Ve lo dovrete compilare :mrgreen:

Download: resistori.c; licenza: pubblico dominio.

Come soluzione non è male alla fine, perché il tester è abbastanza preciso (1%). Però un metodo più automatico con arduino che mette da solo il valore al computer sarebbe meglio :D