Flashhilfe.de - Flash Community

ArgumentError: Error #2084: Die AMF-Kodierung der Argumente darf nicht 40K übers [Flash 11]

 


AntwortenRegistrieren Seite1  

Roxas8139#1
Benutzerbild von Roxas8139
Beiträge: 4
Registriert: Feb 2010

09.04.2012, 13:04

Hallo Community,
wie der Titel schon sagt habe ich ein kleines Problem mit einem Laufzeitfehler.
Ich habe hier probiert einen String (MP3-Format) in ein ByteArray umzuwandeln und dann als Sound abzuspielen.
ActionScript:
1
2
3
4
5
6
var data:ByteArray = new ByteArray();
   data.writeUTFBytes(string);
   data.compress();
   var background = new Sound;
   background.loadCompressedDataFromByteArray(data, data.length);
   background.play();


Leider bin ich nicht sehr geschickt in AS3 und erhalte bei der Ausführung diesen Fehler:

ActionScript:
1
2
3
4
5
6
ArgumentError: Error #2084: Die AMF-Kodierung der Argumente darf nicht 40K übersteigen.
   at flash.media::Sound/loadCompressedDataFromByteArray()
   at ajax_player_as3_fla::MainTimeline/onLoaded()
   at flash.events::EventDispatcher/dispatchEventFunction()
   at flash.events::EventDispatcher/dispatchEvent()
   at flash.net::URLLoader/onComplete()


Ich hoffe ihr könnt mir helfen.

Frohe Ostern wünscht euch,
Marco
Geändert von Roxas8139 am 09.04.12 um 13:05 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

09.04.2012, 18:15

Hallo und Willkommen hier im Forum!
Was ist dir denn nicht klar? Der Fehler sagt doch alles:
Die AMF-Kodierung der Argumente darf nicht 40K übersteigen.
also darf dein Byte-Stream nicht größer als 40.000 Einheiten sein, ergo musst du deine Sound-Datei kleiner machen oder in mehrer Teile aufteilen.
Was hast du denn vor zu machen?
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Roxas8139#3
Benutzerbild von Roxas8139
Beiträge: 4
Registriert: Feb 2010

Themenautor/in

09.04.2012, 18:53

Also in dem Fall habe ich ein kleines Problem, da die data.length einen Wert von 827078 besitzt.

Ich habe mehrere eigene Spiele-Projekte am laufen und gleichzeitig ein Problem mit den Raubkopieren die die MP3s einfach beim Übertragen an den Flashplayer abfangen. So wollte ich nun die MP3 verschlüsselt übertragen und im Player wieder entschlüsseln. das klappt soweit ganz gut. Ich muss nur noch eine Möglichkeit finden die ByteArray (oder String) - Variable in ein abspielbares Soundformat zu bringen.

Ich habe eine recht ansprechende Möglichkeit gefunden (liegt im Anhang [ org.zip (9.84 KB)]). Dies ist ein Filereferenzloader der die eingegebenen Daten in eine SWF packt und dann zum Abspielen bereit stellt. Durch die Erweiterung in den Kommentare der Autorenseite (http://www.flexiblefactory.co.uk/flexible/?p=46) kann er auch ByteArrays laden. Leider bin ich durch meine stark eingeschränkten AS3 Kenntnisse unfähig diese Bibliothek korrekt einzusetzen.



Gruß,
Marco
vindel#4
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

09.04.2012, 20:10

Die Seite die du geschickt hast besitzt doch auch ein Beispiel wo du genau sehen kannst wie man die Lib nutzt:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[..]
import org.audiofx.mp3.MP3FileReferenceLoader;
import org.audiofx.mp3.MP3SoundEvent;
var loader:MP3FileReferenceLoader;
var fileReference:FileReference;
function MP3FileReferenceTest()
{
     loader=new MP3FileReferenceLoader();
     loader.addEventListener(MP3SoundEvent.COMPLETE,mp3LoaderCompleteHandler);
     fileReference=new FileReference();
     fileReference.addEventListener(Event.SELECT,fileReferenceSelectHandler);
     stage.addEventListener(MouseEvent.CLICK,clickHandler);
}
function clickHandler(ev:MouseEvent):void
{
     fileReference.browse([new FileFilter("mp3 files","*.mp3")]);
}
function fileReferenceSelectHandler(ev:Event):void
{
     loader.getSound(fileReference);
}
function mp3LoaderCompleteHandler(ev:MP3SoundEvent):void
{
     ev.sound.play();
}
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Werbung
Beiträge: 0
Registriert: Feb 2016


Roxas8139#5
Benutzerbild von Roxas8139
Beiträge: 4
Registriert: Feb 2010

Themenautor/in

09.04.2012, 21:05

Diese Datei innerhalb des Archives habe ich auch gefunden. Nur benötige ich ja nicht laden von FileReference sondern von ByteArray. Unten in den Kommentaren der Seite wird das Skript durch getSoundBA() ergänzt.

So hab ich das jetzt eingesetzt:


ActionScript:
1
2
3
4
5
6
7
8
9
10
11
var data:ByteArray = new ByteArray();
   data.writeUTFBytes(string);
   data.compress();
        loader=new MP3FileReferenceLoader();
     loader.addEventListener(MP3SoundEvent.COMPLETE,mp3LoaderCompleteHandler);
   loader.getSoundBA(data);

function mp3LoaderCompleteHandler(ev:MP3SoundEvent):void
{
       ev.sound.play();
}



So bekomme ich aber zur Laufzeit wieder einen Fehler.

ActionScript:
1
2
3
4
5
6
7
8
9
Error: Error #2030: Das Dateiende wurde erkannt.
   at flash.utils::ByteArray/readMultiByte()
   at MP3Parser/getFirstHeaderPosition()
   at MP3Parser/loadMP3ByteArray()
   at org.audiofx.mp3::MP3FileReferenceLoader/getSoundBA()
   at ajax_player_as3_fla::MainTimeline/onLoaded()
   at flash.events::EventDispatcher/dispatchEventFunction()
   at flash.events::EventDispatcher/dispatchEvent()
   at flash.net::URLLoader/onComplete()



Mir mit meinen geringen kenntnissen sagt das, dass er das ende des Bytearrays erreicht hat, aber wo ist das ein fehler?


Der für ByteArray geänderte Loader ist hier org.zip (9.84 KB)
vindel#6
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

10.04.2012, 11:56

Also es gibt zwei Möglichkeiten:
Der Fehler passiert, wenn du den ID3-Tag einlesen möchtest.
Da du immer 3 Stellen einliest
ActionScript:
1var str:String=mp3Data.readMultiByte(3,"us-ascii");
, wird ein Fehler ausgegeben wenn keine 3 verfügbar sind. Also schau einfach ob du noch 3 Bytes in deinem Array hast:
ActionScript:
1mp3Data.bytesAvailable();
.
Es kann aber auch sein, dass der Code gar nicht falsch ist, sondern deine MP3-Datei. Flash ist SEHR zickig mit dem Einlesen des ID3-Tags und es wird an allen möglichen Stellen sehr davon abgeraten, da null Verlass darauf ist!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Roxas8139#7
Benutzerbild von Roxas8139
Beiträge: 4
Registriert: Feb 2010

Themenautor/in

10.04.2012, 18:04

So Jetzt funktioniert es. Deine Information mit der Defekten MP3 hat mich darauf gebracht die Decodierung zu Überprüfen und siehe da: eine Variable war falsch.
Trotzdem bin ich echt Glücklich, dass die ByteArrays nun als Sound abgespielt werden.


DANKE
Geändert von Roxas8139 am 10.04.12 um 18:59 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de