Questa è la versione audio della sfida di codifica delle immagini di Twitter .
Progettare un formato di compressione audio in grado di rappresentare almeno un minuto di musica in 140 byte o meno di testo codificato UTF-8 stampabile.
Implementalo scrivendo un programma da riga di comando che accetta i seguenti 3 argomenti (dopo il nome del programma stesso):
- La stringa
encode
odecode
. - Il nome file di input.
- Il nome del file di output.
(Se il tuo linguaggio di programmazione preferito non ha la capacità di usare argomenti della riga di comando, puoi usare un approccio alternativo, ma devi spiegarlo nella tua risposta.)
L' encode
operazione verrà convertita dal formato audio prescelto nel formato compresso "tweet" e l' decode
operazione verrà convertita dal formato "tweet" nel formato audio originale. (Naturalmente, ci si aspetta che implementi la compressione con perdita, quindi il file di output non deve essere identico all'input, solo nello stesso formato.)
Includi nella tua risposta:
- Il codice sorgente del tuo programma, per intero. (Se è troppo lungo per questa pagina, potresti ospitarla altrove e pubblicare un link ad essa.)
- Una spiegazione di come funziona.
- Almeno un esempio, con un collegamento ai file audio originali, al testo "tweet" che comprime e al file audio ottenuto decodificando il tweet. (Il risponditore è responsabile delle affermazioni sul "fair use" del copyright.)
Regole
- Mi riservo il diritto di colmare eventuali lacune nelle regole del concorso in qualsiasi momento.
- [Modificato il 24 aprile] Per l'input della tua
encode
funzione (e l'output della tuadecode
funzione), puoi utilizzare qualsiasi formato audio comune ragionevole, sia esso:- Forma d'onda non compressa, come WAV.
- Forma d'onda compressa, come MP3.
- Stile "spartito", come il MIDI.
- Il formato "tweet" compresso deve effettivamente codificare i suoni nel file di input. Pertanto, i seguenti tipi di output non contano:
- Un URI o un percorso di file che fornisce la posizione in cui è memorizzato l'output effettivo.
- Una chiave per una tabella di database in cui l'output effettivo viene archiviato come BLOB.
- Qualcosa di simile.
- Il tuo programma deve essere progettato per comprimere file musicali generici , quindi non fare cose che sono ovviamente troppo legate al tuo esempio specifico. Ad esempio, se stai dimostrando "Twinkle, Twinkle, Little Star", la tua routine di compressione non dovrebbe codificare un simbolo specifico per la sequenza do-do-so-so-la-la-so.
- L'output del tuo programma dovrebbe effettivamente essere in grado di passare attraverso Twitter e di uscire incolume. Non ho un elenco dei caratteri esatti supportati, ma cerco di attenermi a lettere, cifre, simboli e punteggiatura; ed evita i personaggi di controllo, combinando personaggi, marcatori BIDI o altre cose strane come quella.
- È possibile inviare più di una voce.
Criteri di valutazione
Questo è un concorso di popolarità (vale a dire, la maggior parte dei voti netti vince), ma gli elettori sono invitati a considerare quanto segue:
Precisione
- Riesci ancora a riconoscere la canzone dopo che è stata compressa?
- Suona bene?
- Riesci ancora a riconoscere quali strumenti vengono suonati?
- Riesci ancora a riconoscere i testi? (Questo è probabilmente impossibile, ma sarebbe impressionante se qualcuno lo realizzasse.)
Complessità
La scelta della canzone di esempio è importante qui.
- [Aggiunto il 24 aprile] Questa sfida sarà più semplice con MIDI o formati simili. Tuttavia, se si prende lo sforzo supplementare per farlo funzionare con formati di forme d'onda, ciò merita ulteriore credito.
- Qual è la struttura? Certo, puoi soddisfare il requisito di un minuto semplicemente ripetendo le stesse 4 misure un numero arbitrario di volte. Ma strutture di canzoni più complesse meritano più punti.
- Il formato può gestire molte note suonate contemporaneamente?
Il codice
- Mantenerlo il più breve e semplice possibile. Tuttavia, questo non è un codice golf, quindi la leggibilità conta più del conteggio dei caratteri.
- Anche algoritmi intelligenti e complicati vanno bene, purché giustificati da una migliore qualità dei risultati.