Napisałem program w języku C++, aby wygenerować plik .wav dla fali sinusoidalnej 800Hz (1 kanał, 8-bitowy, próbkowanie 16000 Hz, 32000 próbek, więc 2 sekundy), ale kiedy go odtwarzam lub sprawdzam jego spektrogram w Audacity, ma on podtekst.Zapisywanie 8-bitowego pliku WAV fal sinusoidalnych PCM wytwarza podteksty
Myślę, że problem polega na tym, że algorytm przekształca falę sinusoidalną na PCM; Nie jestem pewien gdzie umieścić 'zero' przemieszczenie na 127 lub 127.5 lub 128 itd
char data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = (char) (round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j/20.0))));
}
a plik produkowany jest taka: output.wav
Jeśli to konieczne, oto plik cpp: wavwriter.cpp
Dzięki!
EDIT 2: Zmieniłem char do 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;
uniknąć niezdefiniowane zachowanie. Ten sam problem nadal obowiązuje.
Czy "char" jest podpisane lub niepodpisane na platformie? –
Co masz na myśli? Używam Windows i C++. –
Jak myślisz ile ('char) (127 + 60)' jest? – Drop