Hmmm, nesto mi tu ne "zvuci" ok. Mozda gresim, davno je bilo, ali koliko se secam elektroakustike, signal da bi se cuo lepo treba da oscilira ispod i iznad "nultog signala" da bi to omogucilo maksimalni opseg membrane na zvucniku. Svaka jednosmerna komponenta signala limitira opseg posto "zakucava" membranu u ne-nulti polozaj i deformise zvuk i u krajnjoj liniji ga utisava. Zasto ovo pricam, zato sto je tvoj arraj popunjen UInt-ima, sto ce reci seo tvoj signal je uvek u pozitivnom opsegu i ima ili fiksnu ili plutajucu jednosmernu komponentu.
A za izbacivanje array-a integera na zvucnike, ja bih licno tu iskoristio malo unmannaged code-a i unsafe metode. To bi ti omogucilo da castujes c# managed int[] u fiksirani int* buffer sto je jedini nacin da nateras GC da ne dira tvoj buffer
Code:
int[] x = { -1, 1, -2, 2, -3, 3 };
fixed (int* px = x)
{
// ovde izbacis bafer na zvucnu
}
Taj pointer posle mozes da bacis na zvucnu karticu kroz Interop kroz API, pogledaj sors ovog primera
A low-level audio player in C#