PDA

View Full Version : C++ & wav


trallallero
18-05-2010, 16:52
Non posso per adesso dire perchè (lo farò e spiegherò anche perchè non posso :D), ma mi è stato chiesto di calcolare con 2 funzioni C++ il sample time da un beat time e viceversa.
Non ci sono altre info oltre a queste, ovvero il sample time per ricavare il beat time e il beat time per ricavare il sample time

Sbaglio o senza almeno il samplerate non si può ? mi sembra così ovvia la risposta che ho paura che sia sbagliata ...

grazie :)

tomminno
18-05-2010, 17:04
Non posso per adesso dire perchè (lo farò e spiegherò anche perchè non posso :D), ma mi è stato chiesto di calcolare con 2 funzioni C++ il sample time da un beat time e viceversa.
Non ci sono altre info oltre a queste, ovvero il sample time per ricavare il beat time e il beat time per ricavare il sample time

Sbaglio o senza almeno il samplerate non si può ? mi sembra così ovvia la risposta che ho paura che sia sbagliata ...

grazie :)

Eh?
Sample Time è un parametro del segnale digitale (è l'inverso della frequenza di campionamento), mentre Beat Time è un parametro musicale (molto molto complesso da calcolare).
Sono assolutamente scorrelati.

trallallero
18-05-2010, 17:25
Eh?
Sample Time è un parametro del segnale digitale (è l'inverso della frequenza di campionamento), mentre Beat Time è un parametro musicale (molto molto complesso da calcolare).
Sono assolutamente scorrelati.

Quindi sono impossibili da calcolare ?
domanda trabocchetto sti crucchi :D

trallallero
18-05-2010, 17:28
Ma no, aspè:
una delle funzioni dovrebbe convertire una posizione nel campione dato in beat time, in un sample time in secondi.

Quindi immagino che il sample time sia proprio il tempo di quel campione nel file.

trallallero
18-05-2010, 17:36
Ma il beat time cosa cacchio è ? non riesco a trovare niente in rete :confused:

tomminno
18-05-2010, 18:51
Ma il beat time cosa cacchio è ? non riesco a trovare niente in rete :confused:

Beat Time è la metrica del segnale musicale (volgarmente il bpm).
Ci deve essere qualcosa che non va, è impensabile trovare un qualche legame tra le 2 entità.

trallallero
18-05-2010, 19:39
Beat Time è la metrica del segnale musicale (volgarmente il bpm).
Ci deve essere qualcosa che non va, è impensabile trovare un qualche legame tra le 2 entità.

Ho pensato anche che il beat time fosse il segnale del metronomo o del sync e anche in quel caso sarebbe stata impossibile una conversione.

In pratica è una società di cui non faccio il nome che ha accettato la mia candidatura ad un lavoro e mi ha risposto chiedendomi se, oltre a rispondere alle solite domande tipo quanto ti aspetti di guadagnare, tempo di preavviso, etc, avrei potuto aiutarli a risolvere questo piccolo problema di conversione con 2 funzioni C++ (boh, vogliono forse vedere come me la cavo in casi come questi).

Ho creato una classe di exception che dice "impossibile" e le 2 funzioni fanno una throw :D

Grazie mille.

tomminno
18-05-2010, 22:41
Sicuro di aver capito per bene il testo?

Sicuramente il bpm non si ricava con una funzione sola, ci sono fior di algoritmi per il beat traking i più semplici passano per l'FFT gli altri per Wavelet/Morelet.

Tra l'altro il sample time si calcola in maniera differente a seconda del formato audio che stai esaminando, ogni formato conserva tale informazione in strutture dati apposite. Ricavare la frequenza di campionamento di uno Wav è diverso che non per un MP3 o peggio ancora per un formato PCM raw (per cui proprio questa informazione non esiste).

Propendo più per una tua incomprensione del testo. Secondo me "sample time" e "beat time" nel contesto corretto dovrebbero assumere un significato che al momento sfugge.

trallallero
19-05-2010, 07:36
Beh, a questo punto copincollo il testo tanto ormai l'email gliel'ho spedita.
E poi lo sanno che avrei cercato info in rete, fa parte del nostro lavoro:

header file:

class AClip
{
public:

// ...

// Convert a position in the sample that is given
// in beat time to sample time (in seconds).
double BeatToSampleTime(double BeatTime);


// Convert a position in the sample that is given
// in sample time (in seconds) to beat time.
double SampleToBeatTime(double SampleTime);

// ...

};


cpp file:

//----------------------------------------------------------------------------------------

double AClip::BeatToSampleTime(double BeatTime)
{
return ...;
}

//----------------------------------------------------------------------------------------

double AClip::SampleToBeatTime(double SampleTime)
{
return ...;
}