Soltun blogi

Soltun soiva näppis

Tein pienen pienen tietokoneohjelman ja yritin laittaa sen nettiin. En nyt tiedä onnistuiko, mutta sovelluksen pitäisi nyt löytyä täältä (se on zip-tiedostona, jonka koko on 7,77 MB):

https://www.sendspace.com/file/cvu3rp

Jos ei nyt toimi, niin etsin myöhemmin jonkin palvelun, jonne voi näitä omia ohjelmiaan lisätä.


Tältä ohjelmani näyttää.


Viime huhtikuussa aloin pitkästä aikaa ohjelmoida jotain. Edellisestä kerrasta oli jo jotain 17 vuotta, silloin kielenä oli varsin helppokäyttöinen (ja rajoitettu) QBasic. Uusi ohjelmani on nyt vihdoin valmis n. 7 kuukauden jälkeen. Tällä kertaa kielenä oli toinen yksinkertainen, mutta uudempi kieli nimeltä CoolBasic.

Koko uusi sovelluksenikin on oikeastaan hyvin yksinkertainen. Eli ohjelmani soittaa jokaista näppäimistön nappulaa kohden jonkin äänen. (Kaikkien äänien luominen ei ollut mitään kovin nopeata puuhaa ja jaksoin tehdä ohjelmaa eteenpäin vain harvoin -siksi tässä meni niin kauan.) Siinä sitten voi yrittää saada jonkinlaista musiikkia aikaan. Mutta lähinnä kyseessä on ihan lelu, ei mikään vakava ohjelma. Ohjelman idea syntyi tutkiessani CoolBasicin ohjetiedostoja, kun huomasin, miten helposti sillä saa näitä ääniä aikaan. Tässä ohjelmassa on sellainen pieni ongelma, että äänien kuulumisessa on pieni selkeä viive. Jollakin muulla ohjelmointikielellä sitä ei kai olisi.

Vaikka ohjelma on hyvin simppeli, ajattelin kirjoittaa ohjeet oman soivan näppiksen ohjelmoimiseen. On se vaan kiva päteä. 🙂


Ohjelmoi oma SOIVA NÄPPIS!

Tämän ohjelman tekemiseen tarvitset netistäladattavan CoolBasic-ohjelmointityökalun ja jonkin ohjelman jolla saat aikaan ääntä. Itse olen käyttänyt äänien tekemiseen Reason-sävellysohjelmaa ja Audacity-äänenkäsittelyohjelmaa, jonka lisäosan avulla saa wav-tiedostot muutettua mp3-tiedostoiksi. Jos omistat mikrofonin, pääset Audacityllä jo aika pitkälle. Jos haluat saada aikaan jonkinlaista tietokonemusiikkia, suosittelisin ilmaista Jeskola Buzz -sävellysohjelmaa. Ja jos haluat ohjelmaan grafiikkaa, voit käyttää vaikka Gimpiä.

Eli lataa netistä, asenna, ja käynnistä CoolBasic. Koodin voi aloittaa määrittelemällä resoluutio ja värisyvyys. Minulla on tässä koodissa sovelluksen leveytenä 713 pikseliä, korkeutena 473 pikseliä ja värisyvyytenä 16. Nämä arvot syntyivät minulla sen mukaan, minkälainen ohjelmaa varten tekemäni ”kuvitus” oli. Muokkaa arvot omalle kuvallesi sopiviksi.

Tämä osa koodia kirjoitetaan siis näin:

SCREEN 713,473,16

Sen jälkeen voidaan ladata grafiikka (kuva), joka on samassa hakemistossa kuin ohjelmatiedosto. Tässä graffa.jpg on tiedosto, joka sijaitsee itse ohjelman kanssa samassa kansiossa ja rivin alussa luodulla graffa-muuttujalla ohjelmassa voidaan kutsua graffa.jpg:tä.

graffa=LoadImage(”graffa.jpg”)

Seuraava koodinpätkä lataa muistiin jonkin äänen. Mp3 on hyvä muoto. äänennimi-kohdan tilalle kuuluu kirjoittaa muuttujan nimi, jolla ohjelmassa kutsutaan rivissä ladattua äänitiedostoa. Ohjelman kanssa samassa hakemistossa oleva tiedoston oikea nimi taas kirjoitetaan kohtaan, jossa lukee tiedostonnimi.mp3. Eli äänennimi-kohdassa voisi lukea vaikka rumpu ja tiedostonnimi.mp3-kohdassa rumpu.mp3.

äänennimi=LoadSound(”tiedostonnimi.mp3”)

(Lataa tässä kohdassa KAIKKI ohjelmassa käyttämäsi äänitiedostot kirjoittamalla ne allekkain, tähän tyyliin: [muuttujien ja tiedostojen nimet ovat tietenkin vapaavalintaisia])

äänennimi2=LoadSound(”tiedostonnimi2.mp3”)
äänennimi3=LoadSound(”tiedostonnimi3.mp3”)

Sitten käynnistetään silmukka, jotta ohjelma ei heti loppuisi, vaan odottaisi komentoja käyttäjältä.

repeat

