Nyt projektin viimeisenä silauksena täytyisi musiikkitiedosto saada binääriin upotettua niin, ettei paketti tarvitse kuin yhden tiedoston toimiakseen. Olen tutkinut asiaa Googlen ja ohjelmointisivustojen hakutoimintojen avulla, mutta en löytänyt mitään toimivaa keinoa.
Löysin keinon sisällyttää tiedoston binääriin assemblyn avulla. Se toimikin varsin mainiosti, se sisällytti tiedoston binääriin, mutta sen soittaminen ei sitten ollutkaan mahdollista tai ainakin niin hankalaa, etten tiennyt keinoa. (http://www.peliguru.us/foorumi/index.php?topic=21.0)
Nyt kiinnostaisi tietää noista resurssitiedostoista enemmän. Kuinka tiedosto sisällytetään binääriin resursseilla ja kuinka tiedosto sitten soitetaan? Musiikkitiedosto on muotoa midi ja IDE Dev-Cpp.
Niin, sitten pitäisi tietää myös, miten tuota midi-tiedostoa soitat. Eli osaako soitto-ohjelma ladata sen esimerkiksi resurssista vai haluaako se väkisin ladata sen midi-tiedostosta..
Muistelen, että nimenomaan MIDI-tiedostoja ei voi tallentaa resursseiksi (tai siis ei voi soittaa kätevästi resurssista käsin). Onko liikaa vaadittu, että ohjelma tallentaisi tiedoston jonnekin ja soittaisi sitten sieltä?
#include <stdlib.h> #include <stdio.h> char midin_polku[L_tmpnam + 1] = {0}; // Luodaan väliaikaistiedosto ja tallennetaan data void tallenna_midi(void) { tmpnam(midin_polku); FILE *f = fopen(midin_polku, "w"); fwrite(midin_data, midin_datan_koko, 1, f); fclose(f); } void poista_midi(void) { remove(midin_polku); } int main(void) { tallenna_midi(); atexit(poista_midi); // Tähän muu ohjelma... soita(midin_polku); }
Helpoksi tallennustavaksi voin taas suositella Base64-enkoodausta, joka kasvattaa tiedoston kokoa 33 % mutta mahdollistaa datan tallentamisen helposti suoraan C-koodin sekaan. Purkamiseen tarvitaan yksinkertainen funktio. Toki datan voi myös dumpata suoraan C-taulukoksi:
unsigned char data[] = { 4, 255, 24, /*...*/ };
Nyt on siis kyse demon musiikista, eli tiedostojen generoimiset tai vastaavat eivät nyt tule kysymykseen. Neljään kilotavuun pitäisi saada mahdutettua jotakin, jota voisi sanoa musiikiksi.
Ymmärtääkseni neljän kilotavun rajoitus koskee ajettavan tiedoston kokoa eikä demon myöhempää muistinkäyttöä. En kyllä tiedä, sallitaanko kilpailuissa ja vastaavissa yleensä, että demo luo väliaikaisen aputiedoston.
Ainakin Assembly säännöissä sanotaan näin:
The production must work from read-only media and must not modify system settings (for example: Windows registry). However, you may use the platform's standard temporary directory during the execution of your entry for storing data if such service is available.
Aihe on jo aika vanha, joten et voi enää vastata siihen.