2010-03-04 7 views
3

J'essaie de convertir le byteArray d'un objet sonore en un tableau avec des flottants. L'objet sonore reproduit bien & à pleine longueur, mais le réseau de flotteurs je reçois de lui est coupée (mais semble correct), donc je dois faire quelque chose de mal dans la conversion:son brut byteArray à float Array

var s:Sound = mySound; 
s.play(); // plays fine 

var bytes:ByteArray = new ByteArray(); 
bytes.endian = Endian.LITTLE_ENDIAN; 
s.extract(bytes, s.bytesTotal, 0); 

var leftChannel:Array = new Array(); 
var rightChannel:Array = new Array(); 

bytes.position = 0; 

while (bytes.bytesAvailable) 
{ 
    leftChannel.push(bytes.readFloat()); 
    rightChannel.push(bytes.readFloat()); 
} 

et voici ce je reçois:

alt text http://i48.tinypic.com/17wmls.jpg

les deux canaux principaux sont l'objet sonore d'origine. Les deux premiers sont les données de tableau flottantes. Je les ai alignés pour que vous puissiez voir que le début est coupé et évidemment la longueur est incorrecte.

Merci pour toutes les réponses ...

Répondre

1

ok, il y avait deux problèmes:

  1. le fichier mp3 i importais était en quelque sorte de corruption, qui a provoqué le début à couper
  2. la longueur i défini à l'extrait était pas correct, de trouver toute la longueur de son utilisation

var numTotalSamples: Number = int (s. longueur * 44,1); // en supposant que le taux d'échantillonnage de 44,1 kHz

alors:

s.extract (octets, numTotalSamples, 0);

+0

lors de l'extraction du son à l'aide de cet objet (octets, numTotalSamples, 0); renvoie une erreur sur la console fms qui n'a pas pu exécuter cette méthode. –