26 Ağustos 2020 Çarşamba

QuickBasic - 24: Ses, Müzik

Yayınlama: 26 Ağustos 2020

BEEP

Sistem hoparlöründen bip sesi çalar. En basit ses çalma komutudur. Parametresi yoktur.

SOUND

Kullanımı:
SOUND frekans, süre
Belirtilen frekanstaki sesi süre kadar çalar.
frekans: Sıklık, saniyedeki salınım sayısı. 37-32767 arası bir değer alabilir. Birimi Hertz(Hz)dir.
süre: Sesin süresini belirler. 0-65535 arası bir değer alabilir. Birimi saat tikidir. 1 sn = 18.2 tik

Örnek 1:
' SOUND Örnek
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
FOR n = 1 TO 5
    SOUND 1000, 3 '1 KHz, 3/18 sn
    PRINT CHR$(254);
    SLEEP 1
NEXT
PRINT CHR$(219)
SOUND 1000, 10 '1 KHz, 10/18 sn
Örnek 2:
' SOUND Örnek
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS : COLOR 10
FOR n = 40 TO 1000 STEP 20
	SOUND n, n / 500
	LOCATE 12, 1
	PRINT STRING$(n / 20, "X")
NEXT
SLEEP 1
COLOR 12
FOR n = 1000 TO 40 STEP -20
	SOUND n, n / 500
	CLS : LOCATE 12, 1
	PRINT STRING$(n / 20, "X")
NEXT

PLAY

Müzik notalarını çalar.

Kullanımı:
PLAY komutdizesi
komutdizesi: Bir veya daha fazla müzik komutu içeren bir dize ifadesidir. PLAY komutu, müzik makro dilini tek bir dizeye yerleştirmesi açısından DRAW'a benzer bir yapıyı kullanır.

Oktav ve Ton komutları:

Oktav:

On : Mevcut oktavı ayarlar. 7 oktav vardır. n = 0-6.
> : Oktavı 1 arttırır. En fazla: 6
< : Oktavı 1 azaltır. En az: 0

Ton:

A-G: A-G aralığındaki notayı çalar. Nota adları İngiliz sistemine göredir.

Türkiye'de kullanılan karşılıkları:

C : Do
D : Re
E : Mi
F : Fa
G : Sol
A : La
B : Si

Nota adları yanına eklenecek simgeler:

Diyez için: # veya +
Bemol için: -

Nn : n notasını çalar. 7 oktavda 84 nota vardır. n=0-84.

Örnek 1:
nota$ = "CDEFGAB"
FOR n = 0 TO 6
    PLAY "O" + STR$(n) + nota$
NEXT
Süre ve Tempo komutları:

Süre:
Ln : Herbir notanın çalma uzunluğunu ayarlar. L1 tam, L4 çeyrek(1/4)uzunlukta notadır. n=1-64.
Uzunluk, sadece bir nota için olacaksa nota ve uzunluk şeklide girilebilir.

Örneğin, A16, L16A'ya eşdeğerdir.

. (Nokta) : Notayı L veya T ile belirtilen sürenin 1.5 katı süre çalar.
Örneğin: PLAY "L1C."

Örnek 2:
DEFINT A-Z
nota$ = "CDEFGAB"
PLAY "L24"
FOR n = 0 TO 6
    PLAY "O" + STR$(n)
    PLAY nota$
NEXT
Örnek 3:
' Daha dün annemizin kollarında
n1$ = "CCGGAAG4FFEEDDC4"
n2$ = "GGFFEEDP8"
PLAY "L8"
PLAY n1$ + n1$ + n2$ + n2$
MN : Müziği normale ayarlar. Notalar uzunluğun(L) 7/8'i kadar çalar.
ML : Müziği legato'ya ayarlar. Notalar L ile belirtildiği gibi çalar.
MS : Müziği staccato'ya ayarlar. Notalar uzunluğun(L) 3/4'ü kadar çalar.

Tempo:

Pn : Ln deki n nota süresi gibi sessizlik ayarlar.
Tn : Müzik çalma temposunu ayarlar. Bir dakikada L4 müzik notasının kaç tanesini çalınacağı ayarlanır. 32-255 arası bir değer alır. Normali 120'dir.

Ön / arkaplan İşlemleri:

MF : Müziği ve SES'i ön planda çalışacak şekilde ayarlar. Yani, sonraki her nota veya ses, önceki nota veya ses bitene kadar başlamaz. Bu varsayılan ayardır.

