Synchrónne ovládanie zvuku vo WinApi – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Synchrónne ovládanie zvuku vo WinApi – C / C++ – Fórum – Programujte.comSynchrónne ovládanie zvuku vo WinApi – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
iridium0
Newbie
25. 2. 2016   #1
-
0
-

Dobrý deň.

Chcem sa spýtať či existuje vo WinApi funkcia, ktorou dokážem priamo ovládať výstup zvukovej karty.

....Ide o toto: mám 10 bitový A/D prevodník pripojený na mikrofón. Každých 60 mikrosekúnd mi A/D prevodník pošle po sériovej linke do môjho PC číslo o aktuálnej hodnote napätia z mikrofónu. (medzi mikrofónom a A/D prevodníkom je samozrejme ešte zosilovač) -Čísla si v PC ukladám do binárneho súboru. Chcem sa spýtať, ako môžem tieto čísla premeniť v PC opäť na zvuk z toho mikrofónu?

Za odpovede vopred ďakujem.

Nahlásit jako SPAM
IP: 62.197.243.–
Reklama
Reklama
q
~ Anonymní uživatel
219 příspěvků
25. 2. 2016   #2
-
+1
-
Zajímavé

Pokud ti jde o pozdější přehrání uloženého souboru pro poslech uchem, tak asi bude nejjednodušší ho zkonvertovat do nějakého zvukového formátu a až ten standardně přehrát. Jednoduchý formát je WAV.

Nahlásit jako SPAM
IP: 213.211.51.–
iridium0
Newbie
25. 2. 2016   #3
-
0
-

#2 q
To by mi stačilo. Ale ako skonvertujem prosté 8-bitové čísla do zvukového formátu WAV?

Nahlásit jako SPAM
IP: 62.168.89.–
hlucheucho+10
Posthunter
26. 2. 2016   #4
-
0
-

Nastuduješ si formát a napíšeš si program, který konverzi provede.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
iridium0
Newbie
26. 2. 2016   #5
-
0
-

#4 hlucheucho
Akú literatúru by si mi na to odporučil? Čo sa týka spracovania zvuku vo WinApi, nemám tam so zvukom takmer žiadne skúsenosti.

Nahlásit jako SPAM
IP: 62.197.243.–
hlucheucho+10
Posthunter
26. 2. 2016   #6
-
0
-

Buď budeš sekvenci čísel ukládat do nějakého jednoduchého souboru (csv apod) a pak provedeš konverzi na např. waw. V tom případě se ale nejedná o zpracování zvuku, spíš o konverzi souboru na jiný s jiným formátem. Druhý postup je přijatou sekvenci čísel přímo ukládat ve formátu waw, tedy konvertovat "za běhu" při příjmu dat. I zde má úloha obecnější polohu - formátuji data do požadovaného formátu. Formát vstupních dat znáš, jejich vzorkovací frekvenci taky. Potřebuješ znát "cílový" formát, dostal jsi odkaz na waw. Zkusil bych google pro nalezení více podrobností.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
26. 2. 2016   #7
-
0
-

Ještě pozn k HW: v některém z příspěvků jsi uvedl, že budeš do PC posílat 8-bitové číslo. To znamená, že celý vstupní rozsah napětí (myslím tím napětí špička - špička) můžeš rozdělit na 256 hodnot. Na přenos zvuku se mi to zdá být málo. Druhý problém je vzorkovací frekvence - máš představu jak velký objem dat budeš muset přenést za jednotku času a jak velký baudrate k tomu potřebuješ? Obávám se, že zhruba 17ksps přes sériovou linku (= COM?) bude problém. Asi by bylo vhodné použít vzorkovací frekvenci rovnou vzorkovací frekvenci zvoleného formátu (waw?) a HW tomu přizpůsobit např. ADC připojit na jednočip a posílat přes USB pakety obsahující několik vzorků.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
iridium0
Newbie
26. 2. 2016   #8
-
0
-

#7 hlucheucho
Jedná sa o prenos hlasu/zvuku cez mikrofón. Ten A/D prevodník je 10 bitový, a je súčasťou PIC mikrokontroléra 12F1840. Prenášam však zatiaľ iba horných 8 bitov. Spodné 2 bity sú už súčasťou ďalšieho 8 bitového registra. ...Neskôr program spravím v PIC tak, že postupným snímaním zvuku najprv naplním hodnotami 5 registrov v jeho pamäti (čiže 40 bitov), a tie potom naraz odošlem do PC (aby sa zbytočne neposielali nevyužité bity). V programe v PC to naspäť rozložím na 10 bitové čísla, ktoré budem postupne vkladať do 16 bitovej premennej, z ktorej to pôjde do dočasného binárneho súboru, ako 16-bitové čísla. -No a ten súbor by som chcel používať ako bufer pre reprodukciu zvuku. (teda ak to pôjde)

