Einzelnen Beitrag anzeigen

juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#1

BASS.dll Probleme

  Alt 20. Mai 2024, 15:52
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
Jürgen Linder
  Mit Zitat antworten Zitat