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 poco. … [Leggi il resto]

Risolviamo i Sudoku... con C++

Da quando ho imparato a fare i Sudoku mi sono sempre chiesto come fare un programma che li risolvesse 😊

La cosa non è difficile, soprattutto per quelli semplici, che ero già riuscito a risolvere con PHP 😊

Tuttavia non ero andato più avanti perché non avevo considerato la risoluzione tramite brute force, invece recentemente, anche per consolidare la mia conoscenza di C++, mi sono messo e ho fatto questo programmino.

In pratica l’algoritmo di risoluzione si divide in due parti: la prima con un loop crea le possibili soluzioni per ogni cella e le inserisce fino a quando il sudoku non viene più modificato. Quindi se ci sono celle ancora vuote (con possibili soluzioni) tenta il brute force, altrimenti esce. Il brute force è implementato tramite ricorsione: prima ordino le soluzioni in modo da partire dalla cella con meno soluzioni possibili, quindi prendo le soluzioni una ad una e provo a vedere se impostandole ce la faccio a risolvere il sudoku. Quando ce l’ho fatta termino il programma.

Se volete il sorgente, eccolo qui: sudoku.cpp.

L’ho provato su Linux e andava.

Penso che si possa migliorare il programma ma per il momento mi va bene così 😊

Aggiornamento 31/05/2012: aggiunto un meccanismo di controllo, perché prima con certi sudoku difficili il brute force falliva.

Plugin Local Cover Art [Picard]

È da quasi due anni che uso Music Brainz Picard, il programma di cui avevo già parlato che serve per taggare in automatico e con precisione la musica.

Già allora mi ero lamentato della mancanza del supporto delle copertine, cosa che, per chi ha un iPod Touch, è insopportabile.

All’inizio ho usato il plugin Cover Art Downloader, solo che il risultato non era del tutto soddisfacente: infatti il plugin non poteva distinguere le copertine belle da quelle meno.

La mia soluzione al problema allora è stata scaricare le copertine da Google immagini e inserirle con un altro programma: EasyTag. Come software quest’ultimo non è affatto male, però io continuavo a usare comunque Picard, perché più veloce, immediato e preciso e dover usare due programmi mi risultava scomodo.

Così oggi ho cambiato ancora le mie abitudini: per Picard è possibile scrivere plugin in python, linguaggio che mi piaciucchia, così ho scritto un plugin per fare da solo ciò che prima dovevo fare io, cioè cercare un’immagine chiamata Front.png o Front.jpg nella cartella dell’album e poi aggiungerla.

Non è stato proprio immediato da fare perché non conoscevo bene le API di MusicBrainz e il plugin da cui sono partito (Cover Art Downloader, di Oliver Charles e Philipp Wolfer) non andava più bene con la versione di Picard/Python della mia Debian Unstable.

Se avete voglia di provarlo, il file è localcoverart.py.

Va installato come tutti gli altri plugin del programma.

Per la licenza, fin quando non scoprirò quella del plugin originale è Creative Commons 3.0 con obbligo di Attribuzione: potete farne quel che volete, fino a quando io, Oliver Charles e Philipp Wolfer (gli autori del plugin da cui ho preso spunto) saremo riconosciuti come gli autori originali del plugin.

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 😁

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 😀