....Čo sa týka rýchlosti vzorkovania, tak PIC12F1840 dokáže urobiť jeden spoľahlivý A/D prevod za cca 4 mikrosekundy. -Cez sériovú linku COM (USART) momentálne používam rýchlosť prenosu čísel 19200 kbps. PIC-ko však dokáže zvládnuť rýchlosť aj 115200 kbps, nakoľko má zabudovaný interný oscilátor až 32 MHz. Preto si myslím, že s kvalitou zvuku by nemal byť problém. Veď nakoniec jedná sa len o prenos z mikrofónu, čiže stačí prenášať frekvencie do nejakých 12 kHz.

(s USB portom zatiaľ neviem pracovať cez WinApi)

Nahlásit jako SPAM
IP: 62.197.243.–
hlucheucho+10
Posthunter
26. 2. 2016   #9
-
0
-

115200 bitů/sec (uvádí se jako max baudrate pro COM u PC), 1x start, 8 datových, 1x stop bitů. Vychází mi 11520 Bytů/sec. Pokud vzorek je 10 bitů, představuje 1,25 Byte. Takže počet přenesených vzorků za sekundu bude max. 11520 / 1,25 = 9216sps což představuje asi 2/3 toho, co potřebuješ při 60 mikrosec vzorkovací periodě. 9216sps by na zvuk stačilo při šířce pásma asi 4,5kHz (odpovídá šířce pásma AM rozhlasu; analogový telefon - pevná linka mívala asi 4kHz), musel bys to před vstupem do převodníku ostře oříznout dolní propustí. Pro 12kHz šířku pásma potřebuješ nejméně 24ksps - nejen navzorkovat ale i přenést do PC. Co se týče USB, doporučuji použít převodník par./USB FT245 od FTDI chips. Jejich API je dobře propracované a má kvalitní dokumentaci. Asi to bude chtít poladit konfiguraci - např. nastavit Latency Timer na kratší čas... Má to docela slušnou šanci na dostatečně rychlý přenos dat. Možná by stálo za pokus použít FT2232 jako převodník USB na SPI a testnout, kolik hodnot se dá naměřit a přenést např. se 24-bitovým převodníkem.

Práce s USB zařízením, které vytvoří virtuální COM, je stejná jako s obyčejným COMem, možná i narazí na stejné limity co se přenosových rychlostí týče. Z WinAPI potřebuješ asi tak 4 funkce.(CreateFile, WriteFile, ...). Lze použít i něco hotového, osvědčila se mi Tserial_Event.

Neustále měj na paměti, že Windows nejsou RTOS.

Nejjednodušší se mi jeví připojit mikrofon do příslušného vstupu audio karty PC :)

hu

Nahlásit jako SPAM
IP: 195.178.67.–
iridium0
Newbie
26. 2. 2016   #10
-
0
-

#9 hlucheucho
Dík za rady. -Ano, pomýlil som sa. Namiesto kbps malo byť Bd/s a prenášajú sa zakaždým ešte 2 bity naviac. Na to som jaksi zabudol.

....Hento od FTDI určite vyskúšam. Čo sa týka dátovej priepustnosti USB ako virtuálneho COMu, možno to pôjde aj rýchlejšie. Nedávno som len tak zo srandy skúšal zadať do DCB štruktúry i väčšie rýchlosti, ako býva zvykom pri COM-och. -Napr 500000, 1000000, atď. a testoval som, či funkcia SetCommState() nevráti chybu. Nevrátila. -Potom som skúsil tie rýchlosti spätne načítať funkciou GetCommState(). Boli tam. -Avšak môj kúpený USB prevodník na UART mi to už fyzicky nepreniesol. Takže potenciál na také rýchlosti by tam možno aj bol.

....Vyskúšam ten prevodník FT2232 na SPI. S SPI som bez problémov prenášal čísla medzi PICéčkami aj megabitovými rýchlosťami. -Len teraz ešte naučiť sa konvertovať tie čísla ktoré mi prídu do PC na WAV a na zvuk.

Čo sa týka toho mikrofónu priamo na vstup audiokarty: samozrejme netreba potom už riešiť žiadnu komunikáciu :). Lenže ja mám v pláne ako krok 2 použiť na digitálny prenos zvuku bezdrôtové moduly. Napr. RFM67W-868S2 s rýchlosťou prenosu až 600 kbps. Na oboch stranách budú PIC12F1840 s týmto modulom. Na strane PC sa bude mikrokontrolér starať o posielanie priajatých čísel do počítača.

.....Ináč teraz ma napadlo... ....použit na strane PC D/A prevodník. PICéčko na strane PC nakonfigurujem ako D/A prevodník, ktorý mi prevedie prijaté čísla späť na analógové hodnoty. Analógový výstup potom pripojím na vstup zvukovej karty. Teda nakoniec to s tou zvukovou kartou nie je zlý nápad. :)

Nahlásit jako SPAM
IP: 62.197.243.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 128 hostů

Podobná vlákna

Ovládanie klavesami — založil Martin

Ovladanie procesov — založil svito

Ovládanie hardware — založil Jakubo

Ovladanie web kamery — založil pelkosom

Ovladanie ineho programu C# — založil Tayson

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý