Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Aufnehmen mit der Bass.dll - brauche Hilfe! (https://www.delphipraxis.net/157287-aufnehmen-mit-der-bass-dll-brauche-hilfe.html)

Marco Steinebach 6. Jan 2011 16:50

Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Hallo zusammen,
ich möchte mittels der BASS.dll aufnehmen, und das ganze mittels der bassenc.dll speichern.
Das funktioniert auch, aber ich hab eine Frage:
Ich möchte so eine art Monitor-Ausgang realisieren, daß also die Daten die mittels des einen Streams aufgenommen werden, gleichzeitig mit einem anderen Stream wiedergegeben werden.
Wenn ich meine Aufnahme allerdings starte, kommt da mal gar nix.
Kann mir bitte mal jemand auf die Sprünge helfen?
Hier der relevante code:
Delphi-Quellcode:
  // kanal ist als HRecord definiert.
  kanal := BASS_RecordStart (
    44100, 2, BASS_Sample_Float, @recordingCallBack, nil);
  if kanal = 0 then
  begin
    Fehler (_('Could not start recording! (1)'));
    exit;
  end;
  // monitorkanal, also der ausgabekanal, ist als HSTREAM definiert.
  MonitorKanal := Bass_StreamCreate (44100, 2, Bass_Sample_Float, StreamProc_Push, nil);
  if MonitorKanal = 0 then
  begin
    Fehler (_('Error initializing monitor channel!'));
    exit
  end;
  Bass_ChannelPlay (MonitorKanal, true);
Und hier die RecordingCallBack...
[delphi]
function RecordingCallback (channel: HRECORD; buffer: pointer; length: DWord; user: pointer): Boolean; stdcall;
begin
Bass_StreamPutData (Monitorkanal, buffer, length);
Result := true;
end;
{/delphi}
Bitte um euere Hilffe!
Viele Grüße
Marco

alfold 7. Jan 2011 08:13

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Warum verwendest Du nicht den Record selber
Delphi-Quellcode:
Bass_ChannelPlay (Kanal, false);
also dein RecordStream selbst für die Wiedergabe :gruebel:

Gruss alfold

Marco Steinebach 7. Jan 2011 09:18

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Zitat:

Zitat von alfold (Beitrag 1072856)
Warum verwendest Du nicht den Record selber
Delphi-Quellcode:
Bass_ChannelPlay (Kanal, false);
also dein RecordStream selbst für die Wiedergabe :gruebel:

Gruss alfold

Weil der Aufruf von Bass_ChannelPlay für einen Recordkanal nur zur folge hat, daß die aufnahme startet, genau wie Bass_ChannelPause die aufnahme stoppt. Dadurch das es sich um einen HRECORD-Stream handelt "weiß" die Bass.dll, ob sie das ding abspielen, also wiedergeben, oder aufnehmen soll.
Ich möchte aber, sozusagen on-the-fly, wissen, was aufgenommen wird, daher mein Ansatz mit Bass_StreamPutData.
Viele Grüße
Marco

alfold 7. Jan 2011 10:48

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Sorry, hast recht
Aber was passiert wen du es anders machst

Delphi-Quellcode:
MonitorKanal := Bass_StreamCreate (44100, 2, Bass_Sample_Float, @YourStreamProc, nil);


function YourStreamProc(handle: HSTREAM; buffer: Pointer; length: DWORD; user: DWORD): DWORD; stdcall;
begin
  Result := BASS_ChannelGetData(kanal, buffer, length);
end;
indem Du die Daten vom recchannel holst?

Gruss alfold

OrNEC 7. Jan 2011 12:30

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Also ich mache das so:

Delphi-Quellcode:
BASS_Encode_Start(chan, Pointer(PWideString(WideFormat(ExtractFilePath(ParamStr(0)) + 'lame.exe %s - "%s"',[brString, RecDir + '\' + FileName]))), BASS_UNICODE, nil, nil);

Und so wird die Aufnahme gestoppt:

Delphi-Quellcode:
BASS_Encode_Stop(chan);

alfold 7. Jan 2011 14:16

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
mh.. wovon reden wir jetzt.
Das letzte hat doch nix mit dem Anfang von Dir, ne gemeinsamkeit :gruebel:
Oder wie soll ich das jetzt verstehen?

Gruss alfold

Marco Steinebach 7. Jan 2011 14:59

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
Zitat:

Zitat von alfold (Beitrag 1072929)
Aber was passiert wen du es anders machst

Das kann ich dir sagen: ;-) Es funktioniert!
Ganz herzlichen Dank. Ich hatte mich so am Push-Stream festgebissen, daß ich darauf echt nicht gekommen bin.
... Tja, das Aufzeichnen des aufgenommenen Streams mache ich auch so ähnlich wie im 5. Beitrag beschrieben, aber das war nicht wirklich die Frage, ;-), da hast du recht!
Das einzige, was mir noch aufgefallen ist, ist, daß die Ausgabe mit recht vielen Knacksern durchsetzt ist - aber da kann ich denke ich noch mit'n paar Puffern rumspielen. Aber jedenfalls hört man jetzt, das der richtige Ausgang gewählt ist, und darum ging es mir!Nochmal herzlichen Dank und viele Grüße
Marco

Marco Steinebach 8. Jan 2011 14:58

AW: Aufnehmen mit der Bass.dll - brauche Hilfe!
 
... und noch ein Nachtrag.
Es funktioniert auch, wie ich es im ersten Post schon beschrieben hatte. Dumm ist nur, wenn man eine Prozedur übergibt, und das @-Zeichen vergißt.
Hätte ich also
Delphi-Quellcode:
  MonitorKanal := Bass_StreamCreate (44100, 2, Bass_Sample_Float, @StreamProc_Push, nil);
geschrieben, hätte ich euch nicht nerven müssen. ;-)
Übrigens sind dann auch die lästigen Knackser vom Tisch!
Einen schönen Tag und viele Grüße
Marco


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

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