Olen tässä kikkaillut ja testaillut Valtzu:n tekemää äänifunktiota ja lisäilin siihen parit jutut vielä, joista on hyötyä niille, jotka ovat halukkaita tekemään jonninsortin musasoftan!
Jos jollain on jotain kivaa lisättävää tähän, lähettäkää toki uusi koodinpätkä viestinne mukana.
Koodia pukkaa, koodia pukkaa:
Code: Select all
// --- Äänifunktioita by Valtzu (2007) --- //
// --- Taajuudet + nuotit by misthema (2010) --- //
/////////////////
// //
// Esimerkki //
// //
/////////////////
For i=0 To 84
sndTMP = SinWave(GetFreq(i),1,90)
Print "note: "+GetNote(i+12)+", freq: "+GetFreq(i)
PlaySound sndTMP // Soitetaan ääni
Wait 250
DeleteSound sndTMP // Ääni pois muistista
Next i
WaitKey
// --- Funktiot --- //
// Ääni tietyltä taajuudelta
Function SinWave(taajuus#, pituus#, voimakkuus#=100)
fq=44100
length=pituus*fq
f=OpenToWrite("tmpwav.tmp")
WriteInt f,$52494646
WriteInt f,0
WriteInt f,$57415645
WriteInt f,$666d7420
WriteInt f,16
WriteShort f,1
WriteShort f,1
WriteInt f,fq
WriteInt f,fq*2
WriteShort f,2
WriteShort f,16
WriteInt f,$64617461
WriteInt f,length*2
vokke = voimakkuus/100*32767
For i = 0 To length-1
WriteShort f,Sin(360.0*taajuus/fq*(i Mod fq))*vokke
Next i
fs=FileOffset(f)-8
SeekFile f,4
WriteInt f,fs
CloseFile f
tmpsnd=LoadSound("tmpwav.tmp")
'DeleteFile "tmpwav.tmp"
Return tmpsnd
End Function
// Turha 'raise-to-power' funktio
Function pow(a#,b#)
Return a^b
EndFunction
// Haetaan nuotti
Function GetNote(note)
Select note
Case 254
Return ""
Case 255
Return "---"
Default
Return Trim(Mid("C-C#D-D#E-F-F#G-G#A-A#B-",(note Mod 12)*2+1,2))+""+(note/12)
EndSelect
EndFunction
Function GetFreq(note)
Return 32.703 * pow(2.0, note/12.0)
EndFunction
EDIT:
Pientä päivitystä.