MB : Müzik ve ses arka planda çalışacak şekilde ayarlar. Yani, her nota veya ses bir arabelleğe yerleştirilerek, nota veya ses arka planda çalarken BASIC programı yürütülmeye devam eder.
Arka planda aynı anda çalınabilecek maksimum nota sayısı 32'dir.

Değişken kullanımı:

"X" + VARPTR$(stringdeğişken) : Belirtilen değişken içeriğini çalar.

Örnek 4:
a$ = "cde"
PLAY "X" + VARPTR$(a$)
Örnek 5:
'Beethoven un 5. senfonisinin ilk 5 notasını çalar
LISTEN$ = "T180 o2 P2 P8 L8 GGG L2 E-"
FATE$ = "P24 P8 L8 FFF L2 D"
PLAY LISTEN$ + FATE$
Örnek 6:
'İstiklal Marşı
PLAY "L4 o2"
PLAY "<B>EFGD#8. F16E2. EAB>C8. <B16G#8.B16A2."
PLAY "B8A#8 B8FF2A16G8. D#16 E8. F16 G8. A16 B8.>C16 D8.E16D"
PLAY "<D8 C#8 D8 BAG2.<B8 A#8 B8 >F<B>B8. A16 G8F8G8E"
PLAY ">E2D16C8<B16 A8G16 F8E16B<B>E2."

' Çanakkale içinde
PLAY "L8 P8 AAA4AGGA- GFEF4 EFGFA# GFED3 CEFG AF3 EF16G16EDD2 P8"

'Uzun ince bir yoldayım
PLAY "o2 L8"
PLAY "P4 FGG4 F16E16 DFE4 DD4D4"
PLAY "AGAFG4 F16E16DFE4DD4D4"
PLAY "P4 B>CC<B>C4C<B4A>C<BB4"
PLAY ">C<A4GGAA4A4 GFAGG4"
PLAY "G4F16E16 DGEF4F4 EDF E4.E4DCEDD4D1"

ON PLAY(n)

Arka plan modunda müzik komutları önce tampon belleğe aktarılır ve oradan sırasıyla çalınır.
Bu sırada basic komutları yürütülmeye devam eder. Tampon bellek sınırı 32'dir.

ON PLAY(n) komutu, arka plan tampon belleğindeki komut sayısı n'nin bir altına düştüğünde, komut yürütme adımını belirtilen alt rutine gönderen bir olay yakalama durumunu oluşturur.

Aşağıdaki Örnek 1'e bakınız.

PLAY ON, PLAY STOP, PLAY OFF

PLAY ON: ON PLAY(n) işlevi etkinleştirir.
PLAY OFF: ON PLAY(n) işlevi devre dışı bırakılır.
PLAY STOP: ON PLAY(n) işlevini durdurur ancak PLAY ON ile tekrar işlev etkinleştirilebilir.

PLAY(n)

Arka plan modunda çalınmak üzere tamponda bekleyen müzik komutu sayısını verir.
n herhangi bir integer sayı olabilir önemi yoktur. Sonucu etkilemez. Önplan modunda PLAY(0) fonksiyon sonucu 0'dır.

Örnek 1:
' PLAY Örnek
' © 2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
'müzik tamponu 2 ye düştüğünde alt rutine git
ON PLAY(3) GOSUB ArkaplandaCal
PLAY ON

muzik$ = "L8 EEFGGFEDCCEEED12D4"
PLAY "MB" + muzik$ 'arkaplanda müzik çal
PRINT "D  : Durakla"
PRINT "C  : Çal"
PRINT "B  : Bitir"
PRINT "ESC: Çıkış"
DO
    A$ = UCASE$(INKEY$)
    SELECT CASE A$
        CASE "D": PLAY STOP 'Durakla
        CASE "C": PLAY ON 'Çal
        CASE "B": PLAY OFF 'Kapat
        CASE CHR$(27): EXIT DO
    END SELECT
    LOCATE 7, 1
    PRINT "Tamponda kalan müzik komutu sayısı:"; PLAY(0)
    PRINT A$
LOOP
PLAY "mb o1 bagfedc2"
END

ArkaplandaCal:
    o% = o% + 1 'oktav
    IF o% = 7 THEN o% = 0
    s% = s% + 1 'sayı
    LOCATE 5, 1
    PRINT "Müzik arkaplanda "; s%; " defa çalındı.";
    PRINT "Oktav="; o%
    PLAY "MB o" + STR$(o%) + muzik$
RETURN


Önceki Bölüm: 23: Fare (mouse) kullanımı-4 Sonraki Bölüm: 25: Klavye kullanımı

Hiç yorum yok:

Yorum Gönder