zvuk v C#

Programovacie jazyky, rady, poradňa...
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

zvuk v C#

Príspevok od používateľa harrison314 »

nieviet niekto ako generovat zvuk urcitej frekvenice v C#,

alebo ako prepisat konštruktor rodičovskej triedy?
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

skus si pokukat tuto temu je tam toho dost popisane aj scriptiky určite z toho vičitaš čo potrebuješ
http://www.hojko.com/zvoncek-v-c-a-t120429.html
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

Zvuk s minirepráku na doske:
System.Console.Beep(frekvencia, dĺžka);

Zvuk pomocou MIDI (MIDI)
(normálne z audio výstupu):
http://www.codeproject.com/KB/audio-vid ... olkit.aspx

inak:
gugl: generate sound c# alebo sound generator c#

Prepísať konštruktor? Myslíš parametre, alebo celé telo? Neviem o tom (JA!), že by sa také niečo dalo, pokiaľ nemáš zdroják. Radšej napíš čo konkrétne (u čoho) potrebuješ.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

s tím konštruktorom myslím celé telo, parametre by som prepisal preťžením.
Konkretny príklad na to nemám , myslel som to všoubecne.
Pretože som nikde o tom nič nenašiel.

A čo sa tíka generovania zvuku, chcem generovat len jednoduchy sinusovy signal presnej frekvencie, pokial by bolo možne tak dvojkanalovo. Teda na výstup zvukovej karty ( checem si postavit maly DDS genrator ) a nie vnutorneho repracika , ktory bol v mode za čias TurboPascalu 7 .
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

No chcel som ti poslať stránku kde bol generátor čo hľadáš, ale žiaľ ju narýchlo neviem nájsť (asi to bolo na www.codeproject.com) a autor sa tam nepodpísal (do zdrojáku). Jediné čo viem je názov projektu CPI.AUDIO, ale to je žiaľ málo (kvôli hľadaniu).
Ale našiel som stránku kde si ten projekt (po zaregistrovaní) môžeš stiahnúť ( http://en.pudn.com/downloads105/sourcec ... 75_en.html# ).

No a ešte, na codeproject sú aj iné projekty zamerané na generovanie zvuku. Neskúšal som ich, ale pravdepodobne idú (keď ich tam dali). Pozri si nejaké ak máš záujem: http://www.codeproject.com/KB/audio-video/
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

Ešte mám problém z kresllením
v triede graphics si nakreslím napr. graf ale potom mám problém s jeho uložením na disk (bez toho aby sa zobrazilo v okne ) alebo zobrazením v PictureBox-e .
Skušal som ju pretipovať na triedu Image ale to nefungovalo.
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

harrison314 napísal:Ešte mám problém z kresllením
v triede graphics si nakreslím napr. graf ale potom mám problém s jeho uložením na disk (bez toho aby sa zobrazilo v okne ) alebo zobrazením v PictureBox-e .
Skušal som ju pretipovať na triedu Image ale to nefungovalo.
Tomuto akosi nechápem. Takže, máš Graphics na ktorom je nakreslený graf a chceš ho uložiť do súboru. A z čoho si prevzial kontrolu Graphics? Z PictureBoxu (PictureBox.CreateGraphics())?
A nechápem tomu "bez toho aby sa zobrazilo v okne", čo sa má zobraziť v okne?
Dám radšej príklad z toho, čo som robil ja:

Kód: Vybrať všetko

Panel panel = new ...; // JA som kreslil na panel (ale môžeš aj do formulára)
Graphics g = panel.CreateGraphics();
Bitmap obrázok = new (panel.Width, panel.Height);
g.DrawLine(....);
panel.DrawToBitmap(obrázok, panel.ClientRectangle); // do "obrázok" sa uloží screenshot o rozmeroch ClientRectangle
obrázok.Save(....); // ak ho chceš uložiť do súboru
// A ak chceš graf zobraziť ako obrázok na PictureBoxe
PictureBox pb = new ....;
pb.Image = obrázok
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

novy obrazok som ziskal takto:

Kód: Vybrať všetko

Bitmap bmp = new Bitmap(300,300);
Image img = (image) bmp;

Graphics grp = Graphics.FromImage(img);
 
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

Stále nechápem. Čo ti vlastne nejde? Chceš kresliť cez grp do img a potom to uložiť?:

Kód: Vybrať všetko

grp.DrawLine(....); // nakreslíš čo chceš
img.Save("CestaNazovSuboru.png"); //jednoducho uložíš 
A keď ho chceš zobraziť v PictureBoxe:

Kód: Vybrať všetko

PictureBox pb = new ....;
pb.Image = Image.FromFile("CestaNazovSuboru");
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

to mi uz fakci....

este by som potreboval vediet ako zistit ci asynchronny delegat uz dokoncil svoju cinnost
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

Skús si to overiť pomocou vlasnosti (properties) IsCompleted rozhrania (interface) IAsyncResult:

Kód: Vybrať všetko

IAsyncResult ia = new DelegátOné().BeginInvoke(...);
...
if(ia.IsCompleted) 
...
Tu máš aj pekný príklad (síce anglicky, ale to nevadí, pokiaľ pochopíš príklad): http://en.csharp-online.net/CSharp_Dele ... thod_calls
poprípade gúgl: asynchronous delegate c# is completed
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

nevies nahodou, kde by som nasiel navratovu hodnotu
API funkcie WinExec ?
Myslim retazec , ktory vypise cmd
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

harrison314 napísal:nevies nahodou, kde by som nasiel navratovu hodnotu
API funkcie WinExec ?
Na internete.
http://msdn.microsoft.com/en-us/library ... S.85).aspx
harrison314 napísal: Myslim retazec , ktory vypise cmd
Nechápem.
Radšej napíš čo presne zamýšľaš.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa harrison314 »

Laicky povedane chcem aby moj program mal pristup k prikazovemu riadku, teda aby mohol aj citat co mu dane prikazy vratia (napr. naplanovane spustenia , alebo stav pamete ).

Skusal som to cez triedu Process ale neuspesne , nikdy sa mi nepodarilo ziskaz z neho odpoved , vzdycky sa zasekl pri
p.StandartOutput.ReadToEnd();
a netusim preco, pozeral som to aj na nete ale vsade to mali napisane takto

Kód: Vybrať všetko

Process p = new Process();

            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;

            p.Start();
           
            p.StandardInput.WriteLine("MEM");
   
        string s=    p.StandardOutput.ReadToEnd();         // tu by mal vratit //        stav pamete ale zasekol sa, ale nevyvola   vynimku
           
        Console.WriteLine(s);
        p.Close();
tak to skusam cez API funkcie ( zada sa mi to profesionalnejsie)
bart11
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 91
Registrovaný: 13 okt 2006, 20:11
Kontaktovať používateľa:

Príspevok od používateľa bart11 »

Asi to nieje presne tak ako si myslel... alebo ako som si myslel, že si myslíš... Ani neviem načo to presne potrebuješ, takže jediné funkčné riešenie, ktoré som našiel bolo toto:

Kód: Vybrať všetko

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = "/C mem"; // namiesto mem dohoď príkaz, ktorý chceš aby sa vykonal
p.Start();
string s = p.StandardOutput.ReadToEnd();
MessageBox.Show(s);
p.Close(); 
/C je voľba príkazového riadka
http://www.java2s.com/Code/CSharp/Devel ... Output.htm
Napísať odpoveď