Kirjautuminen

Haku

Tehtävät

Koodit: QB: Moniäänistä piipperimusiikkia taustalla

Kirjoittaja: Antti Laaksonen

Kirjoitettu: 06.12.2002 – 06.12.2002

Tagit: ääni, koodi näytille, vinkki

Tämän koodin avulla saat QBasic-ohjelmasi taustalle soimaan jopa "kolmiäänistä" piipperimusiikkia. Musiikki määritellään koodin alussa kolmena kanavana, käytössä on seuraavat nuotit:

c=c, C=cis, d=d, D=dis, e=e, E=f, f=f, F=fis, g=g, G=gis, a=a, A=ais (b), b=h, B=c

Pienellä kirjoitettu vastaa siis tavallista nuottia ja iso kirjain tuottaa sille ylennyksen. Ensimmäinen merkki on nuotti ja toinen oktaavi (0-6). Tauot määritetään jättämällä tyhjää nuottien välille, PLAY-komennosta tuttuja l- ja p-merkintöjä ei näin ollen ole käytössä.

Kolmen äänen "yhtäaikainen" soittaminen perustuu siihen, että äänet soitetaan hyvin lähellä toisiaan - oikeastihan piipperillä on mahdollista soittaa vain yksi ääni kerrallaan. Soita-aliohjelmakutsu on laitettava jokaiseen silmukkaan, missä pelin/ohjelman aikana ollaan, jottei musiikki katkea.

Esimerkkikappaleena on jouluteemaan sopiva "Kulkuset" - tuobin pyynnöstä ;)

DECLARE SUB Soita ()
DIM SHARED k1 AS STRING, k2 AS STRING, k3 AS STRING
DIM SHARED kohta AS INTEGER, nuotit(256) AS STRING * 2

'taulukko nuottien nimelle
nuotit(ASC("c")) = "c": nuotit(ASC("d")) = "d": nuotit(ASC("e")) = "e"
nuotit(ASC("f")) = "f": nuotit(ASC("g")) = "g": nuotit(ASC("a")) = "a"
nuotit(ASC("b")) = "b": nuotit(ASC("C")) = "c+": nuotit(ASC("D")) = "d+"
nuotit(ASC("E")) = "f": nuotit(ASC("F")) = "f+": nuotit(ASC("G")) = "g+"
nuotit(ASC("A")) = "b-": nuotit(ASC("B")) = "c"

'Esimerkkikappale "Kulkuset"
k1 = "g3  g3  g3  c4  c4  c4    c4c4  b3  b3  b3  d4  d4  c4  a3  g3      "
k2 = "b2  c3  d3  e3  e3  e3    e3g3  g3  e3  e3  a3  a3  d3  d3  b2      "
k3 = "g1  a1  b1  c1  g1  e1  g1  g1  d2  b1  d2  a1  c2  d2  d1  g1      "

k1 = k1 + "d3      d3  b3  a3  g3  d3          D3  e3  c4  b3  a3  e3        "
k2 = k2 + "d2      b2  d3  c3  b2  g2          g2  c3  e3  d3  c3  a2        "
k3 = k3 + "d1      g1  d2  b1  d2  g1  d1  e1  G1  a1  e2  e1  a1  a1  e2  c2"

k1 = k1 + "  f3  F3  c4  b3  a3  d4          b3  a3  e3  F3  g3  a3          d3"
k2 = k2 + "  a2  d3  d3  d3  d3  g3          d3  C3  C3  C3  C3  c3          c3"
k3 = k3 + "  e2  d1  a1  F1  a1  g1  d2  b1  d2  a1  e2  C2  e2  d2  c2  b1  a1"

k1 = k1 + "  d3  b3  a3  g3  d3          D3  e3  c4  b3  a3  e3        "
k2 = k2 + "  b2  d3  c3  b2  g2          g2  c3  e3  d3  c3  a2        "
k3 = k3 + "  g1  d2  b1  d2  g1  d1  e1  G1  a1  e2  e1  a1  a1  e2  c2"

k1 = k1 + "  f3  F3  c4  b3  a3  d4  d4  d4  d4  e4  d4  c4  a3  g3      d4"
k2 = k2 + "  a2  d3  d3  d3  d3  g3  g3  g3  g3  a3  a3  d3  d3  b2      d3"
k3 = k3 + "  e2  d1  a1  F1  a1  g1  f1  e1  e1  a1  a1  d1  d1  g1      d1"

