Byte Array macht Probleme

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    Byte Array macht Probleme

    Hallo Leute, ich hab mich extra wegen diesem problem auf dem Forum registriert und hoffe ihr könnt mir weiterhelfen.

    Also folgendes. Ich arbeite zur Zeit an meinem Irrklang Template Projekt, für die Leute die es nicht kennen:

    HTML-Quellcode

    1. http://www.ambiera.com/irrklang/downloads.html
    , einfach eine Audio Lib für .NET. Nun folgendes Problem:

    Ich habe ein projekt erstellt, in dem ein kleines statisches bytearray direkt vom memory aus abgespielt wird. Alles funktioniert wunderbar. Nur leider klappt es nur wenn das Array eine gewisse Größe nicht überschreitet, denn als ich ein größeres Array hergenommen habe (eine ogg statt xm) hängte sich das projekt auf wenn man das array im codefenster ansieht/einfügt, und danach jedes mal wieder wenn das projekt auch nur gestartet wird. Ich hab euch im Anhang die zwei nochmal hochgeladen. Gibt es eine möglichkeit das bytearray auszuweiten? Ich weiß es ist normal nur für einen kleinen binären zwischenspeicher gedacht, aber ich finds geil die musik aus dem memory ohne lokale extraktion zu spielen.

    Ich bin auf eure Antworten schon gespannt,

    Grüße

    Anhänge zu meinem FTP (wegen > 1 MB):

    Problemprojekt:

    *zensiert*

    Funktionierendes Testprojekt:

    *zensiert*



    Edit by Dodo:
    FTP Zugangsdaten NIEMALS öffentlich Posten, dies kann für dich sehr unangenehm werden. Wenn du die HTTP Links eingefügt hast, kannst du diesen Mod Hinweis mit entfernen
    -> Links entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Und du meinst ernsthaft irgendjemand hier lädt DEIN Projekt von Rapidshare runter?
    Du hast Glück wenns jemand anschaut und dann nur wenn das hier im Anhang ist.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Kannst Du evtl mal selbst ein kleines Testprojekt zusammenstellen, dass genau Deinen Fehler reproduziert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ thefiloe : Was soll ich denn machen wenns nicht in den Anhang reinpasst? In teile splitten??

    @ RodFromGermany : Bei einem kleinem projekt gibt es diesen fehler ja nicht wie gesagt... kannst die .vb datei ja mal mit notepad öffnen dann siehste das große array. Ich will ja wissen wieso das VS abstürzt und net einfach ne meldung gibt array zu groß oder son schmarn.
    Also Jungs, hier nochmal der link zum meinem ftp als html. Danke an Dodo für den Hinweis :)

    homo333.ohost.de/music/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Anus Rectum“ ()

    verstehe ich es richtig, dass du ein Bytearray quasie per Code in deinem Projekt verankert hast? xD
    Schätze mal, das eine solche herangehensweise eh zweckentfremdet² ist^^ Was spricht dagegen beim Start des Programms eine Datei einzulesen? (Dateien können auch in den Resourcen hinterlegt werden - sind also dann vor Fremdzugriffen relativ geschützt).

    Ansonsten poste doch mal Codeausschnitte.

    lg

    Edit: Jo, habs mir grade angesehen - was bitte soll daran "geil" sein eine 5,4 MB große .vb-Codedatei zu haben weil da ein lichtjahrelanges bytearray "reingecodet" ist??? xD Im ernst, für sowas ist das nicht gemacht - Daten<>Code! Allein der Editor braucht schon ewigkeiten die File auszulesen, VS solls dann besser hinbekommen UND noch alles auf seine Richtigkeit prüfen? Iwann crasht es eben.

    Lösung: Eine externe Datei für die Binärdaten (MeineBinärdaten.bin oder so) anlegen und in die Resourcen packen. Da hast du dann auch direkt zugriff auf dein Bytearry: My.Resources.MeineBinärdaten ist nämlich einer^^

    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()

    Danke, aber wenn du es so machst wie du sagst, über die Ressourcen, gibts bei

    VB.NET-Quellcode

    1. Private Shared SoundDataArray As Byte() = {My.Resources.FF}

    folgenden Fehler: "Der Wert vom Typ "1-dimensionales Array von Byte" kann nicht in "Byte" konvertiert werden."
    Also wie kann man aus der byte Resource das bytearray erzeugen? Und wie geht das mit array liste?
    Mit diesem tool kann man ein array aus ner datei machen lassen:

    HTML-Quellcode

    1. http://www.deadnode.org/sw/bin2h/


    Und mit SharpDevelop kann man dann ein C# projekt mit diesem array erstellen und mit selbigem dann nach vb konvertieren (weil ein array in vb immer einen unterstrich braucht um eine neue zeile einzuleiten). Den Code hast du doch schon in obigen projekt. Entwedet du lädst es von rapidshare oder von meinem ftp (siehe links oben). Es ist kein einfaches problem was sich mal eben mit worten lösen lässt, du siehst es dir am besten mit VS an. Soweit ich weiß ist es auch nicht möglich aus einer eingebetteten Resource ein bytearray zu erzeugen, das irrklang korrekt abspielt.

    Edit: Hab es gerade versucht, es kommt nur ein bisschen knistern oder gekrakel.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Anus Rectum“ ()

    Ich bin erst am montag wieder an meinem richtigem PC mit Visual studio. Du musst dich also etwas gedulden oder selbst auf die lösung kommen^^ werde es mir aber auf jeden fall mal ansehen - kann ja nicht so schwer sein xD

    Aber poste doch mal den Code, den du nutzt um die datei aus den resourcen abzuspielen. Das können doch nur ein paar Zeilen sein und bei allem Respekt - wenn ich mir Post #8 ansehe schließe ich direkt auf jemanden, der neu in .NET ist. Da hat sich sicher ein ganz simpler Fehler eingeschlichen.

    Aber ohne Code (das zeug auf deinem FTP-Server und von RS ist unbrauchbar, niemand hier wird eine 5MB große .vb-Codedatei als "geil", "praktisch" oder sonstwas absegnen) kann man dir nur sehr schwer helfen. Darum, poste doch deine aktuellen zehn Zeilen.

    lg

    Anus Rectum schrieb:

    Mit diesem tool kann man ein array aus ner datei machen lassen:

    HTML-Quellcode

    1. http://www.deadnode.org/sw/bin2h/
    Bitte Links richtig einfügen, dass man sie auch klicksen kann: deadnode.org/sw/bin2h/

    Ähm - jetzt habichmal draufgeklickst - verstehe ich das richtig: Du versuchst mit diesem tool eine Ogg-Datei in eine c++ - Header-Datei zu konvertieren :?: :?:
    @ErfinderDesRades
    ...und wenn`s fertig ist hat er in seinem Code sowas stehen:

    VB.NET-Quellcode

    1. Private Shared SoundDataArray As Byte() = {&H4f, &H67, &H67, &H53, &H0, &H2, _
    2. &H0, &H0, &H0, &H0, &H0, &H0, _
    3. &H0, &H0, &Hec, &H37, &H0, &H0, _
    4. 5,4 MB später....
    5. &H0, &H0, &H0, &H0, &H0, &H0, _
    6. &H0, &H0, &H0, &He}


    da sehe ich aber grade, dass das die binärdaten einer .WAV sein sollen oder (@TE)? Ich vermute mal, dass sich WAVE und OGG voneinander unterscheiden und es vllt nur mit .wav funst.
    Jungs, es funzt mit allem unabhängig von ogg oder wav oder xm oder was auch immer. Du hast das mit der wav in dem nicht funktionierenden Projekt gelesen, hab ich Recht? Das ist nur ein Testprojekt vom Ambiera team das ich abgeändert habe, sprich das array ausgetauscht und sonst nix. Bin2h erzeugt nen binärarray aus einer beliebigen datei, das man auch sofort in C# verwenden kann. Um dieses Array in Vb zu nutzen müsst ihr das nochmal mit nem tool konvertieren, ich nehm dafür ein leeres C# Projekt, klopp das array nei und konvertier das ganze mit SharpDevelop in ein nutzbares VB Array. Ich bin mir aber mittlerweile sicher, dass ein projekt in VB nur eine gewisse codekapazität aufbringt und daher bei 20000 zeilen (in der Größenordnung) einfach irgendwann abstürzt. Auch sharp develop weigert sich das große array zu nehmen und gibt einfach einen build error aus, anstatt einfach abzustürzen. Es braucht dafür auch sehr lange um das projekt überhaupt zu öffnen xD

    @FreakJNS: Nein ich bin kein VB Anfänger, ich hab nur die Klammern vergessen wegzumachen, war in eile xD

    VB.NET-Quellcode

    1. Imports irrklang
    2. Module Module1
    3. Sub Main()
    4. Dim engine As New ISoundEngine()
    5. Dim source As ISoundSource = engine.AddSoundSourceFromMemory(My.Resources.mp3, "myTestSound.mp3")
    6. engine.Play2D("myTestSound.mp3")
    7. Console.ReadLine()
    8. End Sub
    9. End Module


    Funktioniert problemlos bei mir(ikpMP3.dll muss in den Ordner der exe kopiert werden da ich hier eine mp3 Datei verwende), mit einer ogg Datei hat es auch super funktioniert! Du solltest mal deine Datei checken ob die nicht beschädigt ist oder sowas.

    Ach ja außerdem solltest du im Namen die richtige Dateiendung(.ogg, .mp3 ...) verwenden, da sonst die Engine Probleme machen könnte ;)
    okay, dann kein anfänger - trotzdem merkwürdig, dass du mit der Fehlermeldung nichts anfangen konntest... wayne.

    Fakt ist, dass Binärdaten von solchem ausmaß NICHTS im Code zu suchen haben. Für kleinkram (wenige byte) oder Testzwecke könnte ich es verstehen - AudioDateien aber definitiv nicht^^

    Warum es bei dir nicht klappt weiß ich nicht - ich sehe ja immernoch keinen Code xD
    Aber rein vom Denken her sollte es klappen, denn der Bytearray aus den Resourcen sollte identisch zu dem gecodetem von bin2h sein. Erstell doch Testweise mal eine Textdatei, schreib iwas hinein und vergleiche die Binärdaten die bin2h erzeugt und die, die von den Resourcen zurückgegeben werden.