AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi type nach c#

Ein Thema von EWeiss · begonnen am 5. Nov 2014 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Delphi type nach c#

  Alt 5. Nov 2014, 16:55
Danke.
Weis jetzt nicht ob das so möglich ist unter MSV

int16 ja da muss ich drauf bestehen denn anschließend benötige ich das gleiche nochmal
mit 32 Bit Floating Point also float[1024]

Ich wollte es so machen
Geht aber nicht.

Code:
namespace MediaPortal.UI.Presentation.Players
{
  /// <summary>
  /// Provides access to sound player functionality needed to render Wave.
  /// </summary>
  public interface IWavePlayer : IAudioPlayer
  {
    float WaveData = new WaveData[1023];
    int16 WaveData32 = new WaveData32[1023];

    //Hier ne function mit der ich den wert zurückgeben kann wie in Delphi halt
  }
}
0..1023 = 1024 in c# ?

gruss
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Delphi type nach c#

  Alt 5. Nov 2014, 17:16
Da fehlen noch die [] in der Deklaration. Egal was Du willst, es geht nur so, wie ich beschrieben habe. Such dir eins aus.
Und klar: 1024 Elemente belegen die Indizes 0 bis 1023 einschließlich. Also müsstest Du deine Arrays mit [1024] instantiieren.
Code:
namespace MediaPortal.UI.Presentation.Players
{
  public class WaveData
  { // siehe meinen Code
  }

  /// <summary>
  /// Provides access to sound player functionality needed to render Wave.
  /// </summary>
  public interface IWavePlayer : IAudioPlayer
  {
    int[] GetWaveData(); // so
    WaveData GetWaveData1(); // oder so
 }

}
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Delphi type nach c#

  Alt 5. Nov 2014, 17:51
Danke dir..
Bin jetzt etwas Durcheinander weil von einem Beitrag auf den anderen verwiesen wird.
Werd mal schauen ob ich das jetzt irgendwie zusammenkleben kann.

gruss

Geändert von EWeiss ( 6. Nov 2014 um 09:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Delphi type nach c#

  Alt 5. Nov 2014, 19:17
Komme noch nicht ganz zurecht.

Code:
namespace MediaPortal.UI.Presentation.Players
{
  /// <summary>
  /// Provides access to sound player functionality needed to render Wave over 32 Bit Floating Point. See BASS_SAMPLE_FLOAT.
  /// </summary>
  public class WaveData32
  {
    private readonly float[] data = new float[1024];
    public float[] Data { get { return data; } }
  }
 
  /// <summary>
  /// Provides access to sound player functionality needed to render Wave.
  /// </summary>
  public class WaveData
  {
    private readonly Int16[] data = new Int16[1024];
    public Int16[] Data { get { return data; } }
  } 

  /// <summary>
  /// Provides access to sound player functionality needed to render a spectrum analyzer.
  /// </summary>
  public interface IVizAnalyze : IAudioPlayer
  {
   
    WaveData GetWaveData();

    WaveData32 GetWaveData32();
  .....
Rückgabe: c#
Code:
    public WaveData GetWaveData()
    {
      BassStream vizStream = _controller.PlaybackProcessor.VizStream;
      if (vizStream == null)
        return GetWaveData(); // <- Fehler?

      if (_externalState == PlayerState.Active)
      {
        if (BassWasapi.BASS_WASAPI_IsStarted())
        {
          BassWasapi.BASS_WASAPI_GetData(return , 2048);
        }
        else
          Bass.BASS_ChannelGetData(vizStream.Handle, return, 2048);
      }
    }
Delphi wäre return @Result
also
TWaveData = array [0 .. 1023] of smallint;

wie muss ich das noch umsetzen?
Will irgendwie nicht.

gruss
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Delphi type nach c#

  Alt 5. Nov 2014, 19:47
100% habe ich den Code nicht verstanden, aber ich versuche es mal

Code:
public WaveData GetWaveData()
{
  WaveData result = new WaveData();
  BassStream vizStream = _controller.PlaybackProcessor.VizStream;
  if (vizStream == null)
     return result;

  if (_externalState == PlayerState.Active)
  {
    if (BassWasapi.BASS_WASAPI_IsStarted())
    {
      BassWasapi.BASS_WASAPI_GetData(WaveData.Data , 2048);
    }
    else
    {
      Bass.BASS_ChannelGetData(vizStream.Handle, WaveData.Data, 2048);
    }
  }
  return result;
}
Hier ist es wichtig, wie die DLL-Aufrufe in C# deklariert sind.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Delphi type nach c#

  Alt 5. Nov 2014, 20:23
100% habe ich den Code nicht verstanden, aber ich versuche es mal

Code:
public WaveData GetWaveData()
{
  WaveData result = new WaveData();
  BassStream vizStream = _controller.PlaybackProcessor.VizStream;
  if (vizStream == null)
     return result;

  if (_externalState == PlayerState.Active)
  {
    if (BassWasapi.BASS_WASAPI_IsStarted())
    {
      BassWasapi.BASS_WASAPI_GetData(WaveData.Data , 2048);
    }
    else
    {
      Bass.BASS_ChannelGetData(vizStream.Handle, WaveData.Data, 2048);
    }
  }
  return result;
}
Hier ist es wichtig, wie die DLL-Aufrufe in C# deklariert sind.
Super.. Danke schön
Jetzt nur noch ein kleines Problem..

Zitat:
Error 2 Argument 1: cannot convert from 'short[]' to 'float[]' D:\MP 2.0\MediaPortal-2\MediaPortal\Source\UI\Players\BassPlayer\BassPla yer.cs 445 42 BassPlayer
BASS_WASAPI_GetData erwartet als Argument float[] ich muss aber short übergeben

Delphi
Delphi-Quellcode:
  TWaveData = array [0 .. 1023] of smallint; // Wave Data
  TWaveData32 = array [0 .. 1023] of Single; // 32 Bit Wave Data
gruss
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Delphi type nach c#

  Alt 6. Nov 2014, 00:26
Dann wirst du wohl zwei Arrays brauchen, eins mit floats und eines mit int16. Das float-Array in GetData() einsetzen, dessen Inhalt danach unter dem üblichen Genauigkeitsverlust in das int16-Array umkopieren (bzw. "umkopikonvertieren"), und dieses dann nachher weiter benutzen. Anders würde man das in Delphi auch nicht machen können, wenn schlicht die Typen (und in diesem Fall sogar die Längen in Byte) nicht übereinstimmen.

Am Rande: Ich vermute, dass Wave-Daten als Floats in Werten von -1..1 geliefert, als int16 aber -32768..32767 erwartet werden. Du müsstest in diesem Fall dann natürlich entsprechend skalieren beim "umkopikonvertieren".
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 6. Nov 2014 um 00:30 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz