Audio unter Linux

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Audio unter Linux

Beitrag von Lincoln Six Echo »

Bin kein Linuxexperte aber von Linux recht angetan. Vor allem weil da auch Lazarus läuft.

Wie geht Audio unter Linux ? Ich meine jetzt nicht "playsound(...)" oder ähnliches sondern wirklicher Zugriff auf Treiber & Hardware.

Hat jemand einen Tip wo ich da anfange ?

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Audio unter Linux

Beitrag von six1 »

Schau mal in dem Projekt nach...
viewtopic.php?p=119973#p119973
Gruß, Michael

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Audio unter Linux

Beitrag von Lincoln Six Echo »

Danke dir, aber die binden auch nur eine Library (BASS Audio) ein.

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

Re: Audio unter Linux

Beitrag von theo »

Lincoln Six Echo hat geschrieben:
Sa 21. Okt 2023, 16:40
Danke dir, aber die binden auch nur eine Library (BASS Audio) ein.
Das ganze Betriebssystem besteht aus einem ein Haufen Libraries.
Wieso willst du denn da an die Hardware ran?

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Audio unter Linux

Beitrag von Lincoln Six Echo »

Es geht nicht darum einfach nur Audiodaten abzuspielen sondern um prof. Audio Anwendungen. Das erfordert nicht nur die Ausgabe, sondern auch das Audio-Input. Bei einer Q32 Konsole habe ich z.B. 32 Ein- und 32 Ausgänge.

Es geht um Musikproduktion, Tonstudio, Rundfunk, etc.

Unter Windows habe ich ASIO, ich habe für unsere Anwendungen eine eigene Engine geschrieben die das erledigt. Die kann 128 Ein und Ausgänge und das bei einer Latenz von < 3 msec. mir der üblichen Hardware.

Die Idee ist nun das alles auch für Linux zur Verfügung zu stellen, insofern das überhaupt geht. Audio wird hier nicht über die Soundkarte geleitet sondern über externe Hardware die meist über USB angeschlossen ist.

Bisher dachte ich das die Hersteller entsprechende Treiber bereitstellen. Machens sie auch aber nicht für Linux.

Trotzdem laufen die meisten Interfaces aber sehr gut mit den Linuxtreibern.

Das Audioinput muss mit dem Output synchronisiert sein, ansonsten ist z.B. keine Monitorfunktion möglich.

Soetwas mit universal-Libs wie BASS Audio oder anderen hinzubekommen geht vielleicht für einen Mediaplayer aber nicht für prof. Anwendungen in der Tontechnik.

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

Re: Audio unter Linux

Beitrag von Mathias »

Wie geht Audio unter Linux ?
Am besten mit SDL

Code: Alles auswählen

uses
  ... sdl, sdl_mixer;

var
  music: PMix_Music;
  scratch PMix_Chunk;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if SDL_Init(SDL_INIT_AUDIO) < 0 then begin
    Writeln('Kann SDL nicht öffnen: ', SDL_GetError);
  end;

  if Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096) = -1 then begin
    Write('Kann Audio nicht öffnen');
  end;

  music := Mix_LoadMUS('doom.mid');
  if music = nil then begin
    WriteLn('Kann Musik nicht laden');
  end;

  scratch := Mix_LoadWAV('scratch.wav');
  if scratch = nil then begin
    WriteLn('Kann Sound nicht laden');
  end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Mix_FreeChunk(scratch);
  Mix_FreeMusic(music);
  Mix_CloseAudio;
  SDL_Quit;
end;
Dies hat noch den Vorteil, es ist Plattformübergtreifend.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Audio unter Linux

Beitrag von Lincoln Six Echo »

Ein schönes Beispiel. Das ist in etwa so wie mmSystem unter Windows. Für einen Player völlig ausreichend.

Für prof. Anwendungen völlig unbrauchbar.

Als Code kann das so aussehen:

Code: Alles auswählen


function AudioInput(Buffer : pointer;SPC : word) : integer; cdecl;
var
  c : integer:
begin
  with pAudioDataBuffer(Buffer)^[InputChannel] do 
  for c := 0 to SPC-1
  begin
     L := L+Channel[0][c]*Volume;
     R := R+Channel[1][c]*Volume;
  end;
  if Host <> NIL then Host.ProcessAudio(L,R,SPC);
end;

