Zitat:
Anders würde man das in Delphi auch nicht machen können.
In Delphi mache ich folgendes.
Delphi-Quellcode:
function TBASSBoxVis.GetWaveData: TWaveData;
begin
// Get Wave data from stream
if Basswasapi_Loaded and USE_WASAPI then
BASS_WASAPI_GetData(@Result, 1024)
else
Bass_ChannelGetdata(BB_VisRenderThread.Stream, @Result, 1024);
end;
function TBASSBoxVis.GetWaveData32: TWaveData32;
begin
// Get Wave data from 32 Bit stream
if Basswasapi_Loaded and USE_WASAPI then
BASS_WASAPI_GetData(@Result, 4096)
else
Bass_ChannelGetdata(BB_VisRenderThread.Stream, @Result, 4096);
end;
Wird wie folgt ausgeführt
Delphi-Quellcode:
if (ChanInfo.flags and BASS_SAMPLE_FLOAT) = BASS_SAMPLE_FLOAT then
begin
FWaveData32 := GetWaveData32;
for i := 0 to 1023 do
if FWaveData32[i] > 0 then
FWaveData[i] := round(Min(FWaveData32[i] * 32768, 32767))
else
FWaveData[i] := round(Max(FWaveData32[i] * 32768, -32768));
end else
FWaveData := GetWaveData;
RenderOpenGL(@FWaveData, @FFFTData, BB_VisRenderThread.StreamPos);
Dort nehme ich einen pointer was ohne Probleme funktioniert.
Delphi-Quellcode:
function TBASSBoxVis.RenderOpenGL(WaveData, FFT: Pointer;
MediaPos: Dword): BOOL;
Für wasapi gibt es eine Überladung..
Code:
public extern static int BASS_WASAPI_GetData(IntPtr buffer, int length);
Auch für die andere Funktion könnte ich einen Pointer verwenden
Code:
public extern static int BASS_ChannelGetData(int
handle, IntPtr buffer, int length);
Dann wäre ich von der
API her der von Delphi schon mal gleich.
Jetzt wäre dann nur noch zu klären was übergebe ich als Pointer.
In Delphi wäre das der Pointer auf TWaveData
In c# mag er das aber nicht wenn ich den Pointer auf die Class WaveData zurück gebe.
Zitat:
Error 1 'MediaPortal.UI.Presentation.Players.WaveData32' is a 'type' but is used like a 'variable' D:\MP 2.0\MediaPortal-2\MediaPortal\Source\UI\Players\BassPlayer\BassPla yer.cs 449 63 BassPlayer
Irgendwie hab ich in C# da kleine Probleme.. kann nur besser werden
gruss