Danke,
ich habe jetzt einfach folgendes gemacht. Das Tonsignal mit den 6 Kanälen wandle ich in ein Monosignal mit 16 Bit (AV_SAMPLE_FMT_S16) um und werte das dann aus. Ffmpeg ist recht performant was die Umwandlung angeht und soweit ich das erkenne zeigt mir das Oszilloskop auch die passenden Daten an.
Was ich nicht so ganz verstehe ist, warum ich die Schrittweite durch 4 teilen muss. Das Signal ist ja nur ein Smallint für jeden Wert.
Delphi-Quellcode:
procedure TForm1.ProcessAudio(Buf: PByte; Size: integer);
var
step, Y, X, V: integer;
ptr: PSmallInt;
function FixRange(
const Y: integer): integer;
begin
Result := Y * 127
div FBitmap.Height;
end;
begin
FBitmap.FillTransparent;
Y := 0;
X := 0;
Step := (Size
div 4)
div FBitmap.Width;
if Step<1
then Step := 1;
ptr := PSmallInt(Buf);
for x := 0
to FBitmap.Width-1
do
begin
V := (32767 - ptr^) * FBitmap.Height
div 65536;
inc(ptr, Step);
if X = 0
then Y := V;
repeat
if Y < V
then
Inc(Y)
else if Y > V
then
Dec(Y);
FBitmap.SetPixel(X, Y,
FSpectrumPalette[FixRange(abs(Y - FBitmap.Height
div 2) * 2 + 1)]);
until Y = V;
end;
Image1.Picture.Assign(FBitmap);
end;