Ho scritto un programma in C++ per generare un file wav per un'onda sinusoidale a 800 Hz (1 canale, campionamento a 8000 bit, 16000 Hz, 32000 campioni per 2 secondi), ma quando suono o esamino il suo spettrogramma in Audacity, ha sfumature.Scrittura di file sinusoidale PCM a 8 bit produce sovratoni
Penso che il problema sia con l'algoritmo che converte l'onda sinusoidale in PCM; Io non sono sicuro dove mettere lo spostamento 'zero', a 127 o 127,5 o 128 ecc
char data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = (char) (round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j/20.0))));
}
e il file prodotto è questo: output.wav
Se necessario, ecco il file cpp: wavwriter.cpp
Grazie!
EDIT 2: ho cambiato il carattere a un uint8_t
uint8_t data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j/20.0)));
}
outfile.write((char *)&data[0], sizeof data);
outfile.close();
return true;
per evitare un comportamento indefinito. Lo stesso problema si applica ancora.
È 'char' firmato o non firmato sulla tua piattaforma? –
Cosa intendi? Sto usando Windows e C++. –
Quanto pensi '(char) (127 + 60)' è? – Drop