Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

juelin 20. Mai 2024 15:52

BASS.dll Probleme
 
Hallo,
ich habe Probleme mit BASS.dll.
Ich möchte ien Programm schreiben, welches
1. von einer Soundkarte Input holt und in ein WAV-File schreibt.
2. Das WAV-File abspilen und die Frequenzen auswerten.
Gibt es da keine gute Beschreibung (am libsten aud deutsch) der Funktionen von BASS.dll?
Oder kann jemand Beispielroutinen (Source) zur Verfügung stellen?
Habe schon tagelang im Forum und Internet gesucht, aber nix gefunden.
Wie teile ich dem Record oder Stream mit welches Device er nehmen soll?
Die Routinen BASS_SetDevide oder BASS_RecordSetDevice bringen immer FALSE als Returncode.
Wie sage ich dem BASS_RecordStart was für ein Datenformat er ausgeben soll? (WAV oder MP3)

Hier noch mein Code. Das erzeugt zwar schon ein WAV-File. Aber man kann es nicht abspielen (falsches Format).
Delphi-Quellcode:
function StreamProc_Push(channel: HRECORD; buffer: pointer; length: DWord; user: pointer): Boolean; stdcall;
begin
  Result := true;
end;

function RecordingCallback(channel: HRECORD; buffer: pointer; length: DWord; user: pointer): Boolean; stdcall;
begin
  Bass_StreamPutData(ChannelOR, buffer, length);
  Result := true;
end;

function DuffRecording(handle : HRECORD; const Buffer : Pointer; Length : DWORD; user : Pointer) : Boolean; stdcall;
  var rueck: Boolean;
begin
  rueck:=False;
  if Length > 0 then
  begin
    fRec.Write(Buffer^, Length);
    rueck:=True;
  end;
  Result:=rueck;
end;

procedure TForm1.StartAufnahmeClick(Sender: TObject);
begin
        bassret:=BASS_RecordGetDeviceInfo(audioein2, bassinfo);
        if bassret then
        begin
          if BASS_Init(-1, 44100, 0, Handle, nil) then
          begin
            if (BASS_RecordInit(-1)) then
            begin
              ChannelIR:=BASS_RecordStart(44100, 1, 0, @DuffRecording, nil);
              if ChannelIR > 0 then
              begin
                BASS_ChannelPlay(ChannelIR, FALSE);
                ChannelOR:=Bass_StreamCreate (44100,1,Bass_Sample_Float,@StreamProc_Push,nil);
                if ChannelOR > 0 then
                begin
                  BASS_ChannelPlay(ChannelOR, TRUE);
                  basslauf:=True;
                  StartAufnahme.Visible:=False;
                  StopAufnahme.Visible:=True;
                  if FileExists('E:\DARC\RTTY\Win32\Debug\WAV\Test.mp3') then
                  begin
                    DeleteFile('E:\DARC\RTTY\Win32\Debug\WAV\Test.mp3');
                  end;
                  fRec:=TFileStream.Create('E:\DARC\RTTY\Win32\Debug\WAV\Test.mp3', fmCreate); // create the file
                  while basslauf do
                  begin
sleep(10000);
basslauf:=False;
                  end;
                  BASS_ChannelPlay(ChannelIR, FALSE);
                  BASS_ChannelPlay(ChannelOR, FALSE);
                  bassret:=BASS_StreamFree(ChannelOR);
                  bassret:=BASS_RecordFree();
                  fRec.Free;
                  BASS_Free;
                  StartAufnahme.Visible:=True;
                  StopAufnahme.Visible:=False;
                end else begin
                    Label2.Caption:='Output Audiostream konnten nicht kreiert werden';
                end;
              end else begin
                  Label2.Caption:='Input Audiorecord konnten nicht kreiert werden';
              end;
            end else begin
                Label2.Caption:='Input Audiorecord konnten nicht initialisiert werden';
            end;
          end else begin
              Label2.Caption:='Input Audiodaten konnten nicht initialisiert werden';
          end;
        end else begin
            Label2.Caption:='Input Audiodevice konnten nicht abgerufen werden';
        end;
Danke für Eure Hilfe.

Gruß
Jürgen

Alter Mann 20. Mai 2024 19:14

AW: BASS.dll Probleme
 
So wird das nix. Hast Du die Hilfe- und Beispiel-Dateien? Da ist auch etwas zu WMA dabei.
Was Du auf jedenfall benötigst ist ein Encoder.
Delphi-Quellcode:
...
// start recording & encoding

