Hallo!
Wie gesagt: Bei der Generierung von Sound bin ich bei BASS auf auf Neuland, während ich Abspielen von Files, Stream und CD sowie recording schon lange mit BASS mache.
Ich hab stur das Beispiel aus der BASS.chm genommen und von C nach Pascal gewandelt:
------------------------------------
Example
Create a 440 Hz sine wave sample.
Code: Alles auswählen
HSAMPLE sample = BASS_SampleCreate(256, 28160, 1, 1, BASS_SAMPLE_LOOP | BASS_SAMPLE_OVER_POS); // create sample
short data[128]; // data buffer
int a;
for (a = 0; a < 128; a++)
data[a] = (short)(32767.0 * sin(a * 6.283185 / 64)); // sine wave
BASS_SampleSetData(sample, data); // set the sample's data
------------------------------------
Ergänzend ist zu sagen, dass 28160 = 16 * 440 ist.
Der Faktor 16 taucht mehrfach bei der Sound-Generierung auf - z.B. bei der Zuweisung an data[a]; dort allerdings als Divisor.
Entweder meine Fähigkeiten in C reichen nicht aus, oder die Doku enthält einen Fehler.
Winni
PS.: Wenn die Frequenz als Dword übergeben wird, kann es schon sein, dass es Fehler hinterm Komma geben kann. Aber das höre nicht einmal ich, der seinerzeit immer alle Instrumente in der Band stimmen musste - ohne Gerätschaften. Die gab es noch nicht und wenig später waren sie sauteuer. Also: Alles rein nach Ohr.
PS2.: Auf den Nulldurchgang-Fehler bei Sinus habe ich keinen Einfluss. Das macht alles der Parameter
BASS_SAMPLE_LOOP bei
BASS_SampleCreate. Wird man aber auch nicht hören.
PS3.: Die drei verschiedenen Hüllkurven haben nix mit der Frequenz zu tun. Die wird außerhalb dieser Daten erzeugt.
Allerdings - zur Erinnerung:
Sinus hat keinelei Obertöne
Recheck enthält alle ungeraden Obertöne
Sägezahn enthält alle Obertöne