Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-11-2010, 16:54   #1
Duchamp
Member
 
L'Avatar di Duchamp
 
Iscritto dal: Apr 2010
Messaggi: 67
[c] un suggerimento su malloc

Ciao a tutto il forum,
sono alle prese con la lettura di un wave. Non voglio tediarvi con specifiche, header o cose strane, vi dirò solo che c'è un'informazione relativa alla lunghezza in byte del file:

Subchunk2Size == NumSamples * NumChannels * BitsPerSample/8

In poche parole questo Subchunk2size contiene la dimensione del wave considerando anche il numero di campioni, di canali, il bitrate e così via. Insomma, le info giuste per allocare un array in memoria.

Ma ecco il mio dubbio: essendo una dimensione in byte, io allocherò con:

Codice:
float *wave = (float *) malloc(Subchunk2Size * sizeof(float))
oppure semplicemente

Codice:
float *wave = (float *) malloc(Subchunk2Size)
?

Naturalmente il mio esempio usa float, perchè immagino di avere un wave con campioni in virgola mobile.
Io sono più propenso verso la seconda modalità, ma i dubbi mi assalgono.
Ringrazio per qualsiasi delucidazione possiate darmi
Duchamp è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 18:16   #2
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
La seconda opzione andrebbe bene solo nel caso Subchunk2Size fosse divisibile per 4 byte (32bit). Cosa che dovrebbe essere fattibile, se il caso è questo:
44100 Hz, 2 canali, 32 bit float

Ovviamente potrai accedere al vettore solo a gruppi di float (wave[0], wave[1], ecc...).

In ogni caso ti suggerirei di usare un'altra struttura (possibilmente binaria). Anche se non ho capito bene quello che vuoi fare, mi sembra concettualmente sbagliato.

Ultima modifica di Supdario : 19-11-2010 alle 18:19.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2010, 18:32   #3
Duchamp
Member
 
L'Avatar di Duchamp
 
Iscritto dal: Apr 2010
Messaggi: 67
Ciao Supdario, molto interessante quanto hai scritto.
Parto chiarendo meglio quello che vorrei fare: semplicemente mettere in un array tutti i dati "sonori", escludendo naturalmente l'header che non mi interessa.
L'accesso a gruppi va benissimo, ma sono curioso di capire meglio l'idea della struttura binaria...
Duchamp è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2010, 13:01   #4
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da Duchamp Guarda i messaggi
Ciao Supdario, molto interessante quanto hai scritto.
Parto chiarendo meglio quello che vorrei fare: semplicemente mettere in un array tutti i dati "sonori", escludendo naturalmente l'header che non mi interessa.
L'accesso a gruppi va benissimo, ma sono curioso di capire meglio l'idea della struttura binaria...
Molto semplice, si tratta semplicemente di un modo più preciso per accedere ai singoli chuck, in modo da poter scegliere in modo selettivo non solo la posizione del chunk, ma anche il canale e l'unità di tempo
Supponiamo ad esempio di avere un file stereo (2 canali), profondità 32bit float e 44100 Hz di campionamento. Idealmente se hai un file audio che dura 100 secondi potresti accedere così:
Codice:
float wave[canale(0-1)][tempo(0-99)][campione(0-44099)]
Anche se posso ammettere che quest'ultima soluzione (soprattutto per il fatto del tempo e campioni distinti) potrebbe non essere adeguata, quindi si potrebbe fare così:
Codice:
float wave[canale(0-1)][n.chunk(da 0 a 44100*durata)]
In definitiva, la soluzione migliore sarebbe questa, supponendo che in "canali" c'è il numero dei canali, ed in "frequenza" c'è la frequenza di campionamento

Codice:
int canali = 2;
int frequenza = 44100;
int durata = 120; //2 minuti
int chunksize = frequenza * canali * sizeof(float);
float **wave = (float **) malloc(sizeof(float*) * canali);
int i;
for (i = 0; i < canali; i++) wave[i] = (float *) malloc(chunksize * durata);
In questo modo hai una matrice a più canali, quindi supponendo di avere un file stereo, accedi all'ultimo campionamento del terzo secondo nel primo canale in questo modo:
wave[0][2*frequenza + 44099] = wave[0][2*44100 + 44099] = wave[0][132299]

Spero di essere stato abbastanza chiaro, se hai bisogno chiedi pure.
Supdario è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Tineco FLOOR ONE S9 Scientist: la nuova ...
IBM porta il quantum computing nella chi...
Google AI Overviews sbaglia poco, ma tan...
Il futuro iPhone Fold ha un nome: Apple ...
iPhone 17 da 256GB torna a 899€ (minimo ...
Motorola punta sui tablet: ecco il Moto ...
899 dollari per il nuovo Ryzen: AMD alza...
WhatsApp avrà canali a pagamento: ecco c...
Roscosmos aggiorna le tempistiche per la...
Confermato il ritardo delle missioni rob...
L'Intelligenza Artificiale ora può...
Il data center del futuro secondo Huawei...
Spesa a domicilio senza conducente: robo...
Satoshi Nakamoto ha finalmente un volto?...
La Corea del Sud taglia fuori i bus elet...
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: 08:20.


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