2011-12-27 2 views
0

J'ai un fichier audio dans mon application iPhone que je convertis en un objet NSData. Idéalement, j'aimerais obtenir une série de doubles à partir du fichier audio. Existe-t-il un moyen de convertir NSData en un tableau de doubles?Convertir NSData en double matrice dans Objective C

Voici la sortie de courant de la ligne où NSLog(@"%@\n", data) données est un objet NSData du fichier audio:

<0000001c 66747970 6d703432 00000001 6d703431 6d703432 69736f6d 00000008 77696465 004d956e 6d646174 21000340 681c210c 53ed990c 1f33e94d ab588b95 55a61078 08799c67 f1f706cc 595b4eb6 08cfb807 ea0e3c40 03c13303 e674e05a... 

Répondre

2

Procédé -bytes retourner les octets bruts du NSData. Vous pouvez ensuite le lancer sur un pointeur pour doubler (en supposant que l'endianness est correct).

const double* array_of_doubles = (const double*)[data bytes]; 
NSUInteger size_of_array = [data length]/sizeof(double); 

Edit: Les données sont un fichier MP4. Vous ne pouvez pas convertir MP4 directement en un tableau significatif double. Je ne sais pas ce que vous voulez faire, mais peut-être AVAssetReader aiderait.

+0

Je reçois des nombres énormes faisant ceci que je ne suis pas sûr sont corrects. Que voulez-vous dire par "supposer l'endianness correct"? – coder

+0

@coder: http://en.wikipedia.org/wiki/Endianness#Examples_of_storing_the_value_0A0B0C0Dh_in_memory. Et êtes-vous sûr qu'ils sont stockés en double? Je pense que les entiers sont plus susceptibles. – kennytm

+0

Ils ne sont pas stockés en tant que doubles ou ints ... il ressemble à des valeurs hexadécimales lorsque j'exécute cette ligne: NSLog (@ "data:% @", data); Où les données sont un objet NSData ... – coder