سؤال

Let me preface this by stating that I am not terribly familiar with ActionScript, so forgive any seemingly obvious things that I may be missing.

I current have a very simple function with an AS3 application that will output a file when a button is clicked using a FileReference object as seen below :

//Example download event
public function download(event:MouseEvent):void
{
      //Build a simple file to store the current file
      var outputFile:FileReference = new FileReference();

      //Perform a function to build a .wav file from the existing file
      //this returns a ByteArray (buffer)
      downloadBuffer = PrepareAudioFile();

      //Attempt to build the filename (using the length of bytes as the file name)
      var fileName:String = downloadBuffer.length.toString() + ".wav";

      //Save the file   
      audioFile.save(downloadBuffer, fileName);
}

There appears to be an error occurring somewhere within here that is resulting in the File not being outputted at all when I attempt to concatenate the file name as seen above. However, if I replace the fileName variable with a hard-coded option similar to the following, it works just fine :

audioFile.save(downloadBuffer, "Audio.wav");

Ideally, I would love to derive the duration of the file based on the length of the byteArray using the following :

//Get the duration (in seconds) as it is an audio file encoded in 44.1k
var durationInSeconds:Number = downloadBuffer.length / 44100;

//Grab the minutes and seconds
var m:Number = Math.floor(durationInSeconds / 60);
var s:Number = Math.floor(durationInSeconds % 60);

//Create the file name using those values
audioFile.save(downloadBuffer, m.toString() + "_" + s.toString() + ".wav");

Any ideas would be greatly appreciated.

هل كانت مفيدة؟

المحلول 2

I was finally able to come up with a viable solution that required explicit typing of all of the variables (including using a separate variable for the .toString() operations) as seen below :

public function download(event:MouseEvent):void
{
      //Build a simple file to store the current file
      var outputFile:FileReference = new FileReference();

      //Perform a function to build a .wav file from the existing file
      //this returns a ByteArray (buffer)
      downloadBuffer = PrepareAudioFile();

      //When accessing the actual length, this needed to be performed separately (and strongly typed)
      var bufferLength:uint = downloadBuffer.length;

      //The string process also needed to be stored in a separate variable
      var stringLength:String = bufferLength.toString();

      //Use the variables to properly concatenate a file name
      var fileName:String = dstringLength + ".wav";

      //Save the file   
      audioFile.save(downloadBuffer, fileName);
}

It's bizarre that these had to explicitly be stored within separate values and couldn't simply be used in-line as demonstrated in the other examples.

نصائح أخرى

Where is the problem other than missing the parentheses in m.toString()?

Aren't you missing a .lenght before the division of downloadBuffer as well?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top