k1 = k1 + "      b3  b3  b3      b3  b3  b3      b3  d4  g3    a3b3          b3  "
k2 = k2 + "      g3  g3  g3      g3  g3  g3      g3  g3  c3    c3g3          g1  "
k3 = k3 + "      g1  d2  d1  d2  g1  d2  d1  d2  g1  d2  d1  d2  g1  g1  a1  b1  "

k1 = k1 + "c4  c4  c4    c4c4  b3  b3    b3b3  a3  a3  b3  a3      d2      "
k2 = k2 + "e3  e3  e3    e3g3  g3  g3    g3C3  C3  C3  C3  d3      F3      "
k3 = k3 + "c1  g1  e1  g1  g1  d2  b1  d2  a1  e2  C2  e2  d2  c2  b1  a1  "

k1 = k1 + "b3  b3  b3      b3  b3  b3      b3  d4  g3    a3b3          b3  "
k2 = k2 + "g3  g3  g3      g3  g3  g3      g3  g3  c3    c3g3          g1  "
k3 = k3 + "g1  d2  d1  d2  g1  d2  d1  d2  g1  d2  d1  d2  g1  g1  a1  b1  "

k1 = k1 + "c4  c4  c4    c4c4  b3  b3    b3d4  d4  c4  a3  g3              "
k2 = k2 + "e3  e3  e3    e3g3  g3  g3    g3d3  d3  e3  F3  g3              "
k3 = k3 + "c1  g1  e1  g1  g1  d2  b1  d2  d2  c2  b1  a1  g1              "

k1 = k1 + "e4  e4  e4  d4  c4      d4  e4  d4  d4  d4  g3  b3              "
k2 = k2 + "g3  g3  g3  f3  e3      f3  g3  g3  g3  g3  b2  d3              "
k3 = k3 + "c1  g1  e1  g1  c1  g1  e1  g1  g1  d2  b1  d2  g1  d2  b1  d2  "

k1 = k1 + "b3  b3  b3  g3  e3      F3  g3  F3  F3  g3  g3  a3              "
k2 = k2 + "C3  C3  C3  C3  a2      a2  a2  d3  d3  d3  d3  d3              "
k3 = k3 + "a1  e2  C2  e2  a1  e2  C2  e2  d1  d1  e1  e1  d2  c2  b1  a1  "

k1 = k1 + "b3  b3  b3      b3  b3  b3      b3  d4  g3    a3b3          b3  "
k2 = k2 + "g3  g3  g3      g3  g3  g3      g3  g3  c3    c3g3          g1  "
k3 = k3 + "g1  d2  d1  d2  g1  d2  d1  d2  g1  d2  d1  d2  g1  g1  a1  b1  "

k1 = k1 + "c4  c4  c4    c4c4  b3  b3    b3d4  d4  c4  a3  g3              "
k2 = k2 + "e3  e3  e3    e3g3  g3  g3    g3d3  d3  e3  F3  g3              "
k3 = k3 + "c1  g1  e1  g1  g1  d2  b1  d2  d2  c2  b1  a1  g1              "

'alkuvalmistelut
PLAY "t170" 'tempo
PLAY "l64"
kohta = -1

SCREEN 13
'Soitetaan kappaletta, kunnes painetaan Esc
DO
  Soita
  'köyhän miehen lumisade
  CIRCLE (RND * 320, RND * 200), RND * 50, 25 + RND * 5
LOOP UNTIL INKEY$ = CHR$(27)

SUB Soita
  DIM nuotti AS STRING, oktaavi AS STRING
  IF PLAY(0) = 0 THEN
    kohta = kohta + 2
    IF kohta > LEN(k1) THEN kohta = 1

    PLAY "p64"

    'kanava 3
    nuotti = MID$(k3, kohta, 1)
    oktaavi = MID$(k3, kohta + 1, 1)
    IF oktaavi <> " " THEN
      PLAY "mbo" + oktaavi + "mn" + nuotit(ASC(nuotti))
    ELSE
      PLAY "p64"
    END IF

    'kanava 1
    nuotti = MID$(k1, kohta, 1)
    oktaavi = MID$(k1, kohta + 1, 1)
    IF oktaavi <> " " THEN
      PLAY "mbo" + oktaavi + "ml" + nuotit(ASC(nuotti))
    ELSE
      PLAY "p64"
    END IF

    'kanava 2
    nuotti = MID$(k2, kohta, 1)
    oktaavi = MID$(k2, kohta + 1, 1)
    IF oktaavi <> " " THEN
      PLAY "mbo" + oktaavi + "mn" + nuotit(ASC(nuotti))
    ELSE
      PLAY "p64"
    END IF

    PLAY "p64"

  END IF
END SUB

Kommentit

Gevil [07.12.2002 13:59:22]

#

Wau!

