Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   verständnis problem beim Clonen eine Streams (https://www.delphipraxis.net/175707-verstaendnis-problem-beim-clonen-eine-streams.html)

EWeiss 11. Jul 2013 10:00


verständnis problem beim Clonen eine Streams
 
Es wird eine Streamcopy erstellt.
dem Handle wird der MixerStream übergeben.

Um die Daten jetzt in meinen Wrapper verarbeiten zu können hole ich mir den aktuell gültigen stream
Code:
return _streamcopy.Stream;
Bis dahin wurde er mit den jeweiligen Daten gefüttert die benötigt werden.
Nur leider sind die Daten nicht gültig um sie anschließend weiter verarbeiten zu können.
Erst nach einer umwandlung

Code:
            MusicStream stream = GetCurrentStream();
            if (stream != null)
            {
                BassMix.BASS_Mixer_StreamAddChannel(_streamcopy.ChannelHandle, _streamcopy.Stream, BASSFlag.BASS_DEFAULT);
                _bufferStream = new DSP_BufferStream();
                _bufferStream.ChannelHandle = _streamcopy.Stream;
                _bufferStream.OutputHandle = _streamcopy.ChannelHandle;
                _bufferStream.DSPPriority = -4000;
                _bufferStream.Start();

                float[] fft = new float[4096];
                int tst = Bass.BASS_ChannelGetData(_bufferStream.BufferStream, fft, (int)BASSData.BASS_DATA_FFT8192);

                return _bufferStream.BufferStream;
            }
            else
            {
                return 0;
            }
Sind die Daten vorhanden die ich benötige um sie zu visualisieren.
Die frage wäre warum muss ich die Daten erst wieder befüllen wenn sie doch eigentlich im _mixer.Stream vorhanden sein müßten.

Das selbe hier.

Code:
    public override void DSPCallback(int handle, int channel, IntPtr buffer, int length, IntPtr user)
    {
      try
      {
        this._streamBuffer.Write(buffer, length);
      }
      catch (Exception ex)
      {
        Log.Error("Caught Exception in DSPCallBack. {0}", ex.Message);
      }
    }
Code:
    private int WasApiCallback(IntPtr buffer, int length, IntPtr user)
    {
      if (_mixer == 0)
      {
        return 0;
      }
      try
      {
        return Bass.BASS_ChannelGetData(_mixer, buffer, length);
      }
      catch (Exception)
      { }
      return 0;
    }
Der Buffer wird gefüllt aber die Daten sind widerrum ungültig
obwohl Streamcopy eingentlich eine copy des _mixer.stream ist.


gruss

Uwe Raabe 11. Jul 2013 12:08

AW: verständnis problem beim Clonen eine Streams
 
Mangels umgebenden Deklarationen verstehe ich von dem Code leider nur Bruchstücke. Deshalb nur mal so ins Blaue: setzt du den Stream nach dem Befüllen wieder auf Anfang bevor du ihn verarbeitest?

EWeiss 11. Jul 2013 12:22

AW: verständnis problem beim Clonen eine Streams
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1221461)
Mangels umgebenden Deklarationen verstehe ich von dem Code leider nur Bruchstücke. Deshalb nur mal so ins Blaue: setzt du den Stream nach dem Befüllen wieder auf Anfang bevor du ihn verarbeitest?

Danke für deine Antwort.

Ich denke habe den Fehler gefunden.
Die bei Mediaportal haben als Rückgabe den kompletten Stream incl. Record meinem Wrapper übergeben
Gültig ist aber nur das Handle vom Channel
Code:
return _streamcopy.ChannelHandle;
Das hat mich jetzt 3 Tage gekostet um den fehler zu bemerken. :oops:

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 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