Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve
Dopo quasi un mese di utilizzo quotidiano e un viaggio medio-lungo in autostrada, raccontiamo pregi e limiti della Geely EX5: comfort premium, batteria LFP da 60,22 kWh, autonomia fino a 430 km e un prezzo che parte da 38.900 €
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Complete è un robot aspirapolvere che coniuga un'aspirazione potente e un lavaggio con rullo a logica di intelligenza artificiale che guida al meglio nella pulizia di casa: rulli e spazzole estensibili a pulire gli angoli e una base di ricarica che lava e ripristina il robot al emglio delle sue funzionalità dopo ogni azione di pulizia
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2007, 11: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, 11: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, 12: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, 12: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, 15: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, 18: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, 21: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, 22: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, 22: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, 08: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, 20: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 20:59.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 21: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, 21: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, 21: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 21:23.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2007, 23: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, 18: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, 18: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 15:03.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2007, 19: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, 21: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, 07: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 07:35.
okay è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Flight 14 del razzo spaziale SpaceX Star...
La crittografia post-quantistica è...
PaperWake: la sveglia open-source con sc...
La crisi delle memorie continua: il pre...
La Xiaomi Smart Band 11 è vicina: quattr...
Aspira a 21.000 Pa, soffia, gonfia e ill...
ChatGPT è ora un motore di ricerca e dev...
Oracle Fusion Cloud HCM si aggiorna: arr...
Tesla, incidente fatale a 167 km/h su st...
NVIDIA ha cambiato idea: Rubin CPX torna...
Samsung Galaxy Book6: fino a 25 ore di a...
Il MIT: l'IA risolve quasi ogni compito ...
Revolut lancia AIR in Italia: l'assisten...
Il paradosso Amazon: negli USA miliardi ...
be quiet! Dark Power Pro 14 IO: l'alimen...
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: 17:54.


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