Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
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


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...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
GoPro taglia ancora: licenziato il 23% d...
Muse S Athena: la fascia che ti legge ne...
PS5 Pro e PSSR 2.0: tutti i giochi compa...
Dimensity 9600 Pro promette prestazioni ...
BMW i7 2026 adotta celle cilindriche Gen...
Cyberpunk 2077 si aggiorna su PS5 Pro co...
Valve porta Steam Link su Vision Pro per...
Google Maps: ufficiali 3 novità c...
TikTok punta tutto sull'Europa: un milia...
OnePlus Nord 6 ufficiale: arriva con una...
Google lancia di nascosto un'app AI che ...
Sony lancia The Playerbase per inserire ...
WhatsApp si aggiorna con una nuova app c...
Windows 11 23H2, ricerca nel menu Start ...
Google Chrome introduce il layout vertic...
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: 14:02.


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