Sitten vain määritellään millä näppäimellä ladatut äänet saadaan soimaan. Tämä on hyvin tuttu juttu kaikista ohjelmointikielistä – ”jos jotain tapahtuu, niin sitten tapahtuu myös näin”. Eli tässä kohtaa ”jos painetaan näppäimistön näppäintä koodinimeltä 2, soitetaan äänennimi-nimiseksi äsken määritelty ääni.” Näppäimen koodinimi (alempana kuva, jossa näkyy jokaisen näppämistön näppäimen koodinimi) sijoitetaan KeyHit-komennon jälkeisiin sulkeisiin. a ja b ovat tässä kohtaa muuttujia, joilla määritellään äänenpainotus vasemman ja oikean kaiuttimen välillä ja äänenvoimakkuus (niiden käytöstä kerron vielä alempana). Sitten yksi vähän monimutkaisempi juttu. Tässä voitaisiin suoraan kirjoittaa PlaySound tiedostonnimi.mp3, eikä edellistä kohtaa (jossa ladataan äänitiedosto muistiin) tarvittaisi, mutta lyhyet äänet, joita käytetään paljon, kannattaa ladata muistiin. Tässäkin kohdassa kuuluu kirjoittaa kaikki soitettavat äänet peräkkäin.

If KeyHit(2) Then PlaySound äänennimi, a, b

(ja jatketaan näin: [näppäin, KeyHit():n sisältämä numero, on tietenkin vapaasti valittavissa, ja PlaySound:lla soitettavat muuttujat ovat niitä, joihin on aiemmin sijoitettu jokin äänitieodosto])

If KeyHit(3) Then PlaySound äänennimi2, a, b
If KeyHit(4) Then PlaySound äänennimi3, a, b

Sitten piirretään aiemmin ladattu grafiikkatiedosto kirjoittamalla seuraava koodi. 0,0 tarkoittaa, että kuvan vasen yläkulma sijaitsee koordinaateissa, jotka ovat ruudun vasen yläkulma.

DrawImage graffa,0,0

Sitten vielä koodi joka kuuluu periaatteessa jokaiseen ohjelmaan. Tällä saadaan ruudulla näkymään jotakin. Tässä ohjelmassa sitä ei kuitenkaan välttämättä tarvitse, koska se ei millään muotoa perustu grafiikkaan.

DrawScreen

Lopuksi kirjoitetaan koodi, jolla saadaan ohjelma suljettua, kun käyttäjä painaa esc-painiketta.

Until EscapeKey()

Tässä kohtaa sinulla pitäisi olla valmis ohjelma. Onnitteluni! 🙂 Toivottavasti huomasit, miten yksinkertaista tämä on. Tässä vielä kuva, josta näkee millä ”koodinumerolla” tarkoitetaan mitäkin näppäintä.

Ja valmis koodi näyttäisi kutakuinkin tämän kaltaiselta:

SCREEN 713,473,16
graffa=LoadImage(”graffa.jpg”)
äänennimi=LoadSound(”tiedostonnimi.mp3”)
äänennimi2=LoadSound(”tiedostonnimi2.mp3”)
äänennimi3=LoadSound(”tiedostonnimi3.mp3”)

repeat
If KeyHit(2) Then PlaySound äänennimi, a, b
If KeyHit(3) Then PlaySound äänennimi2, a, b
If KeyHit(4) Then PlaySound äänennimi3, a, b

DrawImage graffa,0,0
DrawScreen
Until EscapeKey()

Mutta vielä yksi juttu! Tässä suoraan omasta koodistani poimittu pätkä, jonka avulla ohjelman käyttäjä voi nuolinäppäimillä säätää äänenvoimakkuutta ja sitä, minkä verran ääni painottuu molemman kaiuttimen välillä. Tämä koodi saa aikaan myös ääniä, jotka syntyvät kun ääni on täysin häivytetty tai vain toisesta kaiuttimesta tulee ääntä. KeyHit(208) tarkoittaa alanuolinäppäintä, (200) tarkoittaa ylänuolinäppäintä, (203) vasenta ja (205) oikeata nuolinäppäintä. Eli a (arvot ovat väliltä 0 ja 100) on äänenvoimakkuus ja b (arvot ovat väliltä -100 ja 100) merkitsee miten paljon kustakin kaiuttimesta tulee ääntä. Olen säätänyt, että yhdellä painalluksella arvot muuttuvat 10 ”askeleen” verran ja palautuvat edelliseen lukuun, jos se ylittää tai alittaa kymmenellä CoolBasicin käyttämän arvoasteikon. Omassa koodissani sijoitin tämän heti ohjelmassa aiemmin kirjoitetun ”repeat”-rivin jälkeen.

’Säädetään äänenvoimakkuutta alaspäin
If KeyHit(208) Then a-10

’Erikoisääni jos volume -10 ja samalla tuodaan volume takaisin 0:aan
If a = -10 Then
a = 0
PlaySound einytnh, 100, 0
End If

’Säädetään äänenvoimakkuutta ylöspäin
If KeyHit(200) Then a+10
If a = 110 Then a = 100

’Säädetään ”pania” vasemmalle

If KeyHit(203) Then b-10

’Erikoisääni jos pan -110 ja samalla tuodaan pan takaisin -100:aan

If b = -110 Then
b = -100
PlaySound breakingvasen, 100, -100
End If

’Säädetään ”pania” oikealle

If KeyHit(205) Then b+10

’Erikoisääni jos pan 110 ja samalla tuodaan pan takaisin 100:aan
If b = 110 Then
b = 100
PlaySound tälläkertaam, 100, 100
End If

Ohjelmastani löytyy vielä yksi koodi (joka sijaitsee äänensoittokoodien joukossa), jolla nämä muuttujat (a ja b) saadaan oletusarvoihin. Se näyttää tältä (koodi 211 tarkoittaa deleteä):

If KeyHit(211) Then
a = 100
b = 0
EndIf