Falls irgendjemand dran interessiert ist.
Der Sourcecode ist vielleicht etwas schwer zu verstehen
Falls es Fragen gibt einfach an mich wenden.
Dieser Code gibt als Output nur Rohdaten aus, Format ist Mono bei 44100 Hz, signiertert, 16-Bit PCM.
Der Sourcecode ist vielleicht etwas schwer zu verstehen
Falls es Fragen gibt einfach an mich wenden.
Dieser Code gibt als Output nur Rohdaten aus, Format ist Mono bei 44100 Hz, signiertert, 16-Bit PCM.
Code (glbasic) Select
CountX = 0
CountY = 0
DIM Count[16]
DIM CountZ[16]
SampleRate = 44100
NumInstruments = 2
Samples = 0
// Für Noten und erzeugung des Tones
DIM Volume[8192][16]
DIM Frequency[8192][16]
DIM Length[8192][16]
DIM Volume[8192][16]
DIM Note[120]
DIM CurrentLength[16]
DIM TotalLength[16]
// Für die Frequenz Modulations Synthese
DIM FMS[16]
DIM FMFrequency[16]
DIM FMFineTune[16]
DIM FMShift[16]
DIM FMVolume[16]
DIM Sample[16]
// Noten, Notenlänge und Lautstärke definieren
Frequency[0][0] = 29
Frequency[1][0] = 32
Frequency[2][0] = 34
Frequency[3][0] = 36
Frequency[4][0] = 37
Frequency[5][0] = 41
Frequency[6][0] = 34
Frequency[7][0] = 41
Frequency[8][0] = 46
Frequency[9][0] = 48
Frequency[10][0] = 49
Frequency[11][0] = 46
Frequency[12][0] = 48
Frequency[13][0] = 44
Frequency[14][0] = 41
Frequency[15][0] = 34
Frequency[16][0] = 36
Frequency[17][0] = 37
Frequency[18][0] = 41
Frequency[19][0] = 34
Frequency[20][0] = 33
Frequency[21][0] = 34
Frequency[22][0] = 36
Frequency[23][0] = 37
Frequency[24][0] = 41
Frequency[25][0] = 37
Frequency[26][0] = 36
Frequency[27][0] = 34
Frequency[28][0] = 36
Frequency[29][0] = 37
Frequency[30][0] = 39
Frequency[31][0] = 41
Frequency[32][0] = 44
Frequency[33][0] = 46
Frequency[0][1] = 25
Frequency[1][1] = 28
Frequency[2][1] = 30
Frequency[3][1] = 32
Frequency[4][1] = 34
Frequency[5][1] = 37
Frequency[6][1] = 29
Frequency[7][1] = 37
Frequency[8][1] = 41
Frequency[9][1] = 41
Frequency[10][1] = 41
Frequency[11][1] = 37
Frequency[12][1] = 39
Frequency[13][1] = 36
Frequency[14][1] = 33
Frequency[15][1] = 30
Frequency[16][1] = 32
Frequency[17][1] = 34
Frequency[18][1] = 36
Frequency[19][1] = 25
Frequency[20][1] = 24
Frequency[21][1] = 25
Frequency[22][1] = 27
Frequency[23][1] = 29
Frequency[24][1] = 34
Frequency[25][1] = 29
Frequency[26][1] = 27
Frequency[27][1] = 25
Frequency[28][1] = 27
Frequency[29][1] = 29
Frequency[30][1] = 34
Frequency[31][1] = 36
Frequency[32][1] = 39
Frequency[33][1] = 41
Frequency[0][2] = 24
Frequency[1][2] = 18
Frequency[2][2] = 25
Frequency[3][2] = 18
Frequency[4][2] = 25
Frequency[5][2] = 20
Frequency[6][2] = 27
Frequency[7][2] = 20
Frequency[8][2] = 27
Frequency[9][2] = 22
Frequency[10][2] = 29
Frequency[11][2] = 22
Frequency[12][2] = 29
Frequency[13][2] = 22
Frequency[14][2] = 29
Frequency[15][2] = 22
Frequency[16][2] = 29
Frequency[17][2] = 18
Frequency[18][2] = 25
Frequency[19][2] = 18
Frequency[20][2] = 25
Frequency[21][2] = 20
Frequency[22][2] = 27
Frequency[23][2] = 20
Frequency[24][2] = 27
Frequency[25][2] = 17
Frequency[26][2] = 24
Frequency[27][2] = 17
Frequency[28][2] = 24
Frequency[29][2] = 17
Frequency[30][2] = 24
Frequency[31][2] = 17
Frequency[32][2] = 24
Frequency[33][2] = 15
Frequency[34][2] = 22
Frequency[35][2] = 15
Frequency[36][2] = 22
Frequency[37][2] = 17
Frequency[38][2] = 24
Frequency[39][2] = 17
Frequency[40][2] = 24
Frequency[41][2] = 18
Frequency[42][2] = 25
Frequency[43][2] = 18
Frequency[44][2] = 25
Frequency[45][2] = 17
Frequency[46][2] = 24
Frequency[47][2] = 17
Frequency[48][2] = 24
Frequency[49][2] = 18
Frequency[50][2] = 25
Frequency[51][2] = 18
Frequency[52][2] = 25
Frequency[53][2] = 20
Frequency[54][2] = 27
Frequency[55][2] = 20
Frequency[56][2] = 27
Frequency[57][2] = 22
Frequency[58][2] = 29
Frequency[59][2] = 24
Frequency[60][2] = 31
Frequency[61][2] = 26
Frequency[62][2] = 34
Frequency[63][2] = 38
Frequency[64][2] = 41
FOR CountY = 0 TO 1
Length[0][CountY] = 2
Length[1][CountY] = 2
Length[2][CountY] = 8
Length[3][CountY] = 2
Length[4][CountY] = 2
Length[5][CountY] = 4
Length[6][CountY] = 10
Length[7][CountY] = 2
Length[8][CountY] = 2
Length[9][CountY] = 2
Length[10][CountY] = 4
Length[11][CountY] = 4
Length[12][CountY] = 4
Length[13][CountY] = 4
Length[14][CountY] = 16
Length[15][CountY] = 8
Length[16][CountY] = 2
Length[17][CountY] = 2
Length[18][CountY] = 4
Length[19][CountY] = 8
Length[20][CountY] = 8
Length[21][CountY] = 2
Length[22][CountY] = 2
Length[23][CountY] = 2
Length[24][CountY] = 2
Length[25][CountY] = 2
Length[26][CountY] = 2
Length[27][CountY] = 2
Length[28][CountY] = 2
Length[29][CountY] = 2
Length[30][CountY] = 2
Length[31][CountY] = 2
Length[32][CountY] = 2
Length[33][CountY] = 8
NEXT
FOR CountX = 1 TO 64
Length[CountX][2] = 2
Volume[CountX][2] = 20000
NEXT
Length[0][2] = 4
Volume[0][2] = 0
FOR Count = 0 TO 33
FOR CountY = 0 TO 1
Volume[Count][CountY] = 20000
NEXT
NEXT
// Notenfrequenz
Note[0] = 27.5
FOR Count = 1 TO 119
Note[Count] = 1.059463094359 * Note[Count-1]
NEXT
// Für die Modulationssynthese: Frequenz, Phasenverschiebung und Lautstärke
FMFrequency[0] = 24
FMFrequency[1] = 12
FMFrequency[2] = 0
FMShift[0] = 0
FMShift[1] = 50
FMShift[2] = 0
FMVolume[0] = 1
FMVolume[1] = 1
FMVolume[2] = 0.5
FOR CountY = 0 TO 15
FOR CountX = 0 TO 8191
INC TotalLength[CountY], Length[CountX][CountY] * 4410
NEXT
NEXT
IF OPENFILE(1, "Output.wav", FALSE) // Save output
// Synthese, speicherung der Noten
CountX = 0
CountY = 0
WHILE TRUE
FOR CountY = 0 TO NumInstruments
IF Count[CountY] <> Length[CountZ[CountY]][CountY] * 4410
INC Count[CountY], 1
INC CurrentLength[CountY], 1
FMS[0] = (SIN(360/SampleRate*Count[CountY]*Note[Frequency[CountZ[CountY]][CountY]+FMFrequency[0]]+FMShift[0])*Volume[CountZ[CountY]][CountY]*FMVolume[0])
FMS[1] = (SIN(360/SampleRate*Count[CountY]*Note[Frequency[CountZ[CountY]][CountY]+FMFrequency[1]]+FMShift[1])*Volume[CountZ[CountY]][CountY]*FMVolume[1])
FMS[2] = SIN(360/SampleRate*Count[CountY]*Note[Frequency[CountZ[CountY]][CountY]+FMFrequency[2]]+FMShift[2])
IF FMS[2] >= 0
FMS[2] = (1*Volume[CountZ[CountY]][CountY]*FMVolume[2])
ELSE
FMS[2] = (0*Volume[CountZ[CountY]][CountY]*FMVolume[2])
ENDIF
Sample[CountY] = (FMS[0]+FMS[1]+FMS[2])/3
ELSE
Count[CountY] = 0
IF CurrentLength[CountY] = TotalLength[CountY]
BREAK
ELSE
INC CountZ[CountY], 1
ENDIF
ENDIF
NEXT
WRITEWORD 1, (Sample[0]+Sample[1]+Sample[2])/3
WEND
CLOSEFILE 1
ENDIF