Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   BASS.dll Probleme (https://www.delphipraxis.net/215163-bass-dll-probleme.html)

TomyN 23. Mai 2024 19:37

AW: BASS.dll Probleme
 
Das ist ganz klasisches Windowsdesktop I/O (da wo auch waveInGetDevCaps etc. vorkommt). In Delphi findest Du sie in mmystem.pas, die Doku dazu im Netz.
Das ganze funktioniert erstaunlich gut (und das seit win3.11), halt mit 'unprofessionel hoher' Latenz.

juelin 25. Mai 2024 12:00

BASS.dll bin verzweifelt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-Gemeinde,
ich bin verzweifelt. Seit 2 Wochen versuche ich meine Soundkarten mit BASS.dll zum laufen zu bringen.
Habe mir von der Webseite www.un4seen,com die Beispiuelprogramme runter geladen.
Ich habe 3 Soundkarten an meinem Computer.
Möchte von Soundkarte 8-USB (Mikroeingang) den Sound in ein WAV-File speichern
und gleichzeitig auf einer anderen Soundkarte 6_USB (Lautsprecher) ausgeben.
Dazu habe ich nach dem Vorbild von rectest.pas von www.un4seen,com gemacht (siehe Anhang).
Es wird zwar das WAV-File ordentlich erstellt, aber ich höhre kein Sound über den Lautsprecher
und das WAV-File bring auch keinen Sound.
Hier jetzt mein Code (nur die wichtigen Stellen).
Delphi-Quellcode:
//audioein2:=4;
// 0=intern 1=6-USB 2=intewrn 3=8-USB
//audioaus2:=3;
// 0=noSound 1=Default 2=intern 3=8-USB 4=6-USB
    if BASS_Init(audioaus2,44100,0,BASS_DEVICE_SPEAKERS,nil) then
    begin
      ChannelOR:=Bass_StreamCreate(44100,2,0,@StreamProc_Out,nil);
      if ChannelOR > 0 then
      begin
        BASS_ChannelPlay(ChannelOR, True);
        BASS_ChannelSetAttribute(ChannelOR,BASS_ATTRIB_VOL,1);
        if BASS_RecordInit(audioein2) then
        begin

          Def:=audioein2;
          WaveStream:=TMemoryStream.Create;
          if (rchan > 0) then
             rchan := 1;
          InitDevice(audioein2);
          if WaveStream.Size > 0 then
          begin
            BASS_StreamFree(rchan);
            WaveStream.Clear;
          end;
          with WaveHdr do
          begin
            riff := 'RIFF';
            len := 36;
            cWavFmt := 'WAVEfmt ';
            dwHdrLen := 16;
            wFormat := 1;
            wNumChannels := 2;
            dwSampleRate := 44100;
            wBlockAlign := 4;
            dwBytesPerSec := 176400;
            wBitsPerSample := 16;
            cData := 'data';
            dwDataLen := 0;
          end;
          WaveStream.Write(WaveHdr, SizeOf(WAVHDR));

          rchan:=BASS_RecordStart(44100, 2, BASS_INPUT_TYPE_MIC and BASS_INPUT_ON, @RecordingCallback, nil);
          if (rchan > 0) then
          begin
            BASS_ChannelPlay(rchan, True);
            BASS_ChannelSetAttribute(rchan,BASS_ATTRIB_VOL,1);

            BASS_ChannelStop(ChannelOR);
            Bass_StreamFree(ChannelOR);
            BASS_ChannelStop(rchan);
            if (rchan > 0) then
            begin
              if (rchan <> 1) then
              begin
                if (BASS_ChannelIsActive(rchan) = 0) then
                begin
                  rchan := 0;
                  WaveStream.Position := 4;
                  i:=WaveStream.Size - 8;
                  WaveStream.Write(i, 4);
                  i:=i - $24;
                  WaveStream.Position:=40;
                  WaveStream.Write(i, 4);
                  WaveStream.Position:=0;
                  chan:=BASS_StreamCreateFile(True,WaveStream.Memory,0,WaveStream.Size,0);
                  if chan = 0 then
                  begin
                    Label2.Caption:='Fehler erzeugen Filedaten von Audiodaten';
                    basslauf:=False;
                  end else begin
                    WaveStream.SaveToFile(wavfile);
                  end;
                end;
              end;
            end;
            bassret:=BASS_RecordFree();
            BASS_Free;
            WaveStream.Free;

function StreamProc_Out(channel: HRECORD; buffer: pointer; length: DWord; user: pointer): Boolean; stdcall;
begin
  Result:=True;
end;

function RecordingCallback(Handle: HRecord; buffer: Pointer; length: DWord; user: Pointer): boolean; stdcall;
  var rueck: Boolean;
begin
  rueck:=False;
  if Length > 0 then
  begin
    WaveStream.Write(buffer^, length);
    Bass_StreamPutData(ChannelOR, buffer, length);
    rueck:=True;
  end;
  Result:=rueck;
end;
Vielleicht hat jemand eine Idee.
Gruß
Jürgen

TomyN 25. Mai 2024 19:14

AW: BASS.dll Probleme
 
Steht doch oben.

- Daten mit waveInXX samplen
- In Zwischenspeicher
- Aus Zwischenspeicher über WaveOutXX wiedergeben
- Zwischenspeicher als *.wav speichern, je nach länge am Ende oder halt zwischendurch.

Da braucht's keine DLL o.ä.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz