Ton mit variabler Frequenz abspielen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von six1 »

Vielleicht mal nach einem alten 8086 umschauen... oder 286er. Die hatten in den großen Gehäusen auch große Lautsprecher
:mrgreen: :mrgreen: :mrgreen:

Ich kannte Anfang der 80er Jahre jemanden, der hat ein Programm geschrieben, um einer Festplatte Töne zu entlocken!

Das Programm hat ungefähr dies getan :
Textausgabe: "Wassereinbruch in der Festplatte"
Festplatte rattert
Textausgabe: "Lenzpumpen werden gestartet"
Festplatte macht "Pumpengeräusche"
Textausgabe: "Festplatte muss gefönt werden"
Festplatte macht "Föngeräusche"
Textausgabe: "Teste Festplatte"
Festplatte rattert
Textausgabe: "Festplatte wieder ok"

Unglaublich, was man mit einer Festplatte für Geräusche machen konnte.... geht ja auch nicht mehr mit SSD :lol:
Gruß, Michael

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ton mit variabler Frequenz abspielen

Beitrag von Mathias »

Auch mit den alten Floppys konnte man so lustige Sachen machen. Das war unter dos so herzlich, weil man direkt auf die Hardware zugreifen konnte. Auch auf den Schirm konnte man lustiges machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Ton mit variabler Frequenz abspielen

Beitrag von fliegermichl »

Ich hab letztens meiner CNC Fräse ein Lied entlocken können :-)

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

Hi!

Bevor hier CNC-Fräsen, Floppies und alte IDE-Festplatten zu Schaden kommen, hab ich mich nach langer Zeit mal wieder in das hervorragende BASS.chm vertieft.

Und meinen ersten "Mini-Synthesizer" mit BASS gebaut.

Und fast stufenlos - wie gewünscht. Der Trackbar hat natürlich Stufen - hier 128.
Aber BASS hilft auch hier:

Die Function BASS_ChannelSlideAttribute kann u.a. zu der gewünschten Frequenz sliden und man kann sogar den Zeitraum angeben, den er benutzen darf, bis er dort ist. Ich habe 100 ms spendiert.

8 Oktaven umfasst der mögliche Frequenzraum, wobei testweise meine Billig-USB-Soundkarte zwischen 6000 und 7000 Hertz anfängt zu spinnen. Was will man für 10.- € verlangen ....

Screenshot und Project anbei. Vorher BASS installieren!

Winni
Dateianhänge
Glissando.zip
(139.09 KiB) 72-mal heruntergeladen
Glissando.png
Glissando.png (10.63 KiB) 1707 mal betrachtet

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von theo »

@Winni: Funzt hier auf Linux. :D
Nicht schlecht, kann ich vielleicht mal brauchen.

Bissel was kann man noch verbessern an der Demo.
Wenn man zweimal auf Play drückt, kann man das Ding mit Stop nicht mehr ausschalten, da das Channel Handle flöten ist.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

Hi!

Ja, quick and dirty!

Ich wollte in der Hauptsache mal wissen, wie das mit der Tongenerierung unter BASS geht.

Deine Fehlermeldung ist richtig: die Button Play und Stop müssen sich gegenseitig enablen/disablen.
Form.caption fehlt auch noch.

Und dann kann man noch die Hüllkurven nach Sägezahn oder Rechteck umändern: Hab ich schon mal für das Alsa-Projekt von Fred vS gemacht. Sinus ist doch recht öde.

Aber Hautsache: Ich weiss jetzt, wie es geht.

Winni

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

Hi!

Hier ist die nächste Version:

* Die Button aktivieren/deaktivieren sich gegenseitig
* Hüllkurven Rechteck und Sägezahn zu Sinus hinzugefügt.

Neue Version anbei.

Winni
Dateianhänge
Glissando_1.zip
(139.51 KiB) 76-mal heruntergeladen

wennerer
Beiträge: 518
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Ton mit variabler Frequenz abspielen

Beitrag von wennerer »

Hi Winni,
cooles Programm. Das spuckt ja Töne aus die klingen wie bei Raumschiff Enterprise :lol: .

Viele Grüße
Bernd

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

Hi!

Danke für die Blumen.

Aber Enterprise - mehr so zu Captain Kirks Zeiten.
Da ist noch viel Luft nach oben ....

Grüße
Winni

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Ton mit variabler Frequenz abspielen

Beitrag von siro »

Hallo Winni,
ich habe das Programmchen grade mal ausprobiert und läuft.
So hat man ein schönes Beispiel.

Rechteck:
Die Frequenzen stimmen um den Faktor 2 nicht
440 Hz sind in Wirklichkeit 220 Hz
unterste Frequenz ist 14 Hz und die oberste Frequenz 3566
Rechteck_440Hz.jpg
Rechteck_440Hz.jpg (86.34 KiB) 1626 mal betrachtet
Beim Sägezahn ebenso wie beim Rechteck.
Saegezahn_440Hz.jpg
Saegezahn_440Hz.jpg (88.67 KiB) 1626 mal betrachtet
Bei Sinus gibts Probleme mit dem Nulldurchgang
und die Frequenz stimmt um Faktor 10 nicht.
Sinus_440aHz.jpg
Sinus_440aHz.jpg (103.75 KiB) 1622 mal betrachtet
..
Aber das soll in keinster Weise als Kritik aufgefasst werden, lediglich als Info.
..

Nachtrag:
const KammertonA = 28160 * 2; // entspricht 440 Hertz=Kammerton a
wenn ich den Wert mit 2 multipliziere, habe ich bei Rechteck exakt 440,0023 Hz
Wo kommt denn dieser Wert her ?
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Ton mit variabler Frequenz abspielen

Beitrag von siro »

Nachtrag:
wenn ich den Wert mit 2 multipliziere, habe ich bei Rechteck exakt 440,0021 Hz gemessen
const KammertonA = 28160 * 2; // entspricht 440 Hertz=Kammerton a
440_Hz.jpg
440_Hz.jpg (18.23 KiB) 1614 mal betrachtet
Wo kommt denn dieser Wert her ?
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

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

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Ton mit variabler Frequenz abspielen

Beitrag von siro »

Hallo Winni,
also Demo ist das ja auch völlig ausreichend.
Die Unit Bass scheint wirklich SEHR flexibel zu sein, die unterstützen wohl sogar ASIO Treiber.
Für Realtime Audio unverzichtbar.

Ich habe früher einige Jahre als Musikinstrumententechniker und dann in der Meßtechnik sowie Medizintechnik gearbeitet,
da bin ich "etwas" überpeninel geworden.... :wink:

Ich hab 2003 mal mit Delphi 3 und dem MMSystem unter Windows mit Waves gespielt und
habe das sogar grade wiedergefunden, aber das lässt sich nicht so ohne weiteres compilieren.

Ich pack das trotzdem mal hier rein, die .exe läuft bei mir noch unter Windows 10 mit Rauschen und Sinus. aber auch nicht einwandfrei :?

Compilieren geht jetzt, aber beim Starten gibts dann Probleme...
WaveOut.zip
(114.99 KiB) 59-mal heruntergeladen
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Ton mit variabler Frequenz abspielen

Beitrag von Winni »

Hi!

Ich hab im zarten Alter von 14 mit Niederfrequenztechnik angefangen. Verzerrer, WahWah-Pedals und Verstärker gebaut. Irgendwann gab's auch nen Oszillographen. Aber vorher hab ich mir meinen ersten FlipFlop-Synthi gebaut. Mit zwei BC107 Transistoren. Kurz bevor die ersten Chips kamen.

Deshalb weiß ich ziemlich genau, auf was das Ohr reagiert: auf Frequenzabweichungen. Was bei den Hüllkurven los ist - da ist das Ohr recht unempfindlich. Es sei denn du jagst eine engen Bandpass über das Klangspektrum: WahWah.

Synthetisierung von Klängen ist immer noch voller Rätsel. Der Klang von EL 34 Röhren in der Gegentaktendstufe von Gitarrenverstärkern ist immer noch unerreicht. Deshalb gibt's diese Röhren überhaupt noch . Der Klang ist nicht mit Silizium oder Germanium zu erreichnen.

Keep on rockin'

Winni

Antworten