Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-10-2004, 19:33   #1
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
[C] Modificare attributi file mp3

Salve a tutti! Vorrei fare un programmino in c che mi permetta di modificare gli attributi ID3v1 di alcuni file mp3 (titolo, artista, anno, genere...). Ho fatto una ricerchina veloce ma mi appaiono tutti siti di mp3 da scaricare...
Qualcuno mi sa dare una mano???
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2004, 10:05   #2
Blackat
Senior Member
 
L'Avatar di Blackat
 
Iscritto dal: Oct 2004
Città: Acireale
Messaggi: 447
ID3.ORG
Blackat è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2004, 19:13   #3
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
per quanto riguarda il C/C++ quel sito mi rimanda a questa pagina da dove ho scaricato la versione 3.8.3.
tuttavia qualsiasi documentazione reperibile su quel sito si riferisce al c++ e non al c.
non so dove cercare...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2004, 20:10   #4
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Ma ti serve il programma già fatto oppure solo delle indicazioni su come farlo?
SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2004, 01:06   #5
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
no, voglio farmi un programmino che mi sistemi gli id3 in un certo formato. sono stanco di farlo sempre io a mano! (anch perchè altrimenti dovrei farmi 17 cd e non è bello... almeno così imparo come gestire (mi basta anche in modo basilare) gli id3 in c.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2004, 21:08   #6
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Avevo fatto un programmino a suo tempo, ma dovrei vedere se me lo ritrovo in qualche floppy ...il mio disco rigido l'anno scorso ha tolto del fumo....

Comunque vedrò di spiegarti qualcosa, per quanto mi ricordo.

Innanzitutto esistono due tipi principali di tag ID3, la versione 1.0/1.1 e la 2.4 (questa mi pare sia l'ultima... o almeno lo era quando mi interessavo di tag qualche annetto fa).

Esistono differenze sostanziali tra le due.
Innanzitutto la 1.1 (che si differenzia dalla 1.0 solo perché permette l'inserimento del numero di traccia... mi pare) è molto semplice, mentre la 2.4 è veramente complessa, e nelle sue ultime varianti permette addirittura l'inserimento di immagini e testi. Guarda quel sito che ti hanno suggerito per renderti conto tu stesso. Ovviamente sarebbe difficile anche farsi un programma che gestisca tutti i suoi campi...

Perciò meglio pensare al tag ID3v1.
Questo occupa gli ultimi 128 byte del file MP3. Per "prelevarlo" quindi puoi andare a colpo sicuro posizionandoti 128 byte prima della fine del file e leggendoli. Per identificarlo controlla la presenza della sequenza di caratteri "tag" o "TAG" tra i primi tre di tutto questo blocco. Seguono quindi i pochi campi, 6 in tutto. Ecco lo schema completo del blocco:
Codice:
Identificatore  3
Titolo          30
Autore          30
Album           30
Anno            4
Commento        30
Genere          1
TOTALE     =    128 bytes
Una serie di piccole aggiunte.

La prima: questa è la struttura del 1.0. L'1.1 permette anche la memorizzazione del numero di traccia, tuttavia mantiene la totale compatibilità col 1.0: non cambia infatti la dimensione del tag. Sfruttando la relativa inutilità di un campo commento di soli 30 caratteri, infatti, si era stabilito che il numero di traccia fosse inserito proprio come ultimo byte del commento. Ma per essere identificato e non confuso col commento stesso, è preceduto da un carattere 0x00 che lo
delimita, cosicché il campo riservato al commento si riduce a 28 bytes. Se manca il numero di traccia, comunque, il commento può prendersi tutti i 30 bytes.

La seconda: I campi sono fissi, non puoi cambiare la loro dimensione e in caso non li occupi tutti, devi riempirli con 0x00 (meglio fare così che utilizzare gli spazi 0x20).

Terza: l'anno va memorizzato come stringa (di quattro caratteri).

Quarta: per il genere si utilizza una tabella bella lunga con un 150 generi ad ognuno dei quali corrisponde un numero ... purtoppo anche questa dovrei vedere se me la ritrovo da qualche parte. Faccio una ricerchina e domani ti riferisco.

Buona programmazione!

Ciao!

Ultima modifica di SnakePlissken : 02-11-2004 alle 21:12.
SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2004, 00:53   #7
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
SnakePlissken meriti tutto il mio rispetto!!!
sei stato veramente chiaro nella spiegazione! ho però una domanda che riguarda il genere.
la tabella l'ho trovata a questo sito: http://www.mp3-howto.com/mp3-howto-22.html, non so come viene memorizzato il genere visto che non può essere come stringa perchè occupa un solo byte (secondo le indicazioni che mi hai fornito, e che ho anche visto sul sito www.id3.org), ma come fa a rappresentare i numeri fino a 128?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2004, 17:34   #8
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ho trovato da solo la risposta: sia il genere che il track sono due char.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2004, 20:59   #9
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Quote:
Originariamente inviato da VegetaSSJ5
SnakePlissken meriti tutto il mio rispetto!!!

Quote:
non so come viene memorizzato il genere visto che non può essere come stringa perchè occupa un solo byte, ma come fa a rappresentare i numeri fino a 128?
In realtà un solo byte potrebbe memorizzare numeri da 0 fino al 255, in tutto 256 = 2^8 = (base binaria)^(bit a disposizione). Non devi vederlo come un char, ma considerarlo come un piccolo (unsigned) intero.
Quote:
ho trovato da solo la risposta
Ma sì che le sai queste cose...
Quote:
sia il genere che il track sono due char
ricorda però che il genere c'è sempre, mentre la track no (è un'intrusa!)!
SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2004, 16:37   #10
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da SnakePlissken
La seconda: I campi sono fissi, non puoi cambiare la loro dimensione e in caso non li occupi tutti, devi riempirli con 0x00 (meglio fare così che utilizzare gli spazi 0x20).
come faccio ad inserire in una stringa il carattere 0x00??

per caso è così??
Codice:
char stringa[30];
   .
   .
stringa[i]= (char) 0x00;
oppure è semplicemente
Codice:
stringa[i]= (char) 0;

Ultima modifica di VegetaSSJ5 : 06-11-2004 alle 16:40.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2004, 19:55   #11
SnakePlissken
Member
 
L'Avatar di SnakePlissken
 
Iscritto dal: Aug 2004
Messaggi: 39
Queste notazioni sono tutte valide:
Codice:
stringa[i] = 0x00;  // esadecimale (1 byte)
stringa[i] = 0;     // decimale
stringa[i] = 00;    // ottale
stringa[i] = '\0';  // codice ASCII del carattere
e puoi utilizzarle con o senza cast.
Io preferisco utilizzare 0x00 perché è intrinseca la specificazione di singolo byte, tu puoi fare come di più ti piace!

SnakePlissken è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2004, 13:17   #12
cikko
Member
 
L'Avatar di cikko
 
Iscritto dal: Sep 2004
Città: vicino a Cosenza
Messaggi: 61
Ciao,
stavo facendo qualcosa di simile in C++, senza usare alcuna libreria esterna.
Siccome devo corregere un po' di errori nella scrittura dei tag ID3, posto solo il codice per la lettura:

<code>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int main(int argc, char** argv)
{
if (argc == 1) {
cout << "Devi specificare un file .mp3!\n";
exit(EXIT_FAILURE);
}

fstream fin;

char buf[129];

fin.open(argv[1], ios::in | ios::binary); // apertura file in modalità binaria
fin.seekg(-128, ios::end); // posizionamento 128 byte prima di EOF
fin.read(buf, 128); // memorizzo questi 128 byte nel buffer di byte

//controllo se è presente la stringa TAG
if (strncmp(buf, "TAG", 3)) {
cout << "TAG ID3 mancanti o file non valido!" << endl;
exit(EXIT_FAILURE);
}

/* stampa artista traccia, byte 33..62 */
cout << "ARTISTA: ";
for (int i = 33; i <= 62; i++)
if ((buf[i] == ' ') && (buf[i+1] == ' '))
break;
else
cout << buf[i];
/* stampa album, byte 63..92 */
cout << "\nALBUM: ";
for (int i = 63; i <= 92; i++)
if ((buf[i] == ' ') && (buf[i+1] == ' '))
break;
else
cout << buf[i];
/* stampa traccia, byte 3..32 */
cout << "\nTITOLO: ";
for (int i = 3; i <= 32; i++)
if ((buf[i] == ' ') && (buf[i+1] == ' '))
break;
else
cout << buf[i];
</code>
__________________
<| http://fgr.altervista.org |>
<| GNU/Linux Registered User #365929 |>
<| GnuPG/OpenPGP key available |>
cikko è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2004, 14:26   #13
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
il codice per la lettura l'ho finito (in c), ora devo perfezionare quello per la scrittura ma purtroppo in questi giorni non ho molto tempo da dedicarci...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2004, 00:55   #14
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
scusate ho fatto una domanda idiota...

Ultima modifica di VegetaSSJ5 : 08-11-2004 alle 02:18.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2004, 01:01   #15
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi ho terminato la prima versione del mio programmino che permette di editare i tag id3v1.1. va migliorato sicuramente cmq intanto lo allego.

Allegato a pagina 2

Ultima modifica di VegetaSSJ5 : 27-12-2004 alle 11:47.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2004, 19:00   #16
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
mi raccomando non vi accalcate a scaricare il file giusto per darmi un parere...

accetto qualsiasi critica, anche "è inutile ed è programmato male", ma almeno scrivete qualcosa...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2004, 19:34   #17
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
[non l'ho compilato e provato per davvero ma] Sembra ben scritto. Bravo.
L'unica cosa che a me non piace e' che non vai a capo all'inizio di un nuovo blocco, nemmeno quando inizi una routine... e poi io avrei evitato una initgenreV ed avrei usato valori costanti in una static array. Per il resto mi sembra niente male.

P.S.: oltre ad id3.org e gli altri link, guardati il sito di LAME, l'ottimo encoder open source. Puoi prendere spunti da li se vuoi anche il supporto id3v2.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2004, 20:11   #18
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
non ho mai usato array statici, per questo non mi è venuta l'idea. cmq ho provato ad inizializzare l'array al di fuori del codice delle funzioni (nella dichiarazione delle variabili globali) ma il compilatore mi dava errore. usando l'array statico come potrei inizializzarlo anche fuori dalle funzioni??
Quote:
L'unica cosa che a me non piace e' che non vai a capo all'inizio di un nuovo blocco, nemmeno quando inizi una routine...
il fatto è che ormai mi ci sono abituato a programmare così e non mi ci vedo proprio a scrivere codice nell'altro modo.

per quanto riguarda il sito di lame tu a quale ti riferisci? io sono andato qui http://lame.sourceforge.net ma non ho trovato alcuna info...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2004, 20:19   #19
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
bug dl programma:
se l'anno è di 4 cifre, quando si visualizzano le informazioni, la riga Year:... è di questo formato:

Year: <anno><commento>

come mai stampa il commento a fianco all'anno? eppure nella struttura id3v1 l'anno è dichiarato array di 5 caratteri...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2004, 13:47   #20
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Forse quando l'anno è più corto di quattro cifre trova la char[] riempita con caratteri nulli (0) e quindi si ferma, altrimenti no... comunque, usa \n alla [/i]fine[/i] di ogni printf, non all'inizio: in alcuni casi printf non stampa sullo schermo fino al prossimo \n, e quindi alcuni messaggi potrebbero non vedersi mai.

Per l'array statico, basta usare:
Codice:
static char * genreV[125] = {"blues", "classic rock", "...", "e così fino alla fine"};
Quote:
accetto qualsiasi critica, anche "è inutile ed è programmato male"
Nessun programma è inutile per il programmatore, visto che è comunque un modo di migliorare le proprie capacità. E poi, si, ci sono alcune cose che potrebbero essere migliori, ma alla fine basta che sia bug-free...
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Il nuovo OnePlus Nord 6 è vicino al debu...
Tesla svela i risultati del Q4: conferma...
Nuova rimodulazione da Fastweb: fino a 3...
La NVIDIA RTX 5090 potrebbe presto costa...
ASUS non produrrà più smar...
CoopVoce sta per lanciare il 5G: ecco qu...
Factorial, azienda di batterie allo stat...
Le specifiche fuori di testa della Yangw...
I numeri incredibili di Xiaomi: nel 2025...
In Cina è pronto il parco fotovol...
Neuralink accelera: produzione di massa ...
Starlink abbassa l'orbita di migliaia di...
Dal MIT una nuova batteria per auto elet...
Adam Mosseri parla di IA su Instagram: l...
Suonerie personalizzate e Tone Store: il...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v