Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 2.699 pregleda

Najnovija ↓

Zvuk iz ArrayList-a 15.06.2007. u 11:51 · pre 236 meseci #1
Da li je moguce pustiti signal na zvucnik iz ArrayLista.Podaci u ArrayListu su mi Uint tipa. Znam da Matlab ima neku jednostavnu naredbu koja to izvrsava ,al u c# ? :-(. Signal koji cuvam u ArrayListu mi je u slusnom podrucju tako da nije problem u konstantaciji ,vec u implementaciji .Ako ko ima ideju,svaka je dobro dosla.
Potpis
Svako može, a poneko zna.
Re: Zvuk iz ArrayList-a 15.06.2007. u 13:35 · pre 236 meseci #2
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#
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Zvuk iz ArrayList-a 15.06.2007. u 21:35 · pre 235 meseci #3
Citat:
mmix: 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#

Nije problem mogu prebaciti uint u int . Posto su mi elementi u nizu u rasponu 0-4096,mogu isto promeniti na -2048 do 2048.
Koliko sam shvatio poenta ovog je izbacivanje celog bafera . Meni je potrebno tako reci real time ,tj. da mi po pristizanju podataka sa uredjaja odnosno po prikazu signala na ekran isto se cuje na zvucniku.Ne radim komercijalni program,radi se o Master(diplomskom) Radu ,koji mi je posteno zapeo kod ovog dela :-(.
Potpis
Svako može, a poneko zna.
Re: Zvuk iz ArrayList-a 18.06.2007. u 15:48 · pre 235 meseci #4
OK, ti bas testiras moje zakorelo znanje o ovome :)

1. opseg -2k do 2k nije dobar. Zvucne kartice su 16-bitne i Int ima opseg od -32k do +32k, sto znaci da ce ti input volume tvog signala biti 6% maksimalnog. U prevodu, cak iako i karticu i zvucnike pojacas do maksimuma cuces sa samo 6% jacine. Pre nego izbacis ovaj buffer na karticu moras da "normalizujes" signal, u tvom slucaju svaki int da pomnozis sa 16 (ili svaki int da shiftujes 4 mesta na levo sa predznakom)

2. Ne postoji real time zvuk. Svi programi od mp3 playera do igrica rade sa malim smenjujucim baferima da postignu utisak realnosti. U 44.1Khz modu, kartica "guta" 44100 unsigned integera svake sekunde. Posto oko ne postize vise od realno 25 frameova i ono sto prikazes na ekranu u medjuvremenu covek ne vidi tu imas prostora da laziras stvarnost. Takle ako ti organizujes buffer od 44100/25 = 1764 unsigned integera i vrtis u krug dva buffera (pogledaj double buffering) postici ces "utisak" da zvuk realno prati ispis na ekranu iako taj signal realno kasni za "realnoscu" od 0 to 40ms (1000/25)

E sad posto realno sumnjam da ces moci da postignes sve ovo kroz cisti C# i WaveAPI, toplo preporucujem da pogledas DirectSound9.0 extension for .NET.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Zvuk iz ArrayList-a 18.06.2007. u 21:41 · pre 235 meseci #5
Citat:
mmix: OK, ti bas testiras moje zakorelo znanje o ovome :)

1. opseg -2k do 2k nije dobar. Zvucne kartice su 16-bitne i Int ima opseg od -32k do +32k, sto znaci da ce ti input volume tvog signala biti 6% maksimalnog. U prevodu, cak iako i karticu i zvucnike pojacas do maksimuma cuces sa samo 6% jacine. Pre nego izbacis ovaj buffer na karticu moras da "normalizujes" signal, u tvom slucaju svaki int da pomnozis sa 16 (ili svaki int da shiftujes 4 mesta na levo sa predznakom)

2. Ne postoji real time zvuk. Svi programi od mp3 playera do igrica rade sa malim smenjujucim baferima da postignu utisak realnosti. U 44.1Khz modu, kartica "guta" 44100 unsigned integera svake sekunde. Posto oko ne postize vise od realno 25 frameova i ono sto prikazes na ekranu u medjuvremenu covek ne vidi tu imas prostora da laziras stvarnost. Takle ako ti organizujes buffer od 44100/25 = 1764 unsigned integera i vrtis u krug dva buffera (pogledaj double buffering) postici ces "utisak" da zvuk realno prati ispis na ekranu iako taj signal realno kasni za "realnoscu" od 0 to 40ms (1000/25)

E sad posto realno sumnjam da ces moci da postignes sve ovo kroz cisti C# i WaveAPI, toplo preporucujem da pogledas DirectSound9.0 extension for .NET.


Ako ti ovo nazivas zakorelim znanjem,ne znam onda sta je za tebe "tecno " znanje -:)) .U svakom slucaju hvala na ovim odlicnim i preciznim informacijama .
Jos jednom,hvala !
Potpis
Svako može, a poneko zna.
Re: Zvuk iz ArrayList-a 19.06.2007. u 16:11 · pre 235 meseci #6
Svojevremeno ('97-e) sam pomagao ortaku koji je pravio program koji "pretvara" jeftinu zvucnu karticu u jeftini +/-20mV osciloskop za signale do 22Khz preko LineIn utisnice :), al davno to bese. Ocigledno se nesto "zalepilo"
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme