Töne
-
- Beiträge: 55
- Registriert: Sa 15. Jan 2011, 00:14
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Töne
Hallo,
kann mir jemand helfen, wie man zum Einen kurze beep - Töne und
zum Anderen kurze Musiksequenzen abspielen kann. Das beste wäre
es das man das ganze auch unter Linux compilieren kann.
Ich wollte auf ein Click-event akustisch antworten und kein mp3 player
erstellen.
Hoffentlich kann mir jemand weiterhelfen.
Gruß DAP
kann mir jemand helfen, wie man zum Einen kurze beep - Töne und
zum Anderen kurze Musiksequenzen abspielen kann. Das beste wäre
es das man das ganze auch unter Linux compilieren kann.
Ich wollte auf ein Click-event akustisch antworten und kein mp3 player
erstellen.
Hoffentlich kann mir jemand weiterhelfen.
Gruß DAP
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Töne
Hallo,
ich hab mich erst mal zurück gehalten, da ich von DirectSound nix weiß. Aber schade, dass Dir noch keiner geantwortet hat. Du könntest mal in Sachen Windows nach DirectSound googlen. Ich hab das gefunden: http://wiki.lazarus.freepascal.org/FPC_and_DirectX/de. Ich hab mal ein monophones Bildschirm-Keyboard gemacht. Dazu hab ich allerdings nur PlaySound() verwendet und die Töne selbst nach der WAV Spezifikation erstellt. Siehe hier: http://de.wikipedia.org/wiki/RIFF_WAVE Angefangen hab ich mit dem Kammerton a. Der hat 440 Hertz. Ein Halbtonschritt rauf kommt aus der Multiplikation der Frequenz mit der 12. Wurzel aus 2, ein Halbtonschritt runter kommt aus der Division der Frequenz durch die 12. Wurzel aus 2.
Gruß
Heiner
ich hab mich erst mal zurück gehalten, da ich von DirectSound nix weiß. Aber schade, dass Dir noch keiner geantwortet hat. Du könntest mal in Sachen Windows nach DirectSound googlen. Ich hab das gefunden: http://wiki.lazarus.freepascal.org/FPC_and_DirectX/de. Ich hab mal ein monophones Bildschirm-Keyboard gemacht. Dazu hab ich allerdings nur PlaySound() verwendet und die Töne selbst nach der WAV Spezifikation erstellt. Siehe hier: http://de.wikipedia.org/wiki/RIFF_WAVE Angefangen hab ich mit dem Kammerton a. Der hat 440 Hertz. Ein Halbtonschritt rauf kommt aus der Multiplikation der Frequenz mit der 12. Wurzel aus 2, ein Halbtonschritt runter kommt aus der Division der Frequenz durch die 12. Wurzel aus 2.
Gruß
Heiner
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Töne
Für Linux und Windows gibts zwei Bibliotheken, mit denen ich bereits gearbeitet habe:
- Bass
- SDL_Mixer
Für einfache Piepstöne erstellst du einfach von Hand eine Sinuskurve: die jeweilige Sound-Bibliothek erlaubt dir, Rohdaten hochzuladen, die ein Format haben, zum Beispiel 44kHz 16 bit signed. Das bedeutet im Klartext, dass 44.000 mal in der Sekunde ein 16-bit-signed-Wert (smallint) aus deinem Array ausgelesen wird und als Spannung auf den Lautsprecher gesetzt wird. 16 bit signed heißt, dass du die Werte zwischen -32.000 und 32.000 anlegen solltest. Um einen Sinuston (normaler Piepston) zu erzeugen machst du also:
Es lohnt sich bei Piepstönen auch, geringere Samplefrequenzen zu benutzen, so zum Beispiel 22.000 Hz.
fillsinus(440, 1); würde den Kammerton A mit einer Spielzeit von einer Sekunde erzeugen.
- Bass
- SDL_Mixer
Für einfache Piepstöne erstellst du einfach von Hand eine Sinuskurve: die jeweilige Sound-Bibliothek erlaubt dir, Rohdaten hochzuladen, die ein Format haben, zum Beispiel 44kHz 16 bit signed. Das bedeutet im Klartext, dass 44.000 mal in der Sekunde ein 16-bit-signed-Wert (smallint) aus deinem Array ausgelesen wird und als Spannung auf den Lautsprecher gesetzt wird. 16 bit signed heißt, dass du die Werte zwischen -32.000 und 32.000 anlegen solltest. Um einen Sinuston (normaler Piepston) zu erzeugen machst du also:
Code: Alles auswählen
procedure fillSinus(freq: single; laenge: single);
var samples: array of smallint;
i: integer;
begin
setlength(samples, round(laenge*44000)); // laenge Sekunden lang den Ton abspielen, auch Kommawerte erlaubt
for i:=0 to high(samples) do begin
samples[i]:=round(30000*sin(i/44000*2*pi/freq));
end;
SoundLibrary_Upload_Data(@samples[0], length(samples), SoundLibrary_Format_16bit_signed, 44000); // durch spezifische Funktion ersetzen; 1. Parameter: Zeiger auf Daten; 2. Parameter: Anzahl Samples, 3. Parameter: Datenformat, 4. Parameter: Samplefrequenz
end;
fillsinus(440, 1); würde den Kammerton A mit einer Spielzeit von einer Sekunde erzeugen.
-
- Beiträge: 55
- Registriert: Sa 15. Jan 2011, 00:14
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Töne
Hallo,
vielen Dank Heiner und Carli für eure Antworten.
Welche Unit muss ich einbinden, um SoundLibrary_Upload_Data benutzen zu können?
Ich werde mir erst einmal Bass anschauen.
Gruß DAP
vielen Dank Heiner und Carli für eure Antworten.
Welche Unit muss ich einbinden, um SoundLibrary_Upload_Data benutzen zu können?
Ich werde mir erst einmal Bass anschauen.
Gruß DAP
- jwdietrich
- Beiträge: 173
- Registriert: Mo 20. Okt 2008, 20:50
- OS, Lazarus, FPC: macOS 10.4-14.1, Windows 2000-11, Raspbian (L 3.7.0, FPC 3.2.2)
- CPU-Target: PowerPC, Intel, ARM
- Wohnort: Hattingen, NRW
- Kontaktdaten:
Re: Töne
Für einfache Beep-Ausgaben habe ich für meine Programme die folgende plattformunabhängige Prozedur geschrieben:
Insgesamt scheint das Thema Tonausgabe in Lazarus / Free Pascal aber noch erheblich zu kurz zu kommen.
Code: Alles auswählen
procedure bell; {platform-independent implementation of acustical warning}
begin
{$IFDEF win32}
MessageBeep(0);
{$ELSE}
{$IFDEF LCLCarbon}
SysBeep(30);
{$ELSE}
beep;
{$ENDIF}
{$ENDIF}
end;
-
- Beiträge: 55
- Registriert: Sa 15. Jan 2011, 00:14
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Töne
Hallo,
dank dir jwdietrich, für ein einfaches beep ist das wunderbar.
Eine kleine Ergänzung für Neulinge wie mich, die Funktion steht in der Unit Windows.
Mit Bass habe ich in Windows auch wav-files ans laufen bekommen. Gibt es eine
Möglichkeit, bass mitzucompilieren, damit man nicht immer die dll an Freunde
weiterreichen muss?
Wie bekomme ich Bass in Linux (Ubuntu) ans laufen?
Gruß DAP
dank dir jwdietrich, für ein einfaches beep ist das wunderbar.
Eine kleine Ergänzung für Neulinge wie mich, die Funktion steht in der Unit Windows.
Mit Bass habe ich in Windows auch wav-files ans laufen bekommen. Gibt es eine
Möglichkeit, bass mitzucompilieren, damit man nicht immer die dll an Freunde
weiterreichen muss?
Wie bekomme ich Bass in Linux (Ubuntu) ans laufen?
Gruß DAP
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Töne
http://www.un4seen.com/forum/?topic=8682" onclick="window.open(this.href);return false;Wie bekomme ich Bass in Linux (Ubuntu) ans laufen?
Das geht sogar unter Lazarus... Ich meine, die DLL/SO Datei muss aus Lizenz-Gründen extern sein.
Es gibt auf der Lazarus-Hompage noch eine andere Möglichkeit: Dort gibt es eine Sound-Komponente, für reine Wav Dateien, ich weiß jetzt aber nicht ob sie auch unter Linux läuft, sollte aber.
http://wiki.lazarus.freepascal.org/Comp ... e_examples" onclick="window.open(this.href);return false;
Such da mal nach Sound.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Töne
Nein! Die laufen nur auf ein paar System Einbandfrei. Wobei mir nicht bekannt ist, bei wem sie laufen. Ich höre immer nur das sie nicht laufen. Es gibt da noch was anders. Komme im Moment nicht auf den Namen, werde aber nachher mal schauen.meintest Du die ACS-Komponente?
MFG
Michael Springwald
Michael Springwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6848
- 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: Töne
Bei mir sind sie gelaufen (derzeit nicht im EInsatz) und Christian kannst du ansprechen, der betreut den Port (oder hat es gemacht).pluto hat geschrieben:Komme im Moment nicht auf den Namen, werde aber nachher mal schauen.meintest Du die ACS-Komponente?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Töne
Du kannst dich auch hier:
http://breakoutbox.de/pascal/pascal.html" onclick="window.open(this.href);return false;
ein bissl umschauen.
http://breakoutbox.de/pascal/pascal.html" onclick="window.open(this.href);return false;
ein bissl umschauen.
-
- Beiträge: 55
- Registriert: Sa 15. Jan 2011, 00:14
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Töne
Aber eine Sound-Komponente für Crosscompiling scheint es noch nicht zu geben.creed steiger hat geschrieben:Du kannst dich auch hier:
http://breakoutbox.de/pascal/pascal.html" onclick="window.open(this.href);return false;
ein bissl umschauen.
Wenn ich das richtig gelesen habe, muss man portaudio auch erst compilieren
und dann als library einbinden.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Töne
Lies noch mal nach, SoundLibrary_Upload_Data ist kein Bezeichner, sondern ein Platzhalter.DAP hat geschrieben:Hallo,
vielen Dank Heiner und Carli für eure Antworten.
Welche Unit muss ich einbinden, um SoundLibrary_Upload_Data benutzen zu können?
Ich werde mir erst einmal Bass anschauen.
Gruß DAP
In SDL_Mixer heißt die korresponierende Funktion "Mix_QuickLoad_RAW"
Bei Bass und OpenAL lass ich dich selber googeln (ist mir die Zeit zu schade)