Miika Asunta

C-kääntäjä haussa

12 viestiä aiheessa

Elikkä haluaisin päästä kirjoittamaan yksinkertaista lisämoduulia fs2004:ään, vaan asiallinen C-kääntäjä puuttuu... hyllystäni löytyy kyllä Visual Studio 5.0 (Visual C++ 5.0) mutta tuo on ajalta kauan ennen WindowsXP:tä, enkä ole sitä asentanut ollenkaan.

 

Eli Microsoftin omalle (ja tuhottoman kalliille) varteenotettavia vaihtoehtoja.

 

...ja mitään Visual basiccia en ala opetella  ;)

 

Miika

 

PS! Lyhykäinen kuvaus: ATIS. Tulisi lähinnä yksi menu, jolla avautuu yksi valintataulu (tekstikenttä + ponnahdusvalikko puhesyntsan äänen valinnalle). Lisäksi pitäisi lukea COM1/COM2 taajuuksia ja koneen sijaintia, ja tietysti netistä pitäisi URL:llä hakea pari tekstinpätkää, ja antaa puhesyntsan kakista toinen niistä ulos.

 

Yritänkö keksiä pyörää uudelleen? Löytyykö joku joka tekisi tämän muutamassa minuutissa...

 

 

 

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

No muuten hyvä, mutta siinä ei taida mitenkään pystyä käyttämään Microsoftin Speech SDK:ta?

 

Saan virheilmoituksia SDK:n headeritiedostojen syntaksivirheistä  :thmbdn:

 

Eikä Dev-Cpp:n linkkerikään taida ymmärtää SDK:n makana tulevaa sapi.lib -tiedostoa.

 

Äääh. Ehdin jo innostua, että homma lähti hienosti käyntiin... Nettikoodi ainakin toimi hetimiten.

 

Kauppaanko?

 

terv. Miika

 

Jaa viesti


Link to post
Jaa muulla sivustolla

 

Mielenkiintoinen löytö, Microsoftin Visual Studio 2005 Express edition ja Platform SDK:n saa ladata ilmaiseksi rekisteröitymistä vastaan.

 

Katsotaanpa mitä rajoituksia tähän liittyy.

 

Sama

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Ja Visual Studio 2005 rules  :thmbdn:

 

1>------ Build started: Project: Testi, Configuration: Debug Win32 ------

1>Linking...

1>Testi.obj : error LNK2019: unresolved external symbol __imp__CoUninitialize@0 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__InternetCloseHandle@4 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__InternetReadFile@16 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__InternetOpenUrlW@24 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__CoCreateInstance@20 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__CoInitialize@4 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__InternetOpenW@20 referenced in function _wmain

1>Testi.obj : error LNK2019: unresolved external symbol __imp__InternetAttemptConnect@4 referenced in function _wmain

1>C:\Documents and Settings\Miika\My Documents\Visual Studio 2005\Projects\Testi\Debug\Testi.exe : fatal error LNK1120: 8 unresolved externals

1>Build log was saved at "file://c:\Documents and Settings\Miika\My Documents\Visual Studio 2005\Projects\Testi\Testi\Debug\BuildLog.htm"

1>Testi - 9 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

 

 

Platform SDK asennettu, ja polut tarkistettu viiteen kertaan, ja luettu useampikin kommentti tismalleen samasta ongelmasta - speech sdk:sta linkkeri ei muuten ei herjaa!

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

 

Vielä yksi epämukavuustekijä... olen opetellut C-kielen kauan ennenkuin C++ tuli. Ja esim. Speech SDK on puhdasta C++:ssaa. Eli meikäläisen ohjelmointityylillä, jossa pointtereitten tyypeillä ei niin hirveästi tarvitse olla ole väliä, virheilmoituksia tulee kääntäjän perusasetuksilla ikävässä määrin.

 

Noh, tuohon pitää vain sopeutua, tarkoitus ei ole pysyvästi kotiutua Windows-ohjelmointiin, kun tausta on Macintosh-käyttiksessä, suunnilleen versiossa 7, ja tässä on ollut muutaman vuoden tauko. Siinä suhteessa soisi, että työkalut edes toimisivat sellaisenaan ilman säätämistä.

 

Miika

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Näillä ilmaissysteemeillä pääsee toki ohjelmoinnin alkuun.

 

