Generiranje zvoka in hkratno predvajanje

Vse o večpredstavnosti (zvok, video, DirectShow in podobno).
Odgovori
G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

Generiranje zvoka in hkratno predvajanje

Odgovor Napisal/-a G16 » 25.01.2014 01:38:17

Lep pozdrav vsem, po dolgem času :)

Zadnje čase se ukvarjam z zvokom in signali in pišem eno knjižico.
Zanima pa me namreč kako bi lahko zvok generiral in ga hkrati predvajal skozi zvočno kartico.
Razmišljal sem, da bi imel en buffer v katerega bi dodajal zapis signala, neka funkcija oz. nit pa bi iz tega bufferja brala in sproti predvajala zapisan signal.
Probaval sem z MMSystem knjižico in funkcijo sndPlaySound(MS^.Memory, SND_MEMORY or SND_aSYNC),
a vendar se ko kličem funkcijo z novimi podatki signala, naredi kake 10ms presledka oz. pavze... tišine. Ker pa bi rad generiral signal, ki mora biti neprekinjen me zanima, kako bi to naredil.
Gledal sem že neke komponente, ki se uporabljajo npr. za streaming zvoka, ampak jaz bi rabil samo enostavno kodo, za nit, ki bi iz bufferja brala podatke in jih predvajala...

Any idea how to do that? :)

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

Re: Generiranje zvoka in hkratno predvajanje

Odgovor Napisal/-a G16 » 25.01.2014 11:07:21

Mislim, da sem našel rešitev...

waveOutWrite()
s to funkcijo pišeš direktno na zvočni izhod

Silver_War
Prispevkov: 664
Pridružen: 01.06.2004 14:50:41

Re: Generiranje zvoka in hkratno predvajanje

Odgovor Napisal/-a Silver_War » 26.01.2014 14:07:45

BASS Audio Library (http://www.un4seen.com/) je zelo zmogljiva zvočna knjižnica, katera podpira stremanje zvoka iz različnih datotek (mp3, wma, wav, ogg, itd.) pravtako pa tudi omogoča proceduralno generiranje zvoka kar ti potrebuješ.
Ker BASS omogoča izbiro velikosti bufferja lahko z njim dosežeš tudi realnočasovno predvajanje.
Podpora večih kanalov omogoča lahko miksanje različnih zvokov (tukaj tudi pride prav multithreading podpora).

In pa kar je verjetno najboljše je to da BASS Audio Library podpira Wind32, Win64, MacOS in Linux, kar ti bo zagotovo prišlo prav če razmišljaš o portanju tvoje aplikacije na druge platforme.

Je pa res, da BASS Audio Library ni zastonj in ni ravno poceni. Vendar mislim, da je glede na svojo zmogljivost vredna svojega denarja.

EDIT: Samo knjižnico lahko dol preneseš tudi brez licence in jo tako prvo preizkusiš. Knjižnica ima en kup primerov uporabe in dobro narejeno dokumentacijo.

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

Re: Generiranje zvoka in hkratno predvajanje

Odgovor Napisal/-a G16 » 27.01.2014 15:00:38

Poznam BASS knjižico, ja... jo že nekaj časa uporabljam v raznorazne namene... to da je trial nisem vedel, no meni še kar deluje... sicer pa tako ali tako ne rabim nekih licenc, ker še zmeraj programiram za hobi.
To da napišem svojo knjižico, ki pa se ukvarja z signali, mi pa je bil izziv. :)
Tole funkcijo za predvajanje signala, mam že praktično napisano, samo moram še pogruntati, na kak način bom polnil bufferje... logistika :P

Potem pa bom mogoče še napisal funkcije za analizo signala... kak FFT, Goertzeljev algoritem... ipd :)
Če ima kdo kako kodo kje pri roki, pa se priporočam ;)

Silver_War
Prispevkov: 664
Pridružen: 01.06.2004 14:50:41

Re: Generiranje zvoka in hkratno predvajanje

Odgovor Napisal/-a Silver_War » 27.01.2014 15:24:12

G16 napisal/-a:to da je trial nisem vedel, no meni še kar deluje... sicer pa tako ali tako ne rabim nekih licenc, ker še zmeraj programiram za hobi.
Saj ni trial. Knjižnica ima polno funkcionalnost.
Če jo uporabljaš za nekomercialne namene ne potrebuješ licence zanjo, razen če jo bi hotel uporabit kot pomemben del neke druge knjižnice (naprimer knjižnica za predvajanje video posnetkov pri čemer se audio predvaja/dekodira s pomočjo BASS-a), pa čeprave je tudi ta brezplačna.
Drugače pa ponujajo tri licence:
- Shareware 125$: Licenca za izdelavo shareware produktov, katere lahko ljudje preizkusijo preden jih kupijo, vendar mora biti cena le teh manjša kot 40$. Ali pa za plačljive produkte, če je njihova cena manjša kot 10$. Z večkratnim nakupom shareware licence lahko dvigneš prag cene.
- Single comercial licence 950$: To je licenca namenjena za izdelavo komercialnih produktov, pri čemer nisi omejen na ceno tvojega produkta. Če kupiš licenco samo za eno platformo je le ta cenejša.
- Unlimited comerical licence 2950$: Ta licenca pa ti omogoča razvoj neomejenega števila komercialnih prduktov.

Odgovori