Trump Jr.’s Russia meeting sure sounds like a Russian intelligence operation (archive.is)
Donald Trump Jr. is seeking to write off as a nonevent his meeting last year with a Russian lawyer who was said to have damaging information about Hillary Clinton. “It was such a nothing,” he told Fox News’s Sean Hannity on Tuesday. “There was nothing to tell.”
But everything we know about the meeting — from whom it involved to how it was set up to how it unfolded — is in line with what intelligence analysts would expect an overture in a Russian influence operation to look like. It bears all the hallmarks of a professionally planned, carefully orchestrated intelligence soft pitch designed to gauge receptivity, while leaving room for plausible deniability in case the approach is rejected. And the Trump campaign’s willingness to take the meeting — and, more important, its failure to report the episode to U.S. authorities — may have been exactly the green light Russia was looking for to launch a more aggressive phase of intervention in the U.S. election campaign.
Emphasis mine.
(This is the 19th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
I'm hoping to create a system which can drive up to 32 speakers for US$300. The system is intended for playback of high-quality, pre-recorded media but would also be suitable for highly lossy streaming. Where a client is able to prioritize data retrieval, it is possible to sacrifice three dimensional sound then two dimensional sound then one dimensional sound (stereophonic) before sacrificing frequency response of zero dimensional sound (monophonic). This provides the most immersive experience with the least bandwidth. In favorable circumstances, only 5% of the data is critical and this may survive in an environment of 70% packet loss. This is far outside the range of TCP window-scaling which has become the favored distribution mechanism of multi-national corporations (and those who would emulate them).
After gathering requirements and devising a specification, I expect to receive a clone Arduino Due and five Microchip MCP4921 12 bit SPI DACs. The former is likely to irritate me and the latter will sound horrible; especially if they only bias a speaker in one direction. However, this is sufficient for testing. Assuming I don't destroy more hardware, I'll have enough hardware to test a five speaker, 3D surround sound system. Assuming hardware doesn't wear at an alarming rate, I expect to have something working by Sep 2017. Unfortunately, such an estimate may be optimistic. Although suitable hardware is not expected within the next 10 days, software development can begin.
I don't have a 3D recording system and so test data is going to be extremely limited. It is likely to be a batch conversion from monophonic or stereophonic WAV to Ambisonic WXYZ format implicitly held in a quadraphonic WAV. Conversion may perform effects such as soundstage rotation. This would be followed by a stub implementation which streams a quadraphonic WAV to an Arduino. And how will this be achieved? Well, it definitely won't integrate as a sound device which inter-operates with a host operating system. (If your operating system doesn't already support sound-fields then such integration will, at best, present a two dimensional 7.1 interface but is more likely to appear as a stereophonic device.) It is likely that the Arduino won't appear as a dedicated USB device. From documentation, it appears that the interface will be a virtual serial port over USB. This may be sufficient for testing but it won't be suitable for deployment.
In the general case, few liberties can be taken with a virtual serial port and therefore extensive framing of data is required. It can be assumed that transfers are contiguous up to 512 bytes. However, this may be more apparent to a device using Serial::readBytes() rather than a host using POSIX read(). The majority of data is transferred from host to device and it may be possible to relax framing constraints in this direction only. In the most paranoid case, it may be preferable to send bit-stuffed, fixed-length cells in both directions. However, this greatly increases processing load at both ends. Thankfully, it isn't required to also be DC-balanced. From a failed venture, I already have rights to tested code which performs this function.
(This is the 18th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
I'm hoping to create a system which can drive up to 32 speakers for US$300 and I'm enthused that competitors are charging obscene prices for similar equipment. For example:-
I've made significant advance when comparing micro-controller architectures. AVR has a distinct advantage for low-level operations given that it has 32×8 bit registers which can be paired into 16 bit registers. ARM has a distinct advantage for DSP functionality and deliberately aims to provide a single-cycle multiply (or multiply-accumulate). However, ARM provides 13 general-purpose registers and, in Thumb mode (16 bit instructions), this is restricted to 8×32 bit registers.
To implement a chunky-to-planar bit matrix transpose, the latter has a small advantage. Likewise, at any given speed, one-cycle multiply out-performs two-cycle multiply. So, ARM is the target architecture. XMos would be a great architecture but it is too niche for me.
By chance, I found that an Arduino Due meets or greatly exceeds specification in all categories with the exception that there is 96KB RAM. This is exactly the size required for triple-buffering of 4 channel, 32 bit PCM audio at 48kHz when transferred in 2048 sample blocks. It is possible to transfer audio in smaller chunks but this may incur (additional) scope for audio glitches when decoding video with a frame rate below 30Hz.
An Arduino Due has hardware SPI but it would be unable to handle 25Mb/s reliably. Or, more accurately, a suitable sub-multiple of 84MHz. So, the chunky-to-planar bit matrix transpose remains useful. However, with 54 GPIO, it may be possible to bit-bang 32 or more SPI DACs directly. One option to reduce cabling is to have four or more satellite DACs with four or more channels per satellite DAC.
Any use of Arduino incurs linking to code under multiple open source licences. This includes GPL2 and Creative Commons libraries and an LGPL boot-loader. At the very least, use of an Arduino boot-loader requires compiled code to be distributed. This applies even if a cloned Arduino uses an Arduino boot-loader. If you don't like these terms then seek alternatives.
Anyhow, hardware requirements can be arranged around a US$37.40 board if implementation is open and buffer size is amended.
Quentin Tarantino Met With Margot Robbie For Sharon Tate: Sources
Word has gotten out that Quentin Tarantino’s next film will be a drama revolving around the Manson Family murders. Deadline has heard that Tarantino met with Margot Robbie to potentially play Sharon Tate, the actress wife of director Roman Polanski who was slain in 1969 in a brutal murder whose savagery shocked the country.
How Kim Kardashian’s Lesser Siblings Are Sullying Her Brand
Every Kardashian is a snowflake: beautiful, unique, and with her own distinctive brand of merchandise. Kim is the sexy one and the famous one. Khloé is the funny one. Kourtney is the healthy one/the super mom. Rob is the boy. As soon as they graduated from puberty/fake high school, Kendall and Kylie Jenner took on their own roles in the family business, garnishing their half-siblings’ reality TV show empire with their own special flair (aka black fashion trends they found on Instagram). Kylie had big lips and a rapper boyfriend, and Kendall was a real model. Kylie wore long acrylic nails and Kendall had sleep paralysis. Kylie realized lots of things and Kendall appeared to realize absolutely nothing. With the addition of the Jenner sisters, the Kardashian brand became stronger and more inescapable than ever. This updated cast promised an era of Kardashian success and stasis: sisters and half-sisters prattling on over grilled chicken salads season after season, getting married, giving birth, growing older, customizing and re-customizing their Mercedes just to feel something.
And then 2017 hit Calabasas like a meteor, leaving a trail of escalating controversies and some abandoned Dash merchandise in its wake.
To put things into perspective, just last summer the Kardashians were celebrating the demise of family nemesis Taylor Swift, who was effectively outed for her serpentine tendencies on Kim Kardashian’s Snapchat. Following Kim’s Pulitzer-worthy work, Swift was relegated to her own ninth circle of hell: anonymity. Swift was squad-less and single and Kim Kardashian was more famous than ever, essentially dancing on her enemy’s grave in a pair of priceless custom Yeezys. Now, less than a year later, the entire Kardashian family appears to be teetering on the brink of overexposure, just like TayTay. This is the way the Kardashian world ends: not with a bang, but a potent combination of cultural appropriation scandals, Instagram revenge porn, a really bad Pepsi ad, and desecrating the memory of Tupac Shakur.
It’s hard to say if the Kardashians have been sabotaged by their lesser siblings, or are merely reaping the rewards of their own shitty seeds. After all, the main gripe that socially conscious consumers appear to have with the Kardashians is their cultural appropriation—and while these accusations have certainly escalated, taking trend cues from women of color has always been an integral part of the Kardashian brand. When Kim Kardashian was, incorrectly and ahistorically, heralded for singlehandedly making hips and butts sexy, she arguably set her family on the path to their own destruction. Ever since, the Kardashians have consistently co-opted black trends, aesthetics, and styles—everything from cornrows to, allegedly, the n-word. Sure, there’s a difference between braiding your hair a certain way because you saw a black woman doing it on Tumblr and putting your face on top of Biggie Smalls’. Then again, when you build an entire brand off of your ability to spot and repackage trends, the line between curation and harmful co-option is predictably thin. And when you’re Kylie Jenner, a 19-year-old who has repeatedly been accused of stealing things she likes without permission, the line is apparently non-existent.
(This is the 17th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
For a speaker array, basic problems between host computer and a micro-controller can be overcome. An outline solution is host -> USB2.0 -> device -> SPI -> DACs. Blocks of sound are transferred over USB. Each block nomimally represents 48kHz sound for up to 1/24 second (2000 samples or so). However, without exceeding the USB2.0 bandwidth limitation of 12Mb/s is is possible to transfer:-
Each block of samples is sent with a type, a length and one or more checksums. When this data is placed into a triple-buffering system, the micro-controller may seamlessly switch type when processing the next buffer.
Selection of cost-effective components is an art that I haven't mastered. My technique is to obliquely search EBay by functionality. This gives an overview of surplus components and cloned components. From this, it is trivial to find official datasheets. This invariably encounters warnings from manufacturers to not use legacy components in new designs and instead use components which, back on EBay, are up to 10 times more expensive. Obviously, I could use comparison functionality on the more advanced retail websites but this provides an overview.
After reading many datasheets, I'm not much further ahead. What DACs should be used? Maybe Analog Devices AD1952? Linear Technologies LTC2664 16 channel I2S DAC? Maxim MAX5318 18 bit SPI DAC? Or one of the many other choices?
After staring at I2S for a long time, it appears that, yes, it has a passing similarity to I2C or SPI with the exception that:-
Some components very obviously follow the technique poineered by Dallas Semiconductor where the device is made with different modes of operation. In this case, different interfaces are notched out with a laser according to market demand. Given that DACs may be laser tuned, this is one of the most obvious places to increase margin on commodity components.
Some DACs interfacing with SPI or I2S may be connected to a serial stream in parallel and the selectively slurp data via a hand-over signal. This allows DACs to scale without incurring bit errors from, for example, typical SPI daisy-chaining devices in series.
I considered the possibility of performing I2S (or suchlike) without a dedicated interface. This would provide the most design flexibility because the serial format would be defined entirely in software. If one DAC is discontinued then it would be possible to modify software (and board wiring) and continue with a different DAC. However, 32 × 16 bit samples at 48kHz is a bit-rate execeeding 25Mb/s. To raise and lower one clock signal from software requires at least 50 MIPS. This excludes processing power to perform any other functionality. Toggling can be amortized by ganging eight or more serial streams. However, this requires an intermediary, such as a shift register - or a chunky-to-planar bit matrix transpose, such as performed by a Commodore Amiga Akiko Chip. 4014 parallel-to-serial shift registers are too slow (and cumbersome).
The task of interest is to take eight bytes of data and output, for example, the bottom bits of each byte to a micro-controller's parallel port. Then one pin can be toggled. This acts as a clock for eight separate serial streams but only requires two instructions to signal a change of state to all downstream devices. Unfortunately, the transpose which preceeds output is processor intensive. If a CPU has suitable bit rotate operations through a carry flag or suchlike, it may be possible to zig-zag in 64 clock cycles or so. 64 conditional tests would require two or three clock cycles for each test. Is there a faster method? The benefit would be a greater volume of output and possibly more channels. (Something akin to VGA Mode X graphics popularized by Quake.) Or reduce power consumption. Or a reduced hardware specification.
The simple software transform requires one or more instructions per bit - and that assumes sufficient registers and flags. When I first encountered this problem, I considered a chain of rotates via one flag register. However, after consideration of quadtrees and matrix multiplication optimization, it is "obvious" to me that a matrix of 2^n×2^n bits can be transposed in n iterations. For 8×8 bits, three iterations are required. The first iteration swaps two opposing 4×4 blocks. The second iteration swaps two opposing 2×2 blocks in each quadrant. The third iteration swaps individual bits. If bytes are held in separate variables, this requires eight registers to hold the data and more registers for bitmasks and intermediate values. This works poorly on many micro-controllers. For example, ARM Thumb mode only has eight general, directly addressable registers. Thankfully, values can be ganged into 16 bits, 32 bits or even 64 bits. This significantly reduces the quantity of registers required. It also greatly reduces the number of instructions (and clock-cycles) required for a transpose operation.
The overall result is that 25Mb/s can be bit-banged with less than 15 MIPS of processing power. However, this only applies if eight streams are bit-banged in parallel. Other functionality, including 6 million multiplies per second, may remain within a 40Mhz processing budget.
(This is the 16th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
Practical problems with a speaker array:-
Cable Losses
It is reasonable to assume that a computer or media player will be ajacent to a display and therefore much of the electronics will be in front of a user. If speakers are to be placed around one or more users then speakers at the rear require longer cables. With 4 Ohm speakers and cheap cable, energy loss within cables is significant to the extent that speakers at the front will be obviously louder.
The ideal solution is to use good cables and equal length cable. However, a workaround it to attentuate the volume of the front speakers. This is a horrible bodge because it is a software fix for a hardware problem. The preferred solution is to remedy hardware first then use software to trim values if strictly necessary.
Speed Of Sound
Speakers should be triggered such that sound arrives simultaneously at a user's ears. The speed of sound is relatively slow. Therefore, speakers should be placed at identical distances from a user or some kind of compensation mechanism is required. In a domenstic environment, the latter is required. Again, this is inappropriately pushed into software. While speakers are nomimally driven in unison, speakers which are nearer to a user should use historical inputs. This creates multiple problems. Historical inputs require a circular buffer which increases memory requirements. It also incurs a level of indirection which increases processing requirements. The memory requirements also determine at maximum difference in distances. How significant is this difference?
The speed of sound is approximately 343m/s. (This varies with air pressure and humidity. Some systems take this into account.) Divide by sample frequency to obtain distance travelled at each time-step. At 48kHz, the distance is approximately 7mm. That's about 1/4". At higher frequencies, this distance is proportionately shorter.
If we assume a budget of about 16KB to implement a 1024 element circular buffer then the maximum difference between speaker distances is about 7 metres at 48kHz. (Higher sampling frequencies require a smaller range of distances or proportionately larger buffers. Other parts of the system require larger buffers and therefore the circular buffer may similarly grow in proportion.)
The inverse square energy dissipation is another reason for attentuation of speaker volume. Specifically, the nearest speakers should be driven at lower volume to compensate for differences in speaker distance. This would not be required if all speakers were at a uniform distance.
DAC Skew
A sequential program which drops data sequentially into registers may incur a small amount of signal skew. In air, this probably incurs less than 7mm of skew but it bothers me greatly. Perhaps it is because it is akin to an analog off-by-one problem.
Host Latency
A host decodes one block of audio, sends data out, decodes one frame of video and displays it. However, audio and video triple buffering may not align. Specifically, audio and video may be half a frame or more out of phase. However, with video transit over PCI Express and audio transit over USB2.0 (and contention over both), audio is likely to lag behind video. This requires audio to be sent ahead.
Host Skew
It is envisioned that audio will be played in rotation from three buffers and that, in the general case, the three buffers will be equal size. (There may be transitions where this assumption is false.) There may be jitter over a contested bus when receiving audio and therefore, one buffer should be replaced when it directly opposes the pointer for data being played. If the pointer is either side of this value, then one sample should be skipped or played twice. This is a tacky method to synchronize input because it goes completely against all of the theory about linear reproduction and fundamental frequencies. However, it works and it is computationally cheap.
Crash Or Disconnection
If buffers are not replaced in a timely manner, three buffers may be played in a tight loop of 0.12 seconds or shorter. This case should be avoided. If the host crashes or disconnects, audio should be silenced. If the micro-controller crashes, recovery is likely within a very brief period. However, occasional host polling is required. State, such as matrix multiplication constants, and buffers may require two or more frames to recover.
Errors In Data
There may be insufficient time to re-send a block of data. Blocks with obvious errors should incur silence. Blocks with minor errors may be recovered. The rate of errors and the probability of mis-classification is an emperical exercise.
Vatican outlaws gluten-free bread for Holy Communion
Transubstantiation is serious business.
(This is the 15th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
I started with the observation that computing mostly consists of paper simulation rather than structured information. I started describing a URL-space to overcome this limitation. Then I mentioned problems with network addressing and packet payload size which affect a multi-cast streaming server. After describing the outline of streaming audio hardware and software (part 1, part 2, part 3, part 4, part 5) and some speaker design considerations, we've spanned the extent of this project. The remainder is detail, in-filling and corollaries.
The first detail is how to interface a speaker array to a host computer. For simplicity, we'll assume one source of WXYZ Ambisonic sound-field at 48kHz within an .AVI file. This is four channel audio. As previously described, that's one channel of omnidirectional sound and three channels of directional sound (left-minus-right, front-minus-back, top-minus-bottom). For each time-step (48000 times per second), a four element vector is multiplied with a 4×32 element matrix to obtain the output for each speaker in an array. This requires about 6.1 million multiplications per second. However, what hardware processes this data? A host computer? A dedicated processor? Some kind of analog process?
Analyze the situation and choose suitable interfaces. Matrix input is 48kHz × 4 channels × 32 bits. That's about 6.1Mb/s. Assuming a daisy-chain of 16 bit SPI DACs, matrix output is 48kHz × 32 channels × 16 bits. That's about 25Mb/s. Considering a list of suitable host interfaces against availability and cost (EtherNet, USB, FireWire, SPI, SCSI), 10Mb/s EtherNet and 12Mb/s USB2.0 provide suitable bandwidth and the latter would be the most conventional.
How much RAM is required (and does this affect packet size or type)? We assume the .AVI has 24Hz, 25Hz, 30Hz, 50Hz or 60Hz video only. For each frame, this requires transfer of 2000, 1920, 1600, 960 or 800 time-steps where each is 4 channels × 32 bits. This requires triple buffering of 32000 byte buffers. So, a micro-controller or DSP of the following specification is required:-
So, a 40MHz micro-controller with, USB, SPI, hardware multiply and 128KB RAM would be sufficient. It may even be possible to perform 64 bit multiplication on such hardware. However, this specification doesn't have much headroom. In particular, multiple sound sources require mixing by the host computer. This is particularly awkward if one sound source is Ambisonic while another is stereo. Regardless, communication from host to micro-controller should include the following:-
Meanwhile, host computer should include the following:-
A board with this functionality would cost about US$2 per channel. However, this excludes power, connectors or a box. Due to SPI allowing open-loop control, it is possible to keep the same firmware and make versions of this system with less audio outputs.
Connectors may be two bare wire terminals per speaker, one phono connector per speaker or one headphone socket per speaker pair. The latter is the most compact and cost-effective.
How does this system differ from Dolby Atmos? Dolby Atmos permits 128 point sound sources to be mixed for 500 people. That's a particularly ambitious sweet-spot. It potentially requires matrix multiplication for a 128×50 matrix (or taller) per audio time-step. This is in contrast to a 4×32 matrix (or shorter) per audio time-step.
(This is the 14th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
I had difficulty getting an operational amplifier to work. In the case of audio, signals are often positive and negative relative to a ground wire. It isn't obvious how to get this working with a battery powered audio amplifier. Most of the explanations and circuit diagrams omit details about virtual ground and expect it to be known already.
The correct method for wiring audio input to a battery powered audio amplifier involves powering the operational amplifier from battery and also connecting two equal, large-value resistors in series across this power supply. The mid point between the resistors is a halfway Voltage. This can be used as an input to an operational amplifier. It should also be tied to the ground wire of the input.
This arrangement allows an operational amplifier to work with "positive" and "negative" Voltages without incurring any Voltage clipping. Shortly after learning this, I ensured that a friend at my makerspace avoided the fruitless avenues that I encountered. This has spurred development which continues to present. This includes irregular use of a TDA7379.
After some fun experiments with mains fluorescent lights and sine waves at 101Hz or 121Hz, my friend made a laser-cut box for a speaker. The first attempt had a horrible resonance. It was really glaringly bad. With hindsight, it was a poor choice to make a cuboid box with two identical lengths. After some modification to the design, a much better result was obtained.
When someone at the makerspace subsequently said they wanted to make cube speaker enclosures, with JBL speakers and a US$12 Chinese amplifier, I thought it would be truly awful. The concept was good. The speakers were supposed to fit into Ikea pigeon-hole shelving. Official accessories for this shelving include wicker baskets and wine racks. It is also possible to purchase computer cases which are the same size. Speakers would be an obvious addition. That's the general opinion when the concept is explained.
However, I was concerned about the resonance of a cube box, a speaker brand favored by Pimp My Ride rice-racers and an amplifier fresh off of EBay. I was expecting it to be dire. However, after being invited to a sound test, I was astounded. I don't have much sound test experience but I've never heard anything so good. The amplifier was excellent and JBL make really good 4 Ohm speakers. The secret is to make a cube box with really thick panels. Don't skimp. Make it from particle board but make sure it is heavy, 3/4" particle board.
Let's run through some known content. AC/DC? No complaints. Foo Fighters? No complaints. Bob Marley? It is possible to hear the limitations of the analog recording *and* mastering processes. Boston? Oh, that was special. I've never heard such distinct sound separation. It was possible to hear the phasing effect when one enclosure was twice the distance of the other.
I hoped these speakers would be commercialized. There was even an outside possibility of them getting branded as BBC monitor speakers. Unfortunately, this was another former Apple developer from the lean period in the 1990s who subsequently endured health and financial problems. Even worse, the cube speaker designer died in Jan 2017. However, some of the work continues.
There is no substitute for a speaker cluster with an 18 inch (or larger) woofer but a car speaker in a thick box is an acceptable compromise for a small apartment. A one foot cube speaker should be considered as the mid-range option but there is plenty of scope for cheaper alternatives. I wonder if it is desirable to put a two inch or three inch speaker inside a six inch box? This would be a miniture version of a cube speaker and they would probably be sold in packs of six or packs of eight to reduce shipping cost. (Actually, packs of eight may allow re-use of packaging.)
The really cheap option would be US$2 stereo speakers which plug into a headphone socket. I attempted to repair one variant for an ex-housemate. They are impressively cheap to the extent that I laughed over the hair-thin wire and the plastic box which holds the speaker coil against the magnet. Regardless, this is a very economical option to bootstrap a 30 element speaker array. I hope that a theoretical US$20 version would have better, longer cables and would be sufficiently loud and consistent.
(This is the 13th of many promised articles which explain an idea in isolation. It is hoped that ideas may be adapted, linked together and implemented.)
I sent similar text to a friend:-
It occurred to me that you've got no idea what I've been doing. Essentially, I'm going up the stack to increase value. The merit of doing this was demonstrated very succinctly by a friend who made US$800 per month on EBay by selling 3D printers and 3D printer parts. (Apparently, people pay US$50 for a print head which consists of a bolt with a hole through its length and a coil of wire which acts as a heating element.) My friend explained principles which could be applied widely and they seem to work. Specifically, adding another step in the chain often doubles value.
When this principle is applied to network protocols, the obvious move is to have content which can be delivered over a network. Even if this strategy fails, the content has value and alternative methods of distribution can be found. Following this principle, I suggested the development of content. I wish that I had emphasised this much more. Since suggesting this, companies such as Amazon have:-
- Formed streaming video divisions.
- Developed content in parallel with distribution systems.
- Gained subscribers for content.
- Obtained awards for content.
Indeed, it has been noted that traditional US broadcasters received no awards at the 2015 Golden Globes and this trend may continue.
Streaming video may be a saturated market but streaming audio has been neglected. With bandwidth sufficient for competitive streaming video, it is now possible to stream high-quality, 24 bit, surround-sound audio. Indeed, from empirical research, it appears that audio can be streamed over a connection with 70% packet loss and still retain more quality than a RealAudio or Skype stream with 0% packet loss.
From attempts to replicate the work of others, I've found a method to split audio into perceptual bands. If particular bands are retrieved with priority, it is possible to obtain approximately half of the perceptual quality in 5% of the bandwidth. The technique uses relatively little processing power; to the extent that it is possible to encode or decode CD quality audio at 500KB/s on an eight year old, single core laptop.
The technique uses the principle of sigma-delta coding where it is not possible to represent an unchanging level of sound. This limitation can be mitigated by having a hierarchy of deltas. (And where this fails, we follow Meridian Lossless Packing and provide a channel for residual data.) Ordinarily, most people would choose a binary hierarchy but this leaves us two techniques deep and still encountering significant technical problems. Specifically, a binary hierarchy of sigma-delta encodings practically doubles the size of the encoding and may increase the required processing power by a factor of 40 or more.
A consideration of buffers allows other hierarchical schemes to be considered. The buffer for encoding and decoding is w*x^y samples where w is always a multiple of 8 (to allow encodings to always be represented with byte alignment). After rejecting x=1 (the trivial implementation of sigma-delta encoding) and x=2 (binary hierarchy), other values were investigated. x=4, x=8 and x=9 resolve to other cases. The most promising case is x=3 which provides a good balance between choice of buffer size, minimum frequency response, packet requests and re-requests, perceptual quality in the event of packet loss, encoding overhead and processing power requirements.
Unlike x=5 or x=7, x=3 also provides the most bias for arithmetic compression. Given that encoding is represented as 1:3 hierarchies of differences, an approximation at one level often creates three opposing approximations at the next level. Over one cascade, zero, one, two or three increases correspond with three, two, one or zero decreases and, in aggregate, a bias at one tier dovetails with an opposing bias in the preceding tier to the extent that arithmetic compression of 20% can be expected with real-world 16 bit audio data.
x=3 also provides a compact representation for URLs when requesting fragments of data from stateless servers. Many representations are functionally equivalent. One particularly graphic representation [not enclosed] shows how tiers of ternary data may be represented in one byte of a URL. Although the representation appears sparse, approximately half of the possible representations are used and therefore only one bit per byte is wasted. An alternative representation is pairs of bits, aa bb cc dd, ee ff gg hh, ii jj kk ll where each pair may be 01, 10 or 11 when traversing down the tree and 00 is a placeholder when the desired node has been reached. This creates the constraint that sequences of 00 must be contiguous and stem from one end. However, this also allows URLs to be abbreviated to reduce bandwidth. A further representation provides three sub tiers per byte rather than four but allows logging in printable ASCII.
The BBC's Dirac video codec shows that it is possible to encode frames of video in an analogous manner. Specifically, frames of video can be encoded as a tree of differences. Trees may be binary trees, ternary trees or other shapes.
Overall, this follows a strategy in which:-
- Users have a compelling reason to use a system.
- Value is obtained by folding applications into a URL-space rather than fitting code to legacy constraints.
- Servers have low computational and interactive requirements.