Noin parin tunnin säätämisen jälkeen Visual Studio 2005 Express Edition suostuu kääntämään ja linkittämään yksinkertaisia projekteja; esim. ylläovan viestin wininet-kirjaston linkkaaminen toimii.

 

Ikävä kyllä Speech SDK edellyttää ATL-libraryn käyttöä, joka tästä versiosta on tahallisesti jätetty pois :thmbdn:. Osasin toki odottaa jotain toiminallisia rajoituksia, en vain voinut tietää missä niitä tulee vastaan.

 

Vastaaviin törmännee myös jatkossa.

 

Nyt täytyy sen verran viheltää peli poikki, että testaan muita projektin osia ennen puhesynteesiä, vaikka se onkin koko projektin juju. Onneksi hyllyssäni on Visual Studio 97, jonka voi kovalla rahalla päivittää nykyiseen versioon - siinä säästyy pitkä penni verrattuna koko paketin ostoon, mutta lienee silti yli 1000 euron sijoitus.

 

Miika

 

Edit:

Homma etenee, Dev-C++ ja FSUIPC.dll SDK toimivat moitteetta yhteen... varmuuden vakuudeksi käänsin libraryn itse  8)

 

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Ja Dev-Cpp vasta ihmeellisiä tekee

 

double freq; // floating point luku

long testi; // pitkä kokonaisluku

 

freq=125.85;

freq=freq-100; // 25.85 joka on FS4 sisäinen COM-jakson...

freq=freq*100; // 2585.00000

 

testi=freq;

 

printf("freq: %f\n",freq);

printf("testi: %d\n",testi);

 

MITEN IHMEESSÄ TÄMÄN KOODIN TULOSTE VOI OLLA

 

freq: 2585.00000

testi: 2584

 

:o

 

Kelvotonta. En tiedä pitäisikö itkeä vai nauraa. Vai huutaa. Tällainen ei kertakaikkiaan käy.

 

K&R määrittelee C-kielen, ja tuo ei ole sinne päinkään.

 

Aamlla kauppaan.

 

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Tuo taitaa olla juurikin K&R:n standardin ja liukulukujen ominaisuus. Standardi kun määrittelee, että liukuluku muutetaan kokonaisluvuksi katkaisemalla (floor). Liukuluvut taas voidaan esittää monella tapaa, tasan 2585 voi olla yhtä hyvin 2585.000... tai 2584.999... Molemmat ovat floateina sama luku, mutta katkaistessa tulee hyvinkin eri tuloksia.

Jaa viesti


Link to post
Jaa muulla sivustolla

Niin siis K&R:n mukaan desimaaliosa vain pudotetaan pois, jolloin desimaalipisteen vasemmalla puolella olevavat luvut jäävät.

"When a value of floating type is converted to integral type, the fractional part is disgarded."

 

(K&R, second edition, s. 197)

 

Tämä on toiminut oikein tähän mennessä kaikissa muissa ympäristöissä joita olen käyttänyt. (Macintosh: Symantec C++, Microsoft Visual Studio 97, unix System V cc ja linux gcc).

 

Ja floor(x) todellakin palauttaa suurimman x:ää pienemmän kokonaisluvun (2585.0 => 2584), mutta siitä tässä tapauksessa ei saisi olla kyse.

 

Miika

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Visual Studio 2005 Express Edition tekee näköjään saman, vielä kääntäjän varoituksen (possible loss of data) kera. Tai sitten vika on Windows XP:ssä.

 

Miten doublen integraaliosa muutetaan NYKYSÄÄNTÖJEN mukaan kokonaisluvuksi?

 

* * * * * * *

 

Noh, kaivoin noin esille seitsemän vuotta vanhaa omaa koodiani... silloin olen näköjään ratkaissut ongelman pyöristysdirektiivillä:

 

#define rint(x) ((long) ((x)+0.5))

 

jolloin rivi

 

b=a;

 

korvataan rivillä:

 

b=rint(a);

 

ja ongelma poistui. Edellisestä C-ohjelmointiprojektista on aikaa, ja rutiini on vielä kateissa. Opinkohan enää.

 

Miika

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Luo uusi käyttäjätunnus tai kirjaudu sisään

Sinun täytyy olla jäsen osallistuaksesi keskusteluun

Luo käyttäjätili

Rekisteröi uusi käyttäjätili helposti ja nopeasti!


Luo uusi käyttäjätili

Kirjaudu sisään

Sinulla on jo käyttäjätili?


Kirjaudu sisään