procedure TForm1.Start;
begin
  // initialize encoder - let system choose port, max 5 clients
  ehandle := BASS_WMA_EncodeOpenNetwork(SAMPLERATE, CHANNELS, BASS_WMA_ENCODE_SCRIPT, strtoint(combobox1.Text), 0, 5);
  {
   If you want mutible Bitrates then you must do it on this way
   little Example
   var
   Bitrates : array [0..3] of DWORD = (64000,128000,160000,0);

   ehandle := BASS_WMA_EncodeOpenNetworkMulti(SAMPLERATE, CHANNELS, BASS_WMA_ENCODE_SCRIPT, @Bitrates, 0, 5);
  }
  if (ehandle = 0) then
  begin
    MessageBox(0, 'Can''t initialize encoding', 'Error', 0);
    Exit;
  end;

  BASS_WMA_EncodeSetTag(ehandle, 'Title', PChar(Edit1.Text), BASS_WMA_TAG_ANSI); // set WMA title tag

  BASS_WMA_EncodeSetNotify(ehandle, @ClientConnect, 0); // setup client notification

  time := 0;
  displaycount := 0;

  // start recording
  rchan := BASS_RecordStart(SAMPLERATE, CHANNELS, 0, @RecordingCallback, 0);
  if (rchan = 0) then
  begin
    MessageBox(0, 'Can''t start recording', 'Error', 0);
    BASS_WMA_EncodeClose(ehandle);
    Exit;
  end;

  Button1.Caption := 'Stop';
  Edit1.Enabled := False;
  Edit1.Color := clBtnFace;
  ComboBox1.Enabled := False;
  ComboBox1.Color := clBtnFace;
  Edit2.Enabled := True;
  Edit2.Color := clWindow;

  Timer1.Enabled := True;
end;
...

juelin 20. Mai 2024 19:49

AW: BASS.dll Probleme
 
Danke alter Mann,
bin ja auch ein alter Mann (75).
Aber Deine Routinen BASS_WMA_Encode ...... sinf bei mir gar nicht in der BASS.pas enthalten.
Gruß
Jürgen

Alter Mann 20. Mai 2024 20:30

AW: BASS.dll Probleme
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie schon soooo Alt? Alle Achtung8-)
Schau in den Anhang:-D

TomyN 20. Mai 2024 21:15

AW: BASS.dll Probleme
 
Geht das nicht mit der Mediaplayercomponente ganz ohne Bass?

juelin 21. Mai 2024 19:51

AW: BASS.dll Probleme
 
Leider nicht TommyN.
ich muss mehrmals pro Secunde die Frequenz wissen.
Das können die Programme nicht.
Gruß
Jürgen

Kas Ob. 21. Mai 2024 20:16

AW: BASS.dll Probleme
 
Liste der Anhänge anzeigen (Anzahl: 1)
I am sorry, as it seem either i am missing something or no one want to explain or correct me, but for the last time i will engage in this subject

Here a video of FFT from VCP drawing the spectrum for frequencies from Pulse-code modulation (PCM) format, i changed my input device to MixerOut (what you hear) instead of the microphone and used an online tone generator.

The file is mp4, the forum is not accepting it without compressing into zip.
[ATTACH]VCP_WithToneGenerator[/ATTACH]

TomyN 22. Mai 2024 21:34

AW: BASS.dll Probleme
 
Willst Du die Audiodaten in 'realtime' analysieren oder in eine Datei speichern (so hatte ich Deine Frage gelesen)?

Ansonsten
WaveInGetDevice
WaveInOpen

WaveInPrepareHeader
WaveInAddBuffer
waveInStart

Im Callback die Daten einlesen, im Hauptprogramm eine FFT (oder digitale Filter).

juelin 22. Mai 2024 22:12

AW: BASS.dll Probleme
 
Hallo TommyN,
Danke für Deine Nachricht.
So hätte ich mir vorgestellt, das die anderen (BASS) es auch gemacht hätten.
Die Funktioen aufgelistet.
Aber ich hatte schon geschriebe, das die Funktionen von Deinem Vorschlag leider nicht genügen.
Ich brache die Werte von Audiofrequenz und Audiolautstärke mehrmals in der Sekunde.
Danke und Gruß
Jürgen

juelin 23. Mai 2024 11:32

AW: BASS.dll Probleme
 
Hallo TommyN,
wo gibt es diese Routinen?
WaveInGetDevice
WaveInOpen

WaveInPrepareHeader
WaveInAddBuffer
waveInStart

Im BASS.pas sind die ja nicht drin.
Gruß
Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Seite 1 von 2  1 2      

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