AudioInput wird 1 / 96000 mal pro Sekunde vom Treiber beliefert und muss dann in der Anwendung entsprechend verarbeitet werden bevor der nächste Interrupt kommt. Audiodaten sind single, double, integer, int64 oder auch smallint. Bei 24Bit hast du array[0..ChannelMax-1 of array[0..2] of byte und musst evtl noch Sampleraten in Echtzeit umrechnen. Plus Little Endian nach Big Endian und umgekehrt.
Und alles dito beim AudioInput.

Das soetwas nicht mit PlaySound(Data) zu lösen ist, erklärt sich von selbst.

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

Re: Audio unter Linux

Beitrag von theo »


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

Re: Audio unter Linux

Beitrag von Mathias »

Ich habe gerade das Beispiel auf https://github.com/fredvs/alsa_sound ausprobiert.
Ich dachte im ersten Moment, ich sein mit GW-BASCI unterwegs. :mrgreen:

Den Link muss ich mir unbedingt merken.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Audio unter Linux

Beitrag von kupferstecher »

Schau dir mal PortAudio an, es gibt einen Freepascal-Wrapper dafür.
Über einen Callback übergibt man die Datenblöcke (bzw. bekommt sie). Funktioniert unter Linux und Windos einwandfrei, ohne Aussetzer. Habe es bisher nur zur Ausgabe eines eizigen Streams benutzt. Ob es für deine Anforderungen reicht, weiß ich nicht.

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Audio unter Linux

Beitrag von Warf »

Also als erstes mal die Faustregel, Low Level Audiogeräte ansteuern unter Linux ist der schnellste weg dich in den Wahnsinn zu treiben (mehrere Konfigurationsdateien mit tausenden zeilen erwarten dich).

Für einen guten einstieg schau dir mal das hier an: https://wiki.archlinux.org/title/Sound_system

Du kannst direkten Zugriff auf die Audiogeräte über ALSA haben, aber normalerweise geht die meiste Software einen Level höher über Audioserver wie JACK oder PulseAudio (was wiederum auch noch mal den Umweg über JACK gehen kann).
Im Grunde ist das vermutlich das level auf dem du Einsteigen willst. Audacity z.B. benutzt auch Jack um die Audiogeräte anzusprechen.

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Audio unter Linux

Beitrag von charlytango »

Warf hat geschrieben:
Mo 23. Okt 2023, 18:57
einen Level höher über Audioserver wie JACK
kenn mich absolut nicht aus, lese begeistert mit und sehe auch interessehalber mal in die Links,
aber das hier sieht mir doch genau nach dem professionellen Level aus das von Lincoln gesucht wird??

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Audio unter Linux

Beitrag von Lincoln Six Echo »

Das einzige was geht ist ALSA.

Alles andere sind im Grunde Allround-Frameworks, die sind klasse für PlaySound-Apps aber nicht mehr.

Audacity ist ein Waveeditor, aber sicher keine prof. Audio-Anwendung, schon gar nicht seit der Übernahme durch MUSE.

ALSA ist sehr durchdacht und ganz gut dokumentiert. Die Möglichkeiten sind, anders als unter Windows, sehr viele. Das erklärt mir jetzt auch warum es so gut wie keine Anwendungen im Profibereich für Linux gibt. Der Entwicklungsaufwand ist ungleich höher als bei Win und Mac. Dabei ist Linux als Betriebssystem für Studios und Musikproduzenten eigentlich ideal.

Ich denke da MS ja gerade mit neuen Lizenzbestimmungen zur kompromisslosen Totalüberwachung und -Zensur gewechselt ist, wird sich das sehr bald ändern.

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

Re: Audio unter Linux

Beitrag von Mathias »

Ich denke da MS ja gerade mit neuen Lizenzbestimmungen zur kompromisslosen Totalüberwachung und -Zensur gewechselt ist, wird sich das sehr bald ändern.
Dies würde sich sogar noch viel schneller ändern, wen neue PCs und Laptops mit Linux anstelle von M$ verkauft würden.
Dies wird noch der einzige Grund sein um Windows aufrecht zu halten. Einzig was Windows Linux noch voraus hat, es ist eine gute Spielkonsole mit dem DirectX.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Audio unter Linux

Beitrag von Lincoln Six Echo »

Im Moment ist die Entwicklung in der IT wirklich übel.

YouTube zwingt Leute schwachsinnige Werbung zu sehen. MS betreibt offen Totalüberwachung und willkürliche Zensur. Andere Portale löschen komplette User-Accounts nach einer EMail der Behörden. Auch im Linuxbereich : Da vertreiben Leute Tools die mit Flutter gebaut wurden, installiert man sich das zieht man sich direkt Google Software auf den eigenen Rechner.

Übrigens nicht alles nur die "bösen" USA, vieles ist im Ideensumpf der EU gewachsen.

Aber das ist hier wohl am Thema vorbei ;-)

Antworten