Einzelnen Beitrag anzeigen

Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: bass.dll - stereo zu mono

  Alt 17. Okt 2009, 18:41
Hallo Wishmaster,
Joa, es hat mir weitergeholfen. Vielen Dank für die Spur, auf die du mich da gesetzt hast.
Und hier ist die Lösung:
Delphi-Quellcode:
procedure StereoToMono (handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD); stdcall;
var
  P: pSingle; // zeiger auf ein Element des puffers.
  a: DWORD;
  mono, left, right: single;
begin
  P := buffer;
  a := 0;
  while (a < (length div 4)) do // 4 bytes pro eintrag (sizeOf single = 4)
  begin
    // erst kommt der linke Kanal
    left := p^;
    inc (p); // jetzt zeigt p auf den rechten
    right := p^;
    dec (p); // und wieder zurück zum linken, um ihn zu modifizieren
    mono := (left + right) / 2;
    p^ := mono;
    inc (p); // wir sind wieder beim rechten...
    p^ := mono;
    inc (p); // und beim nächsten zu bearbeitenden Sample
    a := a + 2; // weil zwei Samples verändert wurden.
  end;
end;

// und der Aufruf...
procedure TPlayer.MonoAbspielen (m: boolean);
begin
  if m then // mono abspielen
    MonoDSP := BASS_ChannelSetDSP (sh, @StereoToMono, nil, 1)
  else
    BASS_ChannelRemoveDSP (sh, MonoDSP);
end;
// wobei sh ein bei mir globaler Channel ist
// sh: HSTREAM;
Einen herzlichen Gruß
Marco
Marco Steinebach
  Mit Zitat antworten Zitat