Diskuze: C# generování zvuku

C# .NET .NET (C# a Visual Basic) C# generování zvuku American English version English version

Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Zdravím.

Jelikož už jsem v C# delší dobu nedělal, chtěl bych poprosit aby mně někdo trochu nasměroval případně pomohl s řešením jednoho problému.

Jde o to, že potřebuji generovat jistý výstup na zvukovou kartu. Vynechejme zatím důvod, kvůli čemu to potřebuji řešit právě touto cestou, ale výstupem by měl být v podstatě binární kód, který následně ovládá periferii napojenou na zvukový výstup.

Vše ohledně HW mám vyzkoušené pomocí signálu který jsem si namoduloval v audacity a vše funguje podle mých představ. Teď ovšem potřebuji napsat program/třídu, která se mi bude starat o vysílání libovolné sekvence. Původně jsem zamýšlel, že budu mít někde uložené dva velice krátké .waw soubory, ve kterých bude zaznamenaný vzorek pro vyslání jedničky a nuly. Pak jsem si ale uvědomil že při přepínání mezi nimi by mohlo docházet ke zpoždění a proto bych byl radši,kdyby tyto zvuky bylo možné přímo generovat a tím aby i navazovaly. Bohužel nemám nejmenší tušení jak na to.

V příloze je ukázka jak signál vypadá.
první (oddálený) ukazuje celý výstupní signál, druhý obrázek pak detailně zobrazuje vyslání signálu "0101010".

V podstatě vstupem pro třídu by měl být list, obsahující jednotlivé bity k vyslání, a také doba trvání jednoho pulzu v milisekundách. Ta by měla ovlivnit délku trvání vysílání jednoho bitu, (ne však tak že by roztáhla dobu jednoho kmitu signálu,ale pouze by signál měl více kmitů na jeden bit)

Odpovědět  ±0 17. února 11:35
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jenkings
ostrozan:

A co kdyby sis nasamploval celý bajt?
Jinak na řešení jsem taky zvědavý.

 
Nahoru Odpovědět 17. února 13:08
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na ostrozan
Jenkings:

No takhle, ono to nutně nemusí být ani bajt. Ta sekvence bitů nemá nijak pevně danou délku.
A hlavně jde o to že pak bych mohl posílat jen ten konkrétní bajt. Já však potřebuji abych dokázal pomocí té třídy odvysílat jakoukoliv sekvenci bitů kterou jí pošlu v konstruktoru

Nahoru Odpovědět 17. února 14:29
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Smím se zeptat Tomáš Brabec za co jsem si vysloužil mínus na dotaz ?

Nahoru Odpovědět 17. února 17:43
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Tomáš Brabec:

To je dlouhý příběh... :D Samozřejmě tam mínus být nemá.

Nahoru Odpovědět 17. února 18:17
Lidé se dělí do 10 skupin. Jedni dvojkovou soustavu znají a druzí ne.
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na Tomáš Brabec
Jenkings:

dobře,díky :)

jinak ještě pro objasnění, jsem si vědom že tenhle přístup k odesílání dat není tak úplně ideální. Jedná se o jakési krajní řešení, kdy je potřeba tento SW nasadit na větší množství strojů, a je kladen důraz na minimální náklady. Takže mám i elegantnější řešení pomocí USB, které ovšem vyžaduje investici do řídícího modulu,který teprve vytváří výstupní signál. Ovšem výrobní cena je okolo 500 Kč, zatímco pomocí tohoto bych dokázal hardware napojený na zvukový výstup vyrobit za cca 40 korun

Nahoru Odpovědět 17. února 18:22
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Když jsem řešil zvuk v SDL, tak to šlo přes buffer. Mohl by sis teoreticky načíst malé wav soubory, ty nastrkat do Bufferu a tím by nedocházelo ke zpoždění při přepínání. Funguje to tak, že mu tam nastrkáš data, on je přehraje a když mu dojde buffer, tak si zavolá callback a nastrkáš mu tam další. Hudba zněla dobře, ale jestli je při tom nahrávání do bufferu nějaká odezva, to sluchem nezjistim. SDL mi mělo binding i do C#.

Nahoru Odpovědět  +1 17. února 19:21
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jenkings
ostrozan:

Pokud můžu radit, tak máš - li sice dražší, ale lepší řešení a strojů není 100 - prosaď si radši to. Zvlášť budeš li to v budoucnu sám spravovat. Úspora pár stovek na jednom zřízení se ti může vymstít. (vlastní zkušenosti)

A co použít k propojení nějaký bus (CAN, 485)?

 
Nahoru Odpovědět 18. února 8:31
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na ostrozan
Jenkings:

Bohužel si v tomhle nemůžu moc diktovat podmínky. Tady jde opravdu hlavně o co nejnižší cenu. A tyto sběrnice nemohu použít z důvodu nasazení na velice různých strojích, kdy si nemůžu být jistý, zda všechny obsahují to co potřebuji, zatímco zvukový výstup je určitě na všech.

Nahoru Odpovědět 19. února 20:53
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Jenkings
ostrozan:

Ještě se zkus podívat na Labwiew, je to takové "obrázkové" programování lehce pochopitelné a má to už plno různých udělátek včetně různých generátorů. https://m.youtube.com/watch?…

 
Nahoru Odpovědět 20. února 23:47
Avatar
ostrozan
Redaktor
Avatar
ostrozan:

Jen pro zajímavost - na jakém zařízení běží .NET - já teda znám jen PC, případně IPC (SIMATIC) - a při tom nemá USB, nebo aspoň COM do kterého bys vrazil převodník na RS485 za 25 kč?
Když tak mi rozšiř obzory, pokud to není tajné.

 
Nahoru Odpovědět  -1 21. února 12:04
Avatar
Jenkings
Redaktor
Avatar
Odpovídá na ostrozan
Jenkings:

No, tady jde zase o jinou věc. Do těchhle věcí jdou zase režijní signály z PC, tudíž tím nemůžu prohnat surový výstupní signál přímo pro koncové zařízení.

COM například mezi jednotlivé bajty vkládá tuším jednu nulu pro oddělení a časování.
USB má zase režijní protokoly kdy připojené zařízení se chová v podstatě podobně jako síťový prvek, a nejdřív se nahlásí čipu který obstarává USB sběrnici. Součástí toho je i ohlášení režimu přenosu apod. tudíž na surový výstupní signál taktéž nepoužitené

Nahoru Odpovědět 21. února 14:38
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.