at main
3 folders
7 files
Take a solid's row into the elastic simulation and the detailed building model, a ground's into the outdoor models, and complete a catalogue file in your editor with its JSON Schema (#891)
* Take a solid's row into the elastic simulation and the detailed building model, a ground's into the outdoor models, and write the JSON Schema of a catalogue file
The elastic FDTD takes a solid's catalogue row wherever it takes a Material: scholte_speed and ElasticFDTD2D.from_regions read its bulk longitudinal speed, its transverse speed and its density through printed(), never its plate or bar speed, and refuse a cell the page does not print in the page's terms.
GroundSurface.medium turns a ground row into the porous half-space ground_effect, barrier_insertion_loss and atmospheric_parabolic_equation take, through the Delany and Bazley or the Miki model. A row Cox and D'Antonio mark as fitted with one model goes into that model only.
HomogeneousElement.from_solid builds the ISO 12354 element a layer of a solid's row makes, with m' = rho t and fc = c0^2 / (1.8 cL t) from the row's density and plate speed, and never picks one of the row's loss factors: the internal loss factor is the caller's to give.
io.catalogue_schema writes the JSON Schema (2020-12) of a catalogue document for the row classes it is given, and the site publishes the one of every published row class as schemas/phonometry-catalogue-1.json, held current by CI. A document may name it in a top-level $schema, which the reader takes and never reads.
* A dollar sign inside inline code opens no maths in the markdown check
The unclosed-maths rule counted every unescaped $ on a line, so the $schema key of a JSON document written as inline code in a table cell read as maths cut off by the next row. CommonMark reads a code span before any maths could open in it, so the rule now leaves code spans out of the count, and still finds maths that wraps onto a block marker, on a line with a code span or without one.
* The catalogues guide hands a solid, a ground and a wall of your own to their models, and completes a catalogue file in your editor
The guide on catalogues of your own shows a solid's row read from a data sheet going into the elastic simulation by its bulk speeds, a ground fitted to a site going into the outdoor models through medium(), with the refusal of a resistivity fitted with another model, and a block's density and plate speed building an ISO 12354 element with the internal loss factor you give. A new section writes the JSON Schema of a catalogue file with io.catalogue_schema, points a document at it with $schema, and sets an editor to the one the site publishes; the document's keys now list $schema. The elastic waves, ground effect and detailed prediction guides each take a row from a catalogue in their own terms, the published catalogues page draws its ground example through medium() and links the schema, and the Files overview and the guide indexes name it, in English, in Spanish and in the docs mirror.
* The catalogue schema describes a row class by the first line of its docstring, or by its name when it has none
* The JSON Schema writer is held to its place in io's public names
* The elastic FDTD reads a row's fields through the dataclasses module, which no local name of the module shadows
* A wetted sand of Cox Table 6.7 goes into neither outdoor ground model, as the text beside the table says
GroundSurface.medium took the eight rows of the two sands Cox and D'Antonio print at four water contents into the Delany and Bazley and the Miki models, because no footnote marks their fit. The text of Sect. 6.6.3 (PDF page 272, printed p. 215) says their parameters are those of the two-parameter model of Attenborough, so a row the text ties to that model is now refused by both, naming the page, as a row the footnotes mark with another model already was. The notes of the eight rows say so on the catalogues page, in both languages, and the docstring no longer says Cox names the fit on every row.
* The schema never marks a catalogue file the reader reads, a null in an optional key included
The reader took a null for basis, $schema and phonometry_version, and a $schema or a version of any length, all of which the schema refuses. It now refuses a null there as it does under every other key, and holds the two texts to the length of any other text. The schema holds the standards a row's own provenance names to the fields of its class, as it already held the document's. Each refused case is now checked against the place and the first words of the reader's refusal, so a case refused for another reason than its name fails; the one that was, a negative thickness written beside the same cell in another unit, now gives the negative thickness alone. A CSV file's header that names the schema is read as one that does not.
* The oracles of a solid's row in the building and elastic models cite the page each number is printed on
The detailed-model test took 600 kg/m3 for autoclaved aerated concrete from ISO 12354-1 Table B.3, which prints 400 to 800; it now reads the three materials off the Annex L element block (PDF page 84, printed p. 78), which prints the density and velocity of each, and says Annex L takes 600 from that range. The elastic test writes the modulus, Poisson ratio and density Bies Table C.1 prints for mild steel (PDF page 747, printed p. 718) as literals and holds the row's bulk and transverse speeds to their closed forms, rather than reading them back from the row under test. The elastic FDTD's docstrings say a row class is refused when it lacks any of the three cells, not only all of them.
* The catalogues guide cites ISO 12354-1 and JSON Schema 2020-12, and says why an outdoor ground raises a fit-range warning
The guide's references now carry ISO 12354-1:2017, whose Formula (B.2), Table B.3 and Annex L the wall section rests on, and the two JSON Schema 2020-12 drafts the schema is written in. After the ground example it says the call raises a PorousAbsorberWarning because an outdoor ground lies below the fit range of both models, and links to where the ground guide explains it. The catalogues page says the schema covers every row class the library publishes, not only the ones its tables use. The Spanish pages name the elastic FDTD rather than a solver object and call the bulk speed that of an extended solid, as the solids guides do.
* The catalogue schema takes the table's credit a document or a CSV header gives at its top, as one text that is not blank
* The Annex L test holds the element's constants on the left, as the rest of the file does
* The catalogue schema's patterns read as the reader does under every validator
The schema said a filled text with \S, which Python's re matches against
U+FEFF and ECMA-262 does not: a name or a credit that is only U+FEFF was read
by the reader and accepted by Python's jsonschema, and refused by an
editor's validator. The reader tells a blank text by str.strip, so the
schema moves to it: every class shorthand of a pattern the schema takes
from the reader is spelled out as the characters it matches under that
pattern's own flags, the white space str.strip strips for a filled text and
the ASCII letters and digits for a key, a column of your own and a reserved
name. Python's re and ECMA-262, with the u flag and without it, now read
each pattern alike, over every character of the basic plane.
* The catalogue schema's patterns that hold a whole text end where it ends, under Python's re and ECMA-262 alike
The seven patterns of the schema that hold a whole text were anchored with
a closing $, which Python's re and ECMA-262 read apart: jsonschema searches
with re.search, whose $ also matches before a line feed that ends the
text, so Python's validator accepted "k\n" as a row's key, "x-a\n" as a
column of your own, "mine\n" as a catalogue's name, and a day, a date or a
digest followed by a line feed, all of which the reader and an editor's
JavaScript validator refuse. Each of the seven now ends with (?![\s\S]),
which no character follows in either engine, with the u flag or without
it. The other two, the test of a text that is not blank and the reserved
form of a name, match a part of the text and are not anchored at its end,
as a test now holds. A validator built on RE2 compiles no lookahead, and so
none of the seven, which the comments and the entry now say instead of
claiming every validator. The comparison of Python and ECMA-262 covers every
pattern the schema holds, over texts that end in a line feed after a whole
key, day and digest, and the six texts are refused by both the schema and
the reader. The catalogues guide says a file the reader reads is never
marked by an editor whose validator reads regular expressions as JavaScript
or Python does, rather than by any editor.
* A catalogue is read as its reader reads the file before a byte of it is written, so nothing the reader refuses is written
write_catalogue held a document to none of the reader's limits: more than
50 000 rows, a JSON file or a CSV file past 16 MiB, a CSV header past
64 KiB, or a text longer than the reader takes (2 000 characters, 20 000
for an about or a note, from a row built in Python or an about passed in)
was written, and with overwrite=True replaced a good file with one that
read_catalogue then refused. The JSON writer now reads the text it is
about to write as parse_catalogue reads one, its UTF-8 bytes held to the
file's limit first, and the CSV writer reads the sheet and its header as
read_catalogue reads the two files, each held to its own limit first, so
whatever the reader refuses, for its size, its rows, the length of a text
or anything else, is refused before anything is written or replaced, in
the reader's own words and naming the file. The reader looks its size
limits up when it runs, and the CSV reader reads the bytes of the two files
through one function the writer shares. The calibration sidecar writer
already refused a sidecar past the 1 MiB its reader takes, before it
touched the file.
For each writer, a file of exactly the most rows, the most bytes of the
file and of a CSV header, and the longest text and prose the reader takes
is written and read back, and one more row, one more byte or one more
character is refused over it, the good file left byte for byte and nothing
beside it; the limits of rows and bytes are lowered for the test. Each of
the nine fails on the code before this change.
* A code span in the markdown check closes only on a run of backticks as long as its opener, and the size refusals share the name of a catalogue file
CommonMark closes a code span only on a whole run of backticks of the opener's length. The check took one tick of a longer run as the closer, so a dollar sign after an unmatched backtick was read as code and an unclosed maths delimiter went unreported; each run is now read whole. The three size refusals name the file with one constant.
Every verdict reads its pass and fail flags, grades and classes from the values it holds (#949)
A result no longer stores a verdict beside the readings it came from. Sixty-two result classes used to keep the flag, grade or class their function had worked out (`passes`, `complies`, `qualified`, the `*_met` and `*_ok` flags, the advisories, the per-band classes of the IEC 61260-1, IEC 61672-1 and IEC 61043 verdicts, the ISO 9614-2 grade, the ISO/PAS 1996-3 category, the IEC TS 61400-11-2 block status and the rest), so a result built by hand or rewritten with `dataclasses.replace` could hold readings that fail and a flag that says they pass. Each of them is now a read-only property, read from the values the result keeps and the limit the standard prints, and so is any figure that only fed it, such as the rounded level of an RD 1367/2007 period or the acceptance region of a trend test.
A Spanish figure writes its decimal comma on every panel it draws, and two guards keep it that way (#777)
Every helper that writes text takes a language and defaults to English, so a call that forgets to pass it on raises nothing and puts an English decimal point into a Spanish figure. The plotting modules, the figure generators and the fiches now hand the caller's language to every helper that takes one, and localize_axes is called once per axes a plot builds rather than once per figure: a twin axis, a colorbar and the z of a 3-D panel each carry a formatter of their own, and each was shipping in English beside a panel already in Spanish. What decides whether an axis is localised is its formatter and not its scale, so a log axis of distances still writing its own numbers is reached and a pinned frequency axis is left to format_frequency_axis. A zoom inset and a contour colorbar, which the save-time pass of the figure generators cannot reach, are localised where they are built. The band column of the room criterion sheet and of the whole sound-power fiche family is written in the sheet's language too.
scripts/check_language_forwarding.py fails on any call to a helper that takes a language, made from anywhere a language is in scope, that does not pass it on. It reads module and class bodies as well as functions, follows a helper through a local alias and a functools.partial, names the shapes it cannot reach, keys an exemption by its line so one approved call cannot cover another, and reports a method name only some of whose namesakes take the language, which silently switched the untyped-receiver check off.
scripts/check_figure_decimal_point.py reads the committed Spanish figures and fails on a tick label that is a number with a point in it, whichever pass was meant to write the comma. It found six figures, regenerated here. Both run from the Makefile and in CI.
KB italic, Euler's number upright, and the subscripts of the guides, figures and diagrams set as their standards print them (#952)
The weighted vibration severity KB is italic in every diagram, figure, guide, docstring and errata entry, as DIN 4150-2 and DIN 45672 print it, and Euler's number is upright in every formula, as ISO 80000-2:2019 prints the mathematical constants. `make subscripts` fails on an upright KB or an upright running index and `scripts/check_euler_number.py` fails on an italic e, and both checks now read the row breaks, wrapped inline math and escaped strings they used to skip. Where a standard prints every subscript in one slope, as EN 15657, EN 12354-5 and RD 1367/2007 do, ISO 80000-2 decides: a running index is italic and a descriptive abbreviation upright, so the position levels of EN 15657 are L_{v,i} with an italic i. The standardized levels with their italic T, the ISO 7235 diagram with its sign put right, and the noise control, in-situ, exposure, aircraft and theory symbols follow their printed pages. No public name, signature or return value changes.
KB italic, Euler's number upright, and the subscripts of the guides, figures and diagrams set as their standards print them (#952)
The weighted vibration severity KB is italic in every diagram, figure, guide, docstring and errata entry, as DIN 4150-2 and DIN 45672 print it, and Euler's number is upright in every formula, as ISO 80000-2:2019 prints the mathematical constants. `make subscripts` fails on an upright KB or an upright running index and `scripts/check_euler_number.py` fails on an italic e, and both checks now read the row breaks, wrapped inline math and escaped strings they used to skip. Where a standard prints every subscript in one slope, as EN 15657, EN 12354-5 and RD 1367/2007 do, ISO 80000-2 decides: a running index is italic and a descriptive abbreviation upright, so the position levels of EN 15657 are L_{v,i} with an italic i. The standardized levels with their italic T, the ISO 7235 diagram with its sign put right, and the noise control, in-situ, exposure, aircraft and theory symbols follow their printed pages. No public name, signature or return value changes.
Every catalogue row has one shape and says what its source claims for each cell (#862)
* Every published catalogue cell is pinned to its last digit
The 1982 rows of the 23 published catalogues are dumped once, every float by
its repr, into tests/data/published_catalogues/baseline.json. A test takes
that baseline through every change listed in tests/catalogue_fingerprint.py
and asserts that the result is, field for field, what the library builds
today. The page generator's check sees the numbers only as the site prints
them; this sees the last digit of a float and a hedge moved from one field to
another, so a change to how a row is built has to say what it moved.
* Every catalogue row has one shape and says what its source claims
The rows of every published catalogue share one base, and phonometry.io now
publishes it: CatalogueRow, BandedRow, CatalogueError and CATALOGUE_BASES.
A row gains basis, what the source claims a value is (measured, declared,
calculated, estimated or extended), read through basis_of. The estimate had
two spellings, SolidMaterial.estimated with is_estimate and
OrthotropicWood.estimated with is_estimated; both are gone, and the 35 cells
Hopkins Table A2 and Rossing Table 15.5 mark as estimates hold "estimated"
in basis.
A value the page prints in another unit is no longer derived: the 116 cells
of Ver & Beranek Table 14.1 in degrees Fahrenheit and psi and the nine of
Long Table 7.1 in sabins keep the printed figure and unit in converted. A
cell the page leaves blank and prints on another row (Ver & Beranek Table
8.7, ASHRAE Table 30, Harris Chapter 32) names that row in carried.
is_derived now answers only for what the library computes. The published
catalogues page marks converted and carried cells as such, with the printed
figure on a converted one, and a test walks every hedged cell of every
catalogue to hold the page to it.
OrthotropicWood and PlateauMaterial take their fields by name only, and no
row class is slotted, because on Python 3.13 a slotted dataclass cannot call
super() without arguments from its own methods. No published value changes:
the fingerprint lists the 54 rows the move touched and nothing else moved.
* A catalogue cell no longer claims a unit or a derivation its page does not print
Long prints the six figures of his musician with no unit. The row now says
so in its note and why they are read as sabins, and `converted` is described
everywhere as the page's figure and its unit rather than as what the page
prints; the published catalogues page words its tooltip the same way. A
figure a packaged table prints with another SI prefix, such as the
megapascals of Rossing Table 15.5, keeps no `converted` entry, and the
docstring says so.
`carried` covers a value the page gives by reference to another row, which
includes the three Harris rows that print "Parecido al anterior" and no row
number, not only a cell left blank under a block. The two ASHRAE rows that
carry a diameter down no longer call it a derivation in their notes, and the
damping paragraph of the catalogues page no longer says converted cells are
marked as worked out.
The fingerprint compares every row as the text the baseline holds, so a
float served as an integer, or a flag served as a number, is a change. The
page generator refuses a cell whose hedges it cannot show, two on one value
or an estimate, a conversion or a carried value on an interval, a list or a
word, instead of publishing it with one of them missing; the test walks
every hedge of every published row to hold it to that.
The older unreleased notes that still named `is_estimated`, the `estimated`
field and cells marked derived now name `basis`, `basis_of` and `converted`.
The scripts and tests that import `CatalogueRow` take it from
`phonometry.io`, and the Spanish pages spell the sabin one way.
* An approximate interval keeps its tilde on the catalogue page
The porosity Cox Table 6.5 prints for granular vermiculite is an interval with
a tilde, and the page showed the bare interval. The range and bound kinds have
no mark of their own, so the tilde now goes into the cell text.
The fingerprint's migration test also requires every field outside the hedges
the step moves to stay equal, basis_of names all five bases, the baseline's
README states the terms that cover it, and the test that probed the
interpreter for the slotted super() failure is gone: Python 3.13.15 carries
the fix and 3.13.5 does not, so it tested the Python patch release, not the
library.
* A list of readings printed with a tilde keeps it on the catalogue page
Like an interval, a cell holding several readings has no mark of its own for
a tilde, so it goes into the text. The generator now refuses an approximate
hedge only on a printed word, which has nowhere to show it. No published cell
changes.
* A catalogue row refuses a basis outside the five words
The catalogue page and every reader of basis_of act on measured, declared,
calculated, estimated and extended only, so a row built with any other word,
such as a misspelt estimate, now raises CatalogueError instead of reaching
the page as a printed number.
Keep a data sheet's absorption and a laboratory's insulation as rows of their own, each rated again from its bands, and a guide to reading a material datasheet (#890)
* Keep a data sheet's practical and one-third-octave absorption, a laboratory's sound reduction index and a covering's impact improvement as rows of their own, each rated again from its bands
PracticalAbsorptionSpectrum holds the practical coefficients of ISO 11654 from 125 Hz to 4 kHz and ThirdOctaveAbsorptionSpectrum the ISO 354 coefficients from 50 Hz to 10 kHz, both with the weighted coefficient, shape indicators, class, NRC, mounting, thickness and depth of construction the sheet prints. rating() works the weighted coefficient out again from the bands, and practical() turns one-third octaves into practical coefficients, each marked as derived and never borrowed from a neighbouring band.
SoundReductionSpectrum holds the ISO 10140-2 sound reduction index in 21 one-third octaves with Rw, C, Ctr and the Annex B terms of ISO 717-1; ImpactImprovementSpectrum holds the ISO 10140-3 reduction of impact level with Delta Lw, CI,r and CI,Delta. Their rating() calls weighted_rating_extended and the ISO 717-2 improvement functions; the new ImpactImprovementRatingResult carries Delta Lw with both adaptation terms and plots the spectrum.
Reading a catalogue file notes a practical coefficient above 1.00 or off the steps of 0.05, and a printed rating the bands do not give, without changing any cell. weighted_rating, weighted_impact_rating, weighted_impact_improvement and impact_improvement_adaptation_term take a mapping of band to value and refuse a missing band.
* A guide to reading a material datasheet, and the catalogues guide names the row classes that now hold a sheet's absorption and a laboratory's insulation
"Reading a material datasheet" (EN, ES and the docs mirror) sits first among the materials guides and says what each number on a data sheet or a test report is before it is typed: the practical coefficient of ISO 11654 against the one-third-octave coefficient of ISO 354, the steps of 0.05, the cap of 1.00 and the 125 Hz band that is held and not rated; a level declared under CE marking, read from EN 13162, as a bound and never a value; measured against declared, calculated or estimated; the mounting and the depth of construction; the revision and the day it was read; the decimal comma and a corrupt text layer; and the sound reduction index and the impact improvement of a laboratory report. Its examples turn a test report into practical coefficients, read a sheet's octave table from CSV with the notes it earns, and rate a wall and refuse a declared impact improvement a prediction cannot take.
The catalogues guide, the Files overview, the materials overview and the published catalogues page link it, and no longer say that no row class holds these quantities. The guides index counts 146.
* A one-third-octave row's practical coefficients keep a derived text the row already carried on a shared field
* Six coefficients ending in 0 or 5 look like practical ones, and only a sheet that names them says they are
* A negative absorption coefficient is refused rather than read as zero, and a covering's improvement plot keeps a negative band in view
ThirdOctaveAbsorptionSpectrum.rating() refuses a negative one-third-octave
coefficient, naming the row, the band and the value, as
practical_absorption_coefficient does; practical() leaves the octave it
falls in empty and says why in not_derivable, so practical().rating()
refuses the same rating band and a negative band below 200 Hz only empties
the unrated 125 Hz octave. Nothing is floored to 0.00 any more.
A printed absorption class is compared with the one the bands give on its
casefolded word, so "not classified", "c" and "Class C" agree with the
bands that give them. A coefficient above 1 is explained as ISO 354 3.9
NOTE 2 does, by diffraction effects.
ImpactImprovementSpectrum cites the definition of Delta L where it is, ISO
10140-1 Annex H, Equation (H.1), with the levels measured by ISO 10140-3.
The ISO 717-2 improvement plot starts its axis at 0 dB only when no band is
below it, and its title reads "ISO 717-2 Delta Lw (CI,Delta=-9; CI,r=-2) =
15 dB" with the typographic minus of the other rating plots, short enough
for the default figure in both languages. The enlarged range of the ISO
717-1 and ISO 717-2 extended rating plots is shaded with an opaque wash
that stays visible on a dark page.
* The datasheet guide draws each rating it works out, rates a floor covering's report, and cites ISO 10140-1 for the impact improvement
The guide on reading a material datasheet now shows the figure of every
rating its examples work out: the ISO 11654 rating of a test report's
one-third octaves, the ISO 717-1 rating of a laboratory's sound reduction
index over 50 Hz to 5 kHz, and a new example that reads a floor covering's
Delta L from its report and rates it to Delta Lw 15 dB with CI,Delta -9 dB
and CI,r -2 dB. Each figure is the result's own plot() with the code behind
it, in English and Spanish.
Delta L is cited to ISO 10140-1 Annex H, which defines it, with ISO 10140-3
as the measurement; a coefficient above 1 is explained by diffraction, as
ISO 354 does; the glazed partition of the example is a 4 mm pane, which is
where its coincidence dip at 3.15 kHz puts it; the guide says what happens
to a negative coefficient; and two Spanish sentences read as the English
ones do.
* The search check weighs a plain search on two copies of the index that have read the same chunks
On this branch the Spanish search for "ruido" failed the check as if the
standards field had reordered it. Nothing in the field matches "ruido";
the reorder came from how much of the index each side had read. Pagefind
fetches the word index in chunks and keeps them, and a search ranks every
word that begins with what was typed among the chunks it holds, while it
fetches only the chunk that takes in the typed word or its stem. The pages
this branch adds moved a chunk boundary between "ruid" and "ruidos", the
stem of "ruidoso". The weighted copy the check compared against had already
run every designation and held both chunks; the unweighted copy was fresh
and held one, so the two pages whose image text says "ruidoso" rose only on
the weighted side. Two fresh copies at weight 3 and weight 0 return the
same top five, and so do two copies that have both read the second chunk.
The comparison now runs on two fresh copies that make the same searches in
the same order, and a search that returns different pages from them fails
as a difference in what they read, not as a reorder by the field.
loadSearchIndex returns a fresh copy on every call, as it said it did:
Node keeps one module per address, so a second call for the same language
and weight used to get the copy already in use.
* The refusal of a band set and the annex of the enlarged ranges are each named once
The refusal ratings.py gives a band set it does not read is one constant for
its three uses, and the clause the sound reduction sheet cites for its five
enlarged adaptation terms is one. The test of the one-third-octave rating
holds the rating it worked out on the left, as the rest of the file does.
A hundred and seventy-five more rows of airborne and impact insulation (#848)
* A hundred and seventy-five more rows of airborne and impact insulation
Rossing's Table 11.4 adds twenty-three partitions in six bands with a
sound transmission class, and seven tables of Chapter 31 of the Spanish
edition of Harris add a hundred and twenty-nine ratings with no band:
stud walls, block walls of two weights, block walls under six mountings,
doors unsealed and sealed, exterior doors, sealed windows (a table printed
with the ratings as rows, turned so that a row is a window) and
floor-ceiling systems. A column the page rates a construction in is a row
with the condition as its variant. TransmissionLossSpectrum gains
block_mass_kg and refers_to_row, and the catalogue page now shows the STC
column it already held for ASHRAE.
Tables 19.2 to 19.4 of Harris (1977), the Spanish edition of the first
Handbook of Noise Control, add twenty-three floor treatments on bare
concrete with the average improvement in impact sound insulation in
decibels, a quantity of its own on ImpactInsulation, and the load Table
19.4 prints in kg/cm2 held in pascals.
Every cell was read twice from the page and compared: 501 cells, no
disagreement. Rossing's "Open-plane office partition" is registered as a
typing slip, and Harris (1977) joins the bibliography.
* Say where the 1977 impact tables differ from Chapter 32
The 1977 rows credit no source, the average improvement is quoted on the
same page as its table, and two floors of Table 31.9 are rated under
several ceilings, not three.
* Say which rows are keyed by a slug, and that impact rows carry one of three results
A hundred and seventy-five more rows of airborne and impact insulation (#848)
* A hundred and seventy-five more rows of airborne and impact insulation
Rossing's Table 11.4 adds twenty-three partitions in six bands with a
sound transmission class, and seven tables of Chapter 31 of the Spanish
edition of Harris add a hundred and twenty-nine ratings with no band:
stud walls, block walls of two weights, block walls under six mountings,
doors unsealed and sealed, exterior doors, sealed windows (a table printed
with the ratings as rows, turned so that a row is a window) and
floor-ceiling systems. A column the page rates a construction in is a row
with the condition as its variant. TransmissionLossSpectrum gains
block_mass_kg and refers_to_row, and the catalogue page now shows the STC
column it already held for ASHRAE.
Tables 19.2 to 19.4 of Harris (1977), the Spanish edition of the first
Handbook of Noise Control, add twenty-three floor treatments on bare
concrete with the average improvement in impact sound insulation in
decibels, a quantity of its own on ImpactInsulation, and the load Table
19.4 prints in kg/cm2 held in pascals.
Every cell was read twice from the page and compared: 501 cells, no
disagreement. Rossing's "Open-plane office partition" is registered as a
typing slip, and Harris (1977) joins the bibliography.
* Say where the 1977 impact tables differ from Chapter 32
The 1977 rows credit no source, the average improvement is quoted on the
same page as its table, and two floors of Table 31.9 are rated under
several ceilings, not three.
* Say which rows are keyed by a slug, and that impact rows carry one of three results