AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi BASS.dll (FX): BPM aus RecordStream
Thema durchsuchen
Ansicht
Themen-Optionen

BASS.dll (FX): BPM aus RecordStream

Ein Thema von Delphi-Narr · begonnen am 3. Mai 2016 · letzter Beitrag vom 4. Mai 2016
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 18:39
Hallo,

ich bin noch recht neu in der Verwendung der BASS.dll (und der BASS_FX ebenso).

Ich möchte den Ton, welcher via LineIn den PC erreicht, hinsichtlich BPM analysieren (oder bei jedem Beat benachrichtigt werden).

Bisher analysiere ich nur die Gesamtlautstärke (Peak) des Streams und versuche mir da mit diversen Algorithmen etwas auszulesen - klappt meistens auch, ist aber sehr störanfällig.

Hier erstmal die Initialisierung des Streams:

Delphi-Quellcode:
if (not BASS_RecordInit(-1)) then
begin
    Error('Error init record');
end else begin
    ChannelR := BASS_RecordStart(44100, 1, 0, @DuffRecording, NIL);
    if ChannelR = 0 then
      begin
        startedR := False;
          Error('Error starting recording!');
      end
    else
      begin
        // BASS_FX_BPM_CallbackSet(ChannelR, @bpmproc, 4, Makelong(45,230), BASS_FX_BPM_MULT2, 0); <- Problem
        startedR := True;
      end;
end;
Sobald ich die kommentierte Zeile wieder benutze, wird das Callback einmal aufgerufen und gibt einen recht beliebig wirkenden Wert aus. Anschließend bricht das Programm mit einer Array Index out Of Bounds ab.

Delphi-Quellcode:
procedure bpmproc(aStream: DWord; bpm: single; user: DWord);
begin
    Form3.Label3.Caption := FloatToStr(bpm);
end;
Benutze ich eine falsche Methode der bass_fx.dll oder wo liegt das Problem?!

Viele Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 19:53
Einfach zu wenig Informationen.

Bass, Bass_FX Version..
Was gibst du im Callback DuffRecording zurück.
Welche Parameter für FX wurden gesetzt ?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

AW: BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 20:01
Jeweils Version 2.4

Im DuffRecording gebe ich immer True zurück:

Delphi-Quellcode:
function DuffRecording(handle : HRECORD; const Buffer : Pointer; Length : DWORD; user : Pointer) : Boolean; stdcall;
begin
  Result := True;   // continue recording
end;
Ansonsten habe ich keine weiteren Parameter gesetzt - vielleicht liegt das dann daran?!

Viele Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 20:11
EDIT:
Ich denke es liegt hier dran.
BASS_FX_BPM_BeatCallbackSet nicht BASS_FX_BPM_CallbackSet.

BASS_FX_BPM_CallbackSet = return(Beat Position)
BASS_FX_BPM_CallbackSet(chan, @GetBPM_Callback, StrToFloat(ebPeriod.Text), 0, BASS_FX_BPM_MULT2, nil)

BASS_FX_BPM_BeatCallbackSet = return(BPM pro definierter Sekunden)
BASS_FX_BPM_BeatCallbackSet(chan, @GetBeatPos_Callback, nil)

gruss

Geändert von EWeiss ( 3. Mai 2016 um 21:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

AW: BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 20:55
Danke,

das sollte auf jeden Fall schonmal nen Unterschied machen - leider klappt es immer noch nicht.

Ich habe mal die Bass Units aus dem Projekt von dir genommen und hoffentlich alles angepasst.

Dennoch tritt nach
  BASS_FX_BPM_BeatCallbackSet(ChannelR, @bpmproc, 0); eine Zugriffsverletzung in der DLL auf...

Anbei mal die gesamte Unit, die ist betzüglich des Ablaufs mit deinem Beispielprojekt identisch soweit ich das sehe...

EDIT
Doch nicht...
Angehängte Grafiken
Dateityp: jpg error.jpg (281,8 KB, 14x aufgerufen)
Angehängte Dateien
Dateityp: pas Unit3.pas (2,8 KB, 14x aufgerufen)

Geändert von Delphi-Narr ( 3. Mai 2016 um 21:06 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 21:06
Habe meinen Beitrag editiert..


Nebenbei
BASS_FX_BPM_BeatCallbackSet(ChannelR, @bpmproc, 0);

gleicht
BASS_FX_BPM_BeatCallbackSet(ChannelR, @bpmproc, nil);

gruss
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 06:54 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