Je construis une bibliothèque de lecture/écriture de fichiers WAV pure Ruby, en apprenant des fonctionnalités Ruby plus profondes au fur et à mesure. Il fonctionne actuellement bien avec l'audio 16 bits, car je peux utiliser String.unpack('s*')
pour extraire des échantillons audio individuels dans un tableau d'entiers signés. Cependant, j'ai de la difficulté à comprendre comment traiter l'audio 24 bits. Chaque échantillon dans ce cas a une longueur de 3 octets. Quelle chaîne emballer/décompresser recommanderiez-vous dans ce cas, et est-ce que je devrais probablement modifier radicalement mon approche (en utilisant un rembourrage ou quelque chose comme ça)?Déballage de blocs de données de 3 octets/24 bits avec Ruby
1
A
Répondre
2
Comme vous avez utilisé unpack("s+")
, je suppose que votre échantillon est en gros boutiste. Voici une solution pas si rapide mais réalisable.
>> "ABCDEF".scan(/.../).map {|s| (s.reverse + 0.chr).unpack("V")}.flatten
=> [4276803, 4474182] #=> [0x414243, 0x444546] in HEX
'[4276803, 4474182] .map {| s | [s] .pack ("VX"). reverse} .join' semble faire l'affaire en sens inverse. –
On dirait que mes échantillons se sont avérés être peu endian, donc je n'avais pas besoin de l'inverse. Le '0.chr' était la clé ... il devait être rembourré pour que le déballage fonctionne correctement. Merci beaucoup. –