Gevil [07.12.2002 14:04:23]

#

Musiikkimiehiä, musiikkimiehiä. :D

snakari [07.12.2002 14:26:02]

#

kerrankin hyvä vinkki

KimmoKM [07.12.2002 14:28:52]

#

Oikein hyvä.

thefox [07.12.2002 15:23:58]

#

Ihan kivasti piipittelee :) Joku kun vielä väsää jonkinlaisen trackerin niin.. :)

tomaattigeeni [07.12.2002 17:22:59]

#

harmi ettei tossa windowskoneesa oo piipperinjohto kiinni emossa

anomizer [07.12.2002 20:41:04]

#

!!!!!!!!

Sose [07.12.2002 20:55:20]

#

Eli pelkkä 'IF PLAY(0) = 0' riittää tarkistamaan soittaako PLAY jotain?
~Sose~

Tumpi [07.12.2002 22:50:54]

#

hieno

kala [08.12.2002 01:10:32]

#

Ei hullumpi esimerkki piipperimusasoittimesta basicille! Vaikka itse q(uick)basic piipperimusineen jakaikkimuusinnepäin olivat jo 10 vuotta sitten lahoa tavaraa.

Gwaur [08.12.2002 06:16:08]

#

lumisade on just cool :D mutta hyvää kuullostaa biisikin :)

tuobbi-89 [09.12.2002 09:22:57]

#

Joo, lumisade on laadukas isolla L:llä. ;) Biisi on myös laadukas, kiitos vain Antti, kun toteutit pyyntöni. :)

InvalidCo [07.04.2003 21:21:55]

#

Mitä "Köyhän miehen lumisade" tarkoittaa???

-The PC-Master-

Jesoft [08.04.2003 17:09:19]

#

Jos kerran oot PC-Master niin sano ite

polestar [22.08.2003 18:49:34]

#

Jeh.. "Koyhän miehen lumisade" = vaatimattomasti toteutettu lumisateelta näyttävä koodipätkä, QBasicilla ;) Milläköhän kielellä ne matopelit jotka olivat Kilpailu sivulla on tehty? Ainakin ne olivat laadukkaita ja vissiin kaikissa oli taustamusiikit. Yhdessä ne musiikit avattiin .mid tiedostosta. Onnistuukohan tämä QBasicilla?

tejeez [31.08.2003 09:13:06]

#

Voi onnistua. QB:llä voi soittaa muutakin kuin piipperimusiikkia :)

Meitsi [31.08.2003 18:22:33]

#

Loistava! Lisää tämmöstä!! Eikä toi lumisadekaan ollu niin "köyhän" miehen.

Shogun [26.09.2003 13:30:59]

#

Ihan hianon kuulonen/näköinen...

Fisher [18.04.2004 17:17:45]

#

hieno tausta

water flea [27.06.2004 12:44:25]

#

Ton lumisateen olisin osannut tehdä 8-vuotiaana!
Tässä on enemmänkin ideana toi kulkustelu.

xmetal [21.12.2004 19:44:55]

#

miten saan kopioitua tuon Qbasicille ku ei millään onnistu?

siansaksamies [30.07.2005 16:15:46]

#

MIDI:n toistoon sopivat koodinpätkät löytyvät varmaankin osoitteesta www.qbasic.com .

Puhveli [17.09.2005 15:20:30]

#

Huh, en ole vieläkään lakannu nauramasta. Aivan uskomaton vinkki, mahtava biisi ja upea 'köyhän miehen lumisade'. :D Kiitos, tälle löytyy kyllä käyttöä.

Juhko [14.08.2006 20:46:19]

#

Hyvä ohjelma. :)

Codeprofile [08.12.2006 23:01:21]

#

Mulla ei kuulu mitään ääntä jostain syystä. Mulla on QBasic 7.1. Toimiiko se sitten vanhemmalla QBasicilla??

moptim [28.01.2007 08:01:03]

#

Onkohan herralla piipperi kiinni koneessa? Ja lumisade on upea.

Dude [05.08.2007 15:34:23]

#

Codeprofile kirjoitti:

Mulla ei kuulu mitään ääntä jostain syystä. Mulla on QBasic 7.1. Toimiiko se sitten vanhemmalla QBasicilla??

se toimii kyllä sillä ainaki mulla
edit: Siis 7.ykköses.

tomaattigeeni kirjoitti:

harmi ettei tossa windowskoneesa oo piipperinjohto kiinni emossa

Voit sä yrittää saara piipperin kuulumaan äänikortin kautta BIOSsista. Mulla yhyres konees piipperi kuuluu Sound Blaster(16)in kautta.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta