NOTE: THIS DOCUMENT IS OBSOLETE, PLEASE CHECK THE NEW VERSION: "Mathematics of the Discrete Fourier Transform (DFT), with Audio Applications --- Second Edition", by Julius O. Smith III, W3K Publishing, 2007, ISBN 978-0-9745607-4-8. - Copyright © 2017-09-28 by Julius O. Smith III - Center for Computer Research in Music and Acoustics (CCRMA), Stanford University
<< Previous page TOC INDEX Next page >>
When Do We Have to Swap Bytes When Changing Computers?
When moving a soundfile from one computer to another, such as from a ''PC'' to a ''Mac'' (Intel processor to Motorola processor), the bytes in each sound sample have to be swapped. This is because Motorola processors are big endian (bytes are numbered from ''left to right'' in a multi-byte word) while Intel processors are little endian. Any Mac program that supports a soundfile format native to PCs (such as .wav files) will swap the bytes for you. You only have to worry about swapping the bytes yourself when reading raw binary soundfiles from a foreign computer, or when digging the sound samples out an ''unsupported'' soundfile format yourself.
Since soundfiles typically contain 16 bit samples (not for any good reason, as we now know), there are only two bytes in each audio sample. Let L denote the least-significant byte, and M the most-significant byte. Then a 16-bit word is most naturally written , i.e., the most-significant byte is most naturally written to the left of the least-significant byte, analogous to the way we write binary or decimal integers. This ''most natural'' ordering is used in big-endian processors:
Little-endian machines, on the other hand, store bytes as
These orderings are preserved when the sound data are written to a disk file.Since a byte (eight bits) is the small addressable unit in all modern day processor families, we don't have to additionally reverse the bitsin each byte. In other words, bits are not given explicit ''addresses'' in memory. They are extracted by means other than simple addressing (such as masking and shifting operations, table look-up, or by means of specialized processor instructions).
Table 4.7 lists popular present-day processors and their ''endianness'':4.10
When compiling C or C++ programs under UNIX, there may be a BYTE_ORDER macro in endian.h or bytesex.h. In other cases, there may be a defined macro __INTEL__, __LITTLE_ENDIAN__, __BIG_ENDIAN__, or the like.