Ton mit variabler Frequenz abspielen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
USchoch
Beiträge: 26
Registriert: Do 16. Mär 2017, 14:01

Ton mit variabler Frequenz abspielen

Beitrag von USchoch »

Hallo

Ich möchte in einer Lazurus-Anwendung einen Ton abspielen, z.B. 10 sec lang. Während dem Abspielen möchte ich die Frequenz mit einem Scrollbar verändern können. Gibt es eine Funktion, die das kann?

Gruss
Uli

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Ton mit variabler Frequenz abspielen

Beitrag von af0815 »

Nein,fertig ist mir nichts bekannt. Nur so lange man auch nicht weis was dein Betriebssystem ist, ist alles nur geraten. Bei den Demos von Bass.dll könnte was dabei sein (ohne Gewähr).
Zuletzt geändert von af0815 am Mo 3. Jan 2022, 17:50, insgesamt 1-mal geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

USchoch
Beiträge: 26
Registriert: Do 16. Mär 2017, 14:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von USchoch »

Hallo
Mein Betriebssystem ist Windows 10. Mein Lazarus Version 2.0.10.

Gruss und danke für deine schnelle Reaktion

Uli

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Ton mit variabler Frequenz abspielen

Beitrag von af0815 »

Ich habe sowas schon mal mit Karten von NI gemacht, das nutzt dir nichts, denn da geht es um Karten und SDK um mehrere tausend Euros.

Ev. was für dich http://breakoutbox.de/pascal/pascal.html#PortAudio dort das Demo
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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!

Linux only:

Fred vS hat eine Lazarus Interface für alsa gebaut, das auch stufenlos arbeiten kann. Ich hab seinem Projekt eine Ami-Polizei-Sirene beigesteuert.

https://forum.lazarus.freepascal.org/in ... 502.0.html

Windows/Linux:

Die Unit Bass hat in ihren Demos auch ein kleines Beispiel für synthetisierte Klänge. BASS ist für den privaten Gebrauch kostenlos. Download und ein aktives Forum hier:

https://www.un4seen.com/

Winni

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 »

In der Unit windows gibt es die Funktion beep. Diese bekommt als ersten Parameter die Frequenz und als zweiten die Dauer in ms.
Die kann man in einer Schleife laufen lassen.

Edit: sysutils hat ebenfalls eine Beep Funktion. Du musst also entweder explizit windows.beep aufrufen oder die unit windows nach sysutils einbinden.

USchoch
Beiträge: 26
Registriert: Do 16. Mär 2017, 14:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von USchoch »

Hallo mitenand

Ich habe Windows.beep ausprobiert. Das mach wohl Töne einer bestimmten Frequenz, welche man aber leider nicht während der vorgegebenen Zeit verändern kann. Macht man kurze Zeiten in einem Loop, so ist das aber kein dauernder Ton mehr.
Trotzdem Dank für euere Hinweise

Gruss
Uli

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Ton mit variabler Frequenz abspielen

Beitrag von kupferstecher »

Ich kann PortAudio empfehlen, läuft auf jeden Fall unter Windows und Linux. Man hat die Ton-Ausgabe komplett selber im Griff, dafür muss man sich auch selber darum kümmern. Vom Grundprinzip läuft das so ab, dass man die Bibliothek startet und dabei eine Callback-Funktion angibt, die von der Bibliothek dann regelmäßig aufgerufen wird, wenn neue Daten benötigt werden. In der Callback-Funktion schreibt man dann die Tondaten in ein Array und übergibt es der Bibliothek. In deinem Beispiel, wenn es nur um einen Sinuston geht, müsstest du also für jeden Zeitpunkt den Sinuswert berechnen und der Reihe nach in das Array schreiben. Ist etwas Aufwand, aber dafür hast du eben volle Kontrolle, könntest bspw. bei Frequenzsprüngen einen kurzen Übergang implementieren oder auf den nächsten Nulldurchgang warten, oder, oder...

USchoch
Beiträge: 26
Registriert: Do 16. Mär 2017, 14:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von USchoch »

Hallo Kupferstecher
Ich habe PortMediaTest heruntergeladen. Dort gibts einen Ordner portaudio mit Unterordner UOS version of portaudio.pas. Darin eine Datei portaudio_uos.pas. Was mach ich mit dieser Datei?
Irgendwo hats eine Datei TestPMportmidiLCL.EXE, diese macht aber einen Fehler 0xc000007b beimStart. Weite bin ich nicht gekommen

Gruss
Uli

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Ton mit variabler Frequenz abspielen

Beitrag von kupferstecher »

Hallo Uli,

du hast Glück, mir ist eingefallen, dass ich mal eine Unit gebastelt habe, die genau das tut, einen Ton abspielen bis man ihn stoppt oder mit einer anderen Frequenz startet. Beispielprojekt ist angehängt. Für Portaudio geistern glaube ich mehrere Versionen vom Pascal-Wrapper im Netz rum, ich kann dir jetzt auch gar nicht sagen, wo meine Version her ist. Eine Portaudio-DLL ist auch im Anhang, sollte also direkt kompilieren und lauffähig sein. Allerdings handelt es sich bei der DLL um eine 32bit-Version. Dein Lazarus muss also nach 32bit kompilieren können.
Dateianhänge
LPortAudioBeep.zip
(142.76 KiB) 67-mal heruntergeladen

Mathias
Beiträge: 6160
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 »

USchoch hat geschrieben:
Mo 3. Jan 2022, 17:29
Hallo

Ich möchte in einer Lazurus-Anwendung einen Ton abspielen, z.B. 10 sec lang. Während dem Abspielen möchte ich die Frequenz mit einem Scrollbar verändern können. Gibt es eine Funktion, die das kann?

Gruss
Uli
Evtl. hilft dir auch die Unit Crt weiter.
Da gibt es Sound(Hz);

Hier noch ein Beschrieb: https://wiki.freepascal.org/Crt/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

USchoch
Beiträge: 26
Registriert: Do 16. Mär 2017, 14:01

Re: Ton mit variabler Frequenz abspielen

Beitrag von USchoch »

Salü Mathias
Das mit dem CRT.Sound gibt wohl ein Ton, aber wenn ich die Frequenz ändere, wir der Ton kurz unterbrochen. Es sollte so tönen, wie wenn man bei einem Tongenerator mit einem Drehknopf die Tönhöhen einstellen würde.

Aber Danke fr den Tipp

Gruss
Uli

Mathias
Beiträge: 6160
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 »

So wie ich mich erinnere, war das bei TP nicht der Fall,
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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!

CRT Sound ist nur in Windows implementiert. Unter Linux passiert da nix.

Zweitens: Sound bemüht den Speaker zur Generierung von Klängen. Diverse PC-Hersteller aber sind so geizig, dass sie den PC-Speaker wegrationalisiert haben. Nach dem Motto: Da ist ne Soundkarte drin. So haben sie wieder 50 Cent gespart. Ein entscheidender Vorteil gegenüber der Konkurrenz ...,

Auf diesen PCs - wie auf dem meinigen - passiert mit Sound garnix.

Winni

PS.: Mal den Übeltäter nennen:
Motherboard Gigabyte A320M
Zuletzt geändert von Winni am Di 4. Jan 2022, 18:37, insgesamt 1-mal geändert.

Mathias
Beiträge: 6160
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 »

Hätte ja sein können, das dies unterdessen auch in Linux implementiert wurde.
Stimmt, es gib PCs, bei der Sound aus dem PC-Speaker kommt. HP macht dies gerne.
Mein PC hat noch so ein winziger Piepser.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten