Jaki jest najmniejszy bufor audio potrzebny do wyprodukowania dźwięku Tone bez zakłóceń dzięki WaveOUT API

Czy interfejs WaveOut API ma pewne wewnętrzne ograniczenie rozmiaru aktualnie odtwarzanego fragmentu bufora? To znaczy, jeśli dostarczę bardzo mały bufor, to w jakiś sposób wpływa to na dźwięk odtwarzany przez głośniki. Doświadczam bardzo dziwnego hałasu podczas generowania i odtwarzania fali sinusoidalnej z małym buforem. Coś jak szczyt lub „BUMP”.

Pełna historia:

Zrobiłem program, który może generować sygnał dźwiękowy Sinus w czasie rzeczywistym. Zmienne parametry to Częstotliwość i Głośność. Wymaganiem projektu było maksymalne opóźnienie 50 ms. Dlatego program musi być w stanie generować sygnały Sinus z ręcznie regulowaną częstotliwością sygnału audio w czasie rzeczywistym.

Użyłem Windows WaveOut API, C # i P / invoke, aby uzyskać dostęp do API.

Wszystko działa dobrze, gdy bufor dźwięku jest duży na 1000 ms. Jeśli zminimalizuję bufor do 50 ms na wymaganie opóźnienia, to dla pewnych częstotliwości doświadczam na końcu każdego bufora, szum lub „BUMP”. Nie rozumiem, czy generowany dźwięk jest zniekształcony (sprawdziłem i nie jest) lub coś dzieje się z układem audio lub opóźnieniem inicjalizacji i odtwarzania.

Kiedy zapisuję wyprodukowany dźwięk w pliku .wav, wszystko jest idealne.

Oznacza to, że musi to być jakiś błąd w moim kodzie lub podsystem audio ma ograniczenia do wysłanych do niego kawałków bufora.

Dla tych, którzy nie wiedzą, WaveOut musi być zainicjowany za pierwszym razem, a następnie musi być przygotowany z nagłówkami audio dla każdego bufora, które zawierają liczbę bajtów, które muszą być odtwarzane, i wskaźnik do pamięci, która zawiera dźwięk, który musi być graczem.

AKTUALIZACJA

Hałas występuje w następujących kombinacjach 44100 SamplingRate, 16 bitów, 2 kanały, bufor 50 ms i wygenerowany sygnał audio Sinus o częstotliwości 201 Hz, 202 Hz, 203 Hz, 204 Hz, 205 Hz ... 219 Hz, 220 Hz, 240 Hz.

Dlaczego ta różnica wynosi 20, nie wiem.

questionAnswers(1)

yourAnswerToTheQuestion