Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2007, 12:07   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
[C] File audio WAV: devo leggerne l'Header x saperne la lunghezza in tempo?!

... ho dei file WAV da utilizzare, ma devo usare il C per capire quanti secondi/minuti/ore/ecc ... durano in modo da impiegarli nel modo migliore.

Qualcuno lo ha già fatto per caso?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 12:09   #2
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Utilizzare qualcosa tipo questo:

Codice:
/*	*********************************************
		controllo che il file sia un file WAV in "Canonical Wave Format"
		leggo i primi 12 bytes in cui c'e' il primo header di tipo RIFF	*/

	if(*plenfile<12) {
		fprintf(stderr, "lunghezza file troppo piccola, non c'e' il primo 
header\n");
		fclose(f);
		return(0);
	}
	ris=fread(buf,1,12,f);
	if(ris<12) {
		fprintf(stderr, "letti solo %d byte invece di 12\ntermino\n", ris);
		fclose(f);
		return(0);
	}
	/* nei primi 4 byte ci deve essere "RIFF" */
	ris=strncmp(buf,"RIFF",4);
	if(ris!=0) {
		fprintf(stderr, "il primo campo del file non e' RIFF,  non e' un file 
WAV\ntermino\n");
		fclose(f);
		return(0);
	}
	/* nei byte dal 5 all 8 ci deve essere la lunghezza totale del file */
	filelendentroilfile=littleendian32bit2littleendian(buf+4);
	fprintf(stderr, "filelendentroilfile %ld\n", filelendentroilfile);

	if(filelendentroilfile!=*plenfile) {
		fprintf(stderr, "WARNING: filelendentroilfile=%ld  !=  *plenfile=%ld 
\n", filelendentroilfile, *plenfile );
		fprintf(stderr, "ma continuo lo stesso\n" );
		/*
		fclose(f);
		return(0);
		*/
	}
	/* nei byte dal 9 al 12 ci deve essere "WAVE" */
	ris=strncmp(buf+8,"WAVE",4);
	if(ris!=0) {
		fprintf(stderr, "il terzo campo del file non e' WAVE,  non e' un file 
WAV\ntermino\n");
		fclose(f);
		return(0);
	}
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 13:45   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
io non ho mai gestito il formato WAV, ma per i file formats wotsit.org è la fonte: http://www.wotsit.org/list.asp?search=wav&button=GO%21

ciao

edit: questo link dovrebbe fare al caso tuo: http://www.wotsit.org/getfile.asp?fi...e&sc=232612309
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 13:55   #4
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Utilizzare qualcosa tipo questo:

Codice:
/*	*********************************************
		controllo che il file sia un file WAV in "Canonical Wave Format"
		leggo i primi 12 bytes in cui c'e' il primo header di tipo RIFF	*/

	if(*plenfile<12) {
		fprintf(stderr, "lunghezza file troppo piccola, non c'e' il primo 
header\n");
		fclose(f);
		return(0);
	}
	ris=fread(buf,1,12,f);
	if(ris<12) {
		fprintf(stderr, "letti solo %d byte invece di 12\ntermino\n", ris);
		fclose(f);
		return(0);
	}
	/* nei primi 4 byte ci deve essere "RIFF" */
	ris=strncmp(buf,"RIFF",4);
	if(ris!=0) {
		fprintf(stderr, "il primo campo del file non e' RIFF,  non e' un file 
WAV\ntermino\n");
		fclose(f);
		return(0);
	}
	/* nei byte dal 5 all 8 ci deve essere la lunghezza totale del file */
	filelendentroilfile=littleendian32bit2littleendian(buf+4);
	fprintf(stderr, "filelendentroilfile %ld\n", filelendentroilfile);

	if(filelendentroilfile!=*plenfile) {
		fprintf(stderr, "WARNING: filelendentroilfile=%ld  !=  *plenfile=%ld 
\n", filelendentroilfile, *plenfile );
		fprintf(stderr, "ma continuo lo stesso\n" );
		/*
		fclose(f);
		return(0);
		*/
	}
	/* nei byte dal 9 al 12 ci deve essere "WAVE" */
	ris=strncmp(buf+8,"WAVE",4);
	if(ris!=0) {
		fprintf(stderr, "il terzo campo del file non e' WAVE,  non e' un file 
WAV\ntermino\n");
		fclose(f);
		return(0);
	}

http://msdn2.microsoft.com/en-us/library/ms713497.aspx


ciao
okay è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 16:22   #5
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
OK, grazie.
Adesso vedo se ci capisco qualcosa.

Ma voi non utilizzate mai:
http://www.google.com/codesearch?hl=it

?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 19:49   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
O_O
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 22:28   #7
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da 71104 Guarda i messaggi
O_O
Si, x cercare codice da riutilizzare o vedere gli altri come fanno le cose tanto per migliorarsi o 1000 altri usi.

Insomma: è inutile reinventare la ruota. NO?
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 23:11   #8
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
OK, grazie.
Adesso vedo se ci capisco qualcosa.

Ma voi non utilizzate mai:
http://www.google.com/codesearch?hl=it

?!
cavolo non lo conoscevo, MITICO
io di solito scarico i sorgenti che possono interessarmi e uso cscope, ma così si fa più in fretta
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 23:19   #9
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da recoil Guarda i messaggi
cavolo non lo conoscevo, MITICO
io di solito scarico i sorgenti che possono interessarmi e uso cscope, ma così si fa più in fretta
Si infatti, ma aiutiamo a vicenda.
Quindi sbizzarritevi ad aiutarmi plz:
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
... ho dei file WAV da utilizzare, ma devo usare il C per capire quanti secondi/minuti/ore/ecc ... durano in modo da impiegarli nel modo migliore.

Qualcuno lo ha già fatto per caso?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2007, 09:54   #10
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
http://www.google.com/codesearch?q=wav+reader&hl=it
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 21:54   #11
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da 71104 Guarda i messaggi
edit: questo link dovrebbe fare al caso tuo: http://www.wotsit.org/getfile.asp?fi...e&sc=232612309
Link inesistente.

Tra l'altro da tutti questi link sembra non uscire un campo di TOT bytes per indicare il tempo.
Come lo ricavo?!

Io pensavo che data la frequenza di campionamento costante si potesse tentare qualcosa del tipo:
frequenza di campionamento * numero di campioni?!

Con un MP3 la vita sarebbe + semplice?!
C'è 1 campo esplicito x la lunghezza del file audio?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 22-05-2007 alle 21:59.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 22:05   #12
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
O almeno trovare un programma che posso lanciare con la funzione "System(STRINGA DI COMANDO)" che mi possa restituire come risultato la lunghezza del file audio.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 22:11   #13
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Link inesistente.

Tra l'altro da tutti questi link sembra non uscire un campo di TOT bytes per indicare il tempo.
Come lo ricavo?!

Io pensavo che data la frequenza di campionamento costante si potesse tentare qualcosa del tipo:
frequenza di campionamento * numero di campioni?!

Con un MP3 la vita sarebbe + semplice?!
C'è 1 campo esplicito x la lunghezza del file audio?!


certo che c'è:

//
TimeWav=Lunghezzafile/W.persec;
//controllo bit
if(W.wBitsPerSample==16)
TimeWav=TimeWav/2;
//numero canali
TimeWav=TimeWav/W.Canali;

forse se guardi il link sopra capiresti meglio...
okay è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 22:17   #14
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da okay Guarda i messaggi
certo che c'è:

//
TimeWav=Lunghezzafile/W.persec;
//controllo bit
if(W.wBitsPerSample==16)
TimeWav=TimeWav/2;
//numero canali
TimeWav=TimeWav/W.Canali;

forse se guardi il link sopra capiresti meglio...
Ti giuro che ho guardato, magari sono io che non capisco, ma guardare ho guardato.
Mi son fatto anche 1 raccolta di quello che ho trovato:
LINK della raccolta.

Ma tu a quale link in particolare stai facendo riferimento?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 22-05-2007 alle 22:23.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2007, 00:21   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Link inesistente.
ops, è vero: il link è divenuto invalido subito dopo che io ho chiuso il browser, si vede che era correlato alla ricerca che ho fatto. comunque non ho fatto nulla di chè: ho solo cercato "WAV" su wotsit.org.

Quote:
Io pensavo che data la frequenza di campionamento costante si potesse tentare qualcosa del tipo:
frequenza di campionamento * numero di campioni?!
veramente sarebbe una divisione, non una moltiplicazione. esempio: 2 campioni al secondo, totale 4 campioni, risultato 2 secondi; però 2*4 fa 8
dovresti fare 4 / 2, cioè numero di campioni / frequenza (intesa come campioni al secondo).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2007, 19:31   #16
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da okay Guarda i messaggi
certo che c'è:

//
TimeWav=Lunghezzafile/W.persec;
//controllo bit
if(W.wBitsPerSample==16)
TimeWav=TimeWav/2;
//numero canali
TimeWav=TimeWav/W.Canali;

forse se guardi il link sopra capiresti meglio...
Non riesco proprio a capire a che documento stai facendo riferimento.
Io leggendo:



, mi sono fatto questa idea del file wave:

__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2007, 19:41   #17
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Per una migliore soluzione del problema ho incrociato le informazioni:
HELP: devo leggere la lunghezza di files audio WAV con un programmino in C.

... per il ricavo della lunghezza del file audio (in secondi) attraverso algoritmo.
Questo nel qualcaso non riusci a identificare ed ad accedere al fantasmagorico "campo" TimeWav.

[EDIT]

Quote:
Originariamente inviato da cicciociccio Guarda i messaggi
Ok, capito, io ti dico come trovarla poi la applichi tu!
Allora ti spiego come si trova il peso poi con una formula inversa ricavi il tempo.
Prendiamo per esempio un file Wav campionato a 16bit,44.100Hz,stereo(sono 2 canali).
16(bit) x 44.100 (freq.) x 2(canali) x Y (secondi) = peso in bite.
chiaramente se hai un campione con freq. e bit canali diversi basta che li cambi,
es. 8(bit) x 48Khz (freq.) x 1(canale) x Y (secondi) = peso in bite

http://www.lcnet.it/priv/erioforo/mhlpmp3.html qui c'è una buona spiegazione
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 30-05-2007 alle 16:03.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2007, 20:57   #18
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Per una migliore soluzione del problema ho incrociato le informazioni:
HELP: devo leggere la lunghezza di files audio WAV con un programmino in C.

... per il ricavo della lunghezza del file audio (in secondi) attraverso algoritmo.
Questo nel qualcaso non riusci a identificare ed ad accedere al fantasmagorico "campo" TimeWav.
l'include:
#include <mmsystem.h>

apertura file:
HMMIO hmmio;
MMCKINFO mmckinfoParent;
MMCKINFO mmckinfoSubchunk;


/* Apertura file*/
if ((hmmio = mmioOpen(&WaveName[0], 0, MMIO_READ|MMIO_ALLOCBUF)))
{
/* prendi la lunghezza */
WaveDataSize = mmckinfoSubchunk.cksize;

/* chiudi il file */
mmioClose(hmmio, 0);
}

printf WaveDataSize



ciao
okay è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2007, 22:09   #19
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Un pò di riferimenti alla struttura degli Wav
http://www.sonicspot.com/guide/wavefiles.html
http://ccrma.stanford.edu/courses/42...cts/WaveFormat

Devi andare a trovare il Chunk chiamato 'data' e prendere i 4 byte successivi.
A me però risulta che il campo "datasize" sia in big endian (verificabile aprendo un file wave con un editor esadecimale)
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2007, 08:33   #20
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Ecco quì:

Codice HTML:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <mmsystem.h>
#include <malloc.h>
#include <tchar.h>
#include <stdlib.h>


TCHAR		WaveName[] = "stereo.wav";
WAVEFORMATEX WaveFormat;
DWORD		WaveDataSize;

int _tmain(int argc, _TCHAR* argv[])
{

	HMMIO       hmmio;             
	MMCKINFO    mmckinfoParent;		
	MMCKINFO    mmckinfoSubchunk;	
	//prima intestazione
	if ((hmmio = mmioOpen(&WaveName[0], 0, MMIO_READ|MMIO_ALLOCBUF)))
	{
		mmckinfoParent.fccType = mmioFOURCC('W', 'A', 'V', 'E'); 
		if (mmioDescend(hmmio, (LPMMCKINFO)&mmckinfoParent, 0, MMIO_FINDRIFF)) 
		{
			return(-2);
		} 

...code

		WaveDataSize = mmckinfoSubchunk.cksize;
		printf("Wave size = %u\n", WaveDataSize);
		mmioClose(hmmio, 0);
		system("pause");
		return(0);
	}
	return(-1);
}
così me lo sono imparato anche io

Ultima modifica di okay : 26-05-2007 alle 08:35.
okay è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
2 portatili con 32GB di RAM e Intel Core...
Horizon Hunter Gathering: Monster Hunter...
SpaceX realizzerà uno smartphone ...
Fire TV Omni QLED, Serie 2 e Serie 4: le...
Con l'Event Horizon Telescope si sta stu...
Milano Cortina 2026, dietro le quinte de...
IA e automazione: le armi per industrial...
SpaceX sta per rimuovere il braccio di a...
Sony a ISE 2026: display, soluzioni imme...
Sony punta sull'IA: brevettati i podcast...
Logitech G Astro A50, le cuffie gaming d...
Lenovo a ISE 2026: smart collaboration, ...
GeForce RTX 5000 SUPER cancellate e RTX ...
Substack conferma violazione: esposti da...
L'IA costa caro. Oracle punta a raccogli...
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