AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BASS.dll Probleme

Ein Thema von juelin · begonnen am 20. Mai 2024 · letzter Beitrag vom 25. Mai 2024
Antwort Antwort
Seite 2 von 2     12   
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
243 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: BASS.dll Probleme

  Alt 23. Mai 2024, 20:37
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.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
juelin

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

BASS.dll bin verzweifelt

  Alt 25. Mai 2024, 13:00
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
Angehängte Dateien
Dateityp: pas Unit1.pas (9,8 KB, 1x aufgerufen)
Jürgen Linder
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
243 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: BASS.dll Probleme

  Alt 25. Mai 2024, 20:14
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.ä.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 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