Logos Foundation Flanders Musical Robotics |
<Hunt> Version 1.0 last update: 12 August, 2021 |
<Hunt>
This robot grew from the construction work on the <Rumo> robot. That robot
consists of several modules, one of them originally was an automated hunting
horn. During the construction of that module however, we decided to turn this
hunting horn into a robot on its own: <Hunt>. The instrument we used for
this robot, most certainly, is not a high quality hunting horn, although the
conical bore was found to correspond quite well to the requirements of a horn.
Tuning:
The horn was automated using the same mechanism as developed earlier for robots such as <Horny>, <So> and <Autosax>. Thus it uses a membrane compressor and an acoustic impedance convertor with a capillary to drive the horn into resonance. As the hunting horn has no valves it is in principle limited to produce the overtone series based on its fundamental resonant frequency. In practice though, many more tones -if not even all, as we will see further- can be produced either by slight changes of the embouchure and/or by inserting the hand in the horn and thus changing its resonance. If we limit the horn to produce only the 'natural' overtones, we turn it into an instrument playing in what is called 'just overtones'. In the practical implementation of this hunting horn robot, we made this 'just overtones' tuning easy to use: setting controller 20 to 41 is the only thing required. But, many more just intonation scales based on all chromatic notes, are implemented here. (Controller 20, with parameters 48 to 59). So, music by Harry Partch -with its tuning based on G- can be played after transposing a whole tone downward and setting controller 20 to 53.
As we know, many different so called 'just intonation' scales are possible. In our implementation for <Hunt> we selected the chromatic interval series 1:1, 16:15, 9:8, 6:5, 5:4, 4:3, 10:7, 3:2, 8:5, 5:3, 16:9, 15:8, 2:1. This is as close to equal temperament as possible, sticking to low prime-number ratios, as shown clearly in this table:
As we can see, the highest prime used here is 7, and that number was even only
required to implement the triton F#.
An alternative just-intonation scale, with advocates of its own is: 1/1, 21/20,
9/8, 7/6, 5/4, 4/3, 7/5, 3/2, 14/9, 5/3, 7/4, 15/8. This scale -still using
only prime numbers up to 7- we implemented as well in the <Hunt> robot.
But, it almost goes without saying, the horn can also play in regular equal
temperament, however, at the detriment of some realism in the sound produced.
The diapason can be selected again, using controller 20. By default the hunting
horn plays in equal temperament with a diapason set to A = 440Hz.
Despite all our efforts to implement these 'just' tunings, it should be said and stressed that 'just' tunings do not belong to the world of real acoustics. Nowhere in nature, observed and measured overtone series correspond to the harmonic ideal of integer multiples of a fundamental. Only imaginary one-dimensional oscillating systems could produce 'harmonic' overtones, yet such systems are nothing but thought experiments and belong to the realms of Platonism. Here is a 'textbook' formula for the overtone series on stopped conical pipes, as it is assumed to apply to the horn:
Excitation:
Acoustic researchers for a long time have been looking into methods to capture the source of the vibration in wind instrument mouth pieces. Practical methods to measure and record the vibration of lips or reeds on wind instruments directly, never lead to convincing results, as the transducers required for measurement influence normal sound production to a great extend. Hence our idea to derive the vibration of the excitation source indirectly. A now verified method to generate the required waveform lookup tables for driving the membrane compressor coupled to the impedance convertor we developed and tested thoroughly in 2020 for robots such as <Flut>, <Autosax>, <So> and now also <Hunt> consists of the following steps:
1. Excite the membrane compressor with a waveform (at least 4 periods are required and these must be looped in the firmware) corresponding to what you would like the robot to sound like. Lets call it WavIn(). This waveform must be without any modulation and recorded in an anechoic chamber using high quality microphones at a distance not larger than the size of the sound source. For a horn, that is the diameter of the bell. This signal can best be derived from a recording of the instrument, played in the traditional way. So, it should be recorded prior to modifications required to build the actual robotic instrument. Make sure you record sound samples for a large series of different notes in different dynamics and registers as excitation waveforms differ greatly in function of these parameters. In the case of our <Hunt> robot, this step was quite easy, as turning the horn into a robot did not involve any change of the horn at all.
2.- Record the sound of the robot, using a high quality condenser microphone, with this excitation and convert it to a format suitable for the microprocessor selected. Lets call this waveform WavOut() . Make sure the sizes of WavIN() and WavOut() are the same and take care to align the phase as well as possible. Normalization is also required. This is a quite tedious job, in particular for instruments where the contribution of the instrument to the sound result is relatively small as compared to that of the playing style, the mouthpiece etc. For the saxophone this is noticeably the case, whereas we had less problems in this respect with the oboe and the flute. The horn comes in somewhere in-between. The typical sound of the hunting horn is extremely different from the sound of a nature-horn as used in historical music performance practice, although the instruments are not very different. Hunters make a very rough and loud sound with extreme vibrato and modulation, whereas orchestra players make the horn sound quite mellow.
3.- Calculate the required excitation waveform as: WavEx() = (2 * WavIn()) - WavOut(), in the time domain. Normalize this wave and remove any DC components. This wave now is a model of the excitation wave deprived from the influence of the instrument. Of course this cannot be fully true, as it doesn't take into account the mutual coupling of excitation and instrument. However, the model does work quite well on practical robots if enough waves are prepared to cover the different registers and dynamic levels.
4.- Reprogram the microprocessor to use WavEx() as an excitation waveform for as many notes and dynamics as the microprocessor can cope with.
This method was also applied in the construction of the <Flut> and version 3 of the <So> robot in 2020. Of course, the procedure ought to be performed for a note in each register the instrument is supposed to sound. It would be ideal -but tedious- to follow this procedure for each individual note. However, the microprocessor used should than have a very large memory. The 16 bit 24EP256MC202 type used for the <Hunt> robot, is limited to 32kBytes, enough for a maximum of 20 wavetables, 1024 bytes each. Note that with the standard sampling rate of 44.1kS/s, the highest note wherefore our method can be applied is midi note 64 (329 Hz). With the much higher sampling rate of 192 kS/s it ought to be possible to calculate lookup tables useful for notes up to 90 (1480 Hz).
The theory behind this approach is that the excitation-wave should correspond as much as possible with the vibration of the lips or reeds that cause the vibration in the instrument. As it is nearly impossible to capture this vibration by direct methods, we reason that the sound produced by the instrument is the sum of the excitation and whatever the instrument adds (or omits) to it. Thus, by sending a sample of the normally produced sound to the membrane compressor, we should get the excitation wave plus twofold the contribution of the instrument. By calculation of WavEx() = (2 * WavIn()) - WavOut() we get a model of the excitation wave. When studying and analyzing waveforms produced by real instruments, you will notice that in fact no two periods are the same, neither in shape, neither in length. That's why we take a minimum of four full periods. Do not use more than say 16 periods though, because it may introduce subharmonics, if not even rhythmical pulsation in the sound on long sustained notes. With four periods, you get a very soft subharmonic two octaves below the sounding pitch. For this reason we always add a tiny amount of jitter to the sampling rate. In theory it should be a Gaussean, but in practice straight random jitter over a narrow range leeds to very acceptable results. No two periods have exactly the same length, just as in humanly played wind instruments.
As a matter of experiment, conducted mainly in an attempt to reduce audible artefacts in the sound production, we applied curve matching software to our excitation waveforms. The so derived formulae could be used a an approach to acoustic modelling. The best matching formula for our hunting horn looks like this: y = a cos(x + d) + b cos(2x + d) + c cos(3x + d) with the following parameters:
This result was obtained with version 2.2.1 of the CurveExpertBasic software.
Readers may wonder how and why we made this horn play in just about any tuning. All textbooks on musical instruments and acoustics state that nature horns can only sound their natural overtone series. As just about any experienced brass instrument player can tell you, this statement is quite wrong. First of all, all players adapt the pitch produced by changes of lip position and pressure. If they didn't they would never be capable of playing a vibrato. Very good players succeed to sound just about any note from just about any horn, be it at the detriment of sonority. This is not a novelty of our own finding, but it even belongs to historical practice on brass instruments. Mattheson, in his 'Grundlagen einer Ehren-Pforte' (Hamburg, 1740), mentions Burwitz, as a very good trumpeter that was capable to sound any pitch on his C trumpet. Here is the original quote: So, the idea to force the horn to sound any pitch is not at all that strange. As said, the price we pay when doing so is only unequal resonance for different notes. This becomes very noticeable when sounding scales. In a musical context however, it can be masked quite well by adjustments of volume and envelope. The higher we get up into the range of the instrument, the easier it becomes to modulate pitch and to adjust timbre. The acoustic explanation behind these observations is that the Q-factor, determining the amount of resonance around an overtone, is not as high as we tend to think. Very often, in published graphs, the vertical scale is highly exaggerated. For instance in this curve taken from Backus: With a more realistic vertical scaling, and in an experiment set up for impedance measurement under forced drive conditions, it rather looks like this: In due time, we will add some curves here with the results of measurements on real instruments under forced drive conditions.
Although the Backus graph is vertically highly exagerated (it doesn't have a scale!) and cannot really correspond with real measurements, he must have observed the non-harmonic character of the overtone series mentioned before in our remark on just intonations. Note the 'harmonic' peaks gradually deviating from integer and becoming lower as we go up in the series. As it happens, even the first overtone, the octave, will be found to be slightly off.
Vibrato:
The implementation of vibrato on this horn lead us to a deeper analysis of vibrato on musical instruments. Technically speaking, vibrato is mere frequency modulation. It can fully be characterized with the parameters periodicity and modulation depth. However, in musical practice it is quite a bit more complicated. Just adding sinusoidal frequency modulation of some depth to a sound, gives often a very mechanical and artificial result. It resembles the sound of a cheap electronic organ. A human player will normally apply vibrato after the attack phase in the envelope of the sound. Also, he will stop the vibrato in anticipation of stopping a sound by bringing the pitch back to its center value corresponding to the note sounding. Starting the vibrato on any point in the envelope poses no particular technical problems for automation. Stopping however in the same way a human musician would do is impossible, for it requires looking ahead in the music. Looking ahead cannot be implemented in a musical robot that is supposed to operate in real time. (Unless we would be capable of implementing artificial musical intelligence, such that the robot could anticipate. In the near foreseeable future, this is unlikely to become possible). So, as a compromise we implemented the end of vibrato such that the pitch returns to the center frequency of the note during the release phase of the envelope. The release phase is entered on reception of a note-off command. Of course, this cannot be done for notes played legato, where a release phase is lacking. In these cases we will have to live with the occurrence of tiny pitch jumps in note successions.
Construction:
This horn is suspended in a cradle and can move slowly up and down. Movement can be controlled by users and the robot is equipped with an inclination sensor. It is mounted on a 3-wheel base. All chassis parts are either TIG-welded or bolted and made from stainless steel. The membrane compressor used is a powerful Brazilian made Selenium D250 driver: The mounting thread is an awkward 1 3/8" - 18 TPI, extremely difficult to find corresponding nuts... This compressor is driven by an analogue power-opamp (LM12CK) delivering 100 Watt. The excitation is generated by a dual-PIC24EP256MC202 processor board: This board also contains a bunch of analogue lowpass filters as well as a dynamic non-linear formant filter. Another microprocessor board, an 8 bit 18F2620, controls the gunshot as well as the lights and takes care of the parsing of the midi data-stream. A last microcontroller board is responsible for the control of the motor used to change the vertical inclination of the horn. Circuit details as well as links to the code for the firmwares, can be found at the bottom of this webpage.
Midi implementation and mapping:
The midi channel <Hunt> listens to is 2. (If counting from 1, this would be channel 3). There are no overlapping notes with <Rumo> and thus it could share the same midi-channel.
Lights:
note 120: tubular 24V/5W bulb on the horn assembly. By default this light is
on whenever a note is playing.
note 121: Small red cluster LED 24V E14 bulb on the fixed part of the horn module.
note 122: Red 24V / E14 LED cluster bulb on the gunshot module
note 123: idem.
note 124: White 24V / E14 LED cluster bulb above the frontwheel.
note 125: idem.
note 126-127: not yet mounted lights, reserved for future uses.
Controllers:
#1: controller 1: Wind noise in the sound of the horn. [default setting 48]
#3: controller 3: Vibrato depth for the horn [default setting 8]
#4: controller 4: vibrato speed for the horn [default setting 94]
#5: controller 5: tremolo depth (amplitude modulation) for the horn [default
setting 4]
#6: controller 6: tremolo speed for the horn. [default setting 20]
#7: controller 7: volume control - global volume controller for the horn.[default
setting:100]
#15: controller 15 - ADSR time scaling for the horn [default setting: 114]
#16: controller 16 - attack time controller for the horn [default setting: 32]
#17: controller 17 - attack level controller [default setting 127]
#18: controller 18 - decay time controller [default setting 91]
#19: controller 19 - release time controller for the horn (release time can
also be controlled with the release byte of a note-0ff command)[default setting
100]
The interdepencies for the controllers 7, 15, 16, 17, 18 and 19 are shown in
the graph below:
#20: controller 20 - tuning for the horn. By default equal temperament and
A = 440 Hz for value 64. Acceptable values for this controller are limited to:
#22: Vertical movement of the hunting horn: 0-63 = downwards, 64-127 = upwards.
[default = 63]
#40: This controller selects the waveform lookup for the register 41 to 52.
Possible values are 0 to 6. Default value is 6.
#41: This controller selects the waveform lookup for the register 53 to 70.
Possible values are 0 to 6. Default value is 5.
#42: This controller selects the waveform lookup for the register 71 to 81.
Possible values are 0 to 6. Default value is 5.
#43: This controller selects the waveform lookup for the register 82 to 91.
Possible values are 0 to 6. Default value is 2.
#66: Power on / off. This command also resets all controllers to their default
cold-boot values. Power on recalibrates the horn and brings it back to a central
position.
#69: Enable or disable automation of the light on the horn. Default value :
> 0, ON. To switch this off, send controller with value = 0.
#80: Dynamic range controller for the horn. Default is 32 for 30 dB dynamic
range.
#107: Force controller for the gunshot, mapped on note 107. This sets the operational
voltage over the solenoid. By default set to maximum (127).
#123: All notes off. Also switches off the lights.
Pitch bend: range 1 semitone (-50 to + 50 cents) [note that pitchbend must follow a note-on].
subject to changes on the request of users. |
|
Music composed for <Hunt>:
Hunt was used for the first time as a member of the orchestra in Alain Van Zeveren's
composition 'Equilibrium', february 2021.
It also has a substantial part in 'Endgame' by Godfried-Willem Raes (august 2021).
No solo pieces for <Hunt> so far
This robot was completely ready and functional by the end of February 2021.
At this time, <Hunt> can perfectly be used but the firmware is still subject
to changes and improvements.
To do:
Back to Logos-Projects page : projects.html | Back to Main Logos page:index.html | To Godfried-Willem Raes personal homepage... | To Instrument catalogue |
Construction diary:
20.10.2020: digged up an old hunting horn and considered to integrate it in
our <Rumo> robot... The horn has been around in our lab at Logos at least
since 1978. We purchased it on a flea market in 1969 and it was used in the
Logos Workshop in those early years. The horn was probably made in Flanders
between 1918 and 1930. It bears no signs of a maker or a factory. It could be
De Prins, based on similarity with signed and known instruments from that period.
.
21.10.2020: Preliminary calculations and measurements with the horn. It sounds
like it's a high f# tuned horn (probably an F or a G horn in some old diapason).
It most certainly is not a quality instrument, although the bore appears to
be conical and quite correct. The overtone series it blows is as could be predicted.
22.10.2020: More and more, it looks feasible, to add this horn in <Rumo>.
Maybe we can use our amplifier design around the TDA7264 chip, as used for <Chi>:
There is even a PCB designed for this circuit:
23.10.2020: Het idee om een jachthoorn toe te voegen krijgt alsmaar meer vorm.
We hebben al de hoorn, een PIC driverboard, een membaankompressor, een LM12
power-amp board en een geschikte voedingstransfo... Het LM12 board is hetzelfde
dat we ook met sukses gebruikten voor <So> in versie 3.0. Het ontwerp
en het PCB dateert van 1991. De vermogens opamp (LM12) is al lang niet meer
verkrijgbaar. In ons labo hebben we wel nog twee reserve-exemplaren op voorraad.
24.10.2020: Voor de membraankompressor kunnen we het board gebruiken ontwikkeld
na dat voor Autosax V5.0. Dat PCB is gedateerd 03.05.2020. Als driver kunnen
we een oude Boyer (Frans) of een nieuwe Selenium driver (een Brasiliaans produkt)
gebruiken. Op de foto hebben we de Selenium driver gemonteerd:
25.10.2020: Uittekenen mogelijk chassis voor de komponenten van de jachthoorn.
Een draaibare opstelling -met motor- lijkt hier aangewezen.
26.10.2020: We ontdekten nog een Belimo LM24 motor module in ons labo. Dit lijkt
wel bruikbaar voor de aandrijving van de beweging van de hoorn. Hier is het
datablad van deze Zwitserse module. Test opstelling gemaakt: het mechanisme
is marginaal sterk genoeg op de hoorn volledig op te heffen. De bewegingssnelheid
is bijzonder laag: 80 tot 120 sekonden voor het gehele trajekt van 90 graden.
Het mechanisme is wel zo goed als geruisloos. Bij een spanning van 24 V DC is
het stroomverbruik slechts 40mA.
De eerste testopstelling op de lastafel ziet er nu zo uit:
27.10.2020: Verder TIG laswerk aan de ophanging en de mechanika voor de jachthoorn.
28.10.2020: Montage van de LM12 eindversterker en de voedingstransfo op geplooide
inox plaat. Bruikbare Haller-relais opgedolven in het lab voor gebruik met de
Belimo motor: Moeten
we ook hier weer een Penny+Giles rotation sensor toepassen, zoals we deden voor
<Ob>, <Klar> en <Fa>? Of, kunnen we met een 'eenvoudige' (maar
vandaag illegale) kwikschakelaar volstaan? Zou het mogelijk zijn de eindposities
af te leiden uit het stroomverbruik van de motor?
29.10.2020: M4 Tap afgebroken in de montageklem voor de hoorn... Schema voor
de motorbesturingsprint uitgetekend. Dit printje is slechts 60 mm breed en past
dus eventueel op het inox opstaand profiel van de hoorndrager.
Een PCB voor deze schakeling is eveneens in voorbereiding:
30.10.2020: Verder werk aan de PCB's nodig voor de verdere afwerking/uitwerking
van de <Rumo> robot. Hopelijk vallen we niet zonder essentiele onderdelen,
want de kortzichtige en ongedifferencieerde corona maatregelen van de Belgische
regering maken bevoorrading zo goed als onmogelijk.
31.10.2020: Produktie van twee PCB's: eentje voor de Belimo motorbesturing en
eentje voor een TDA7264 mono-brugversterkertje. Beide samen passen on een eurokaart
160x100mm. De kwaliteit van de geetste printjes is ondermaats, vanwege de te
geringe zwarting van onze printer... Dit is de gebruikte film:
01.11.2020: Opbouw van beide printjes. Korrekties aangebracht in de PCB files.
Tests hardware. Hier is de bestukte print:
02.11.2020: Begin ontwikkeling kode van de besturing van de Belimo motor voor
de beweging van de hoorn. De kalibratie zal, gezien de traagheid van de motor,
wel behoorlijk wat tijd in beslag nemen na koude start en power-down kommando's.
03.11.2020: Versie 1.0 van de motorbesturingsfirmware is klaar.
Hier ligt de print op de folterbank, gekoppeld aan de Tektronix oscilloskoop,
de PC en de Pickit3 programmer van Microchip.
04.11.2020: Bestelling 24 V voedingsmodules bij Farnell: TMP60124. Bestelnummer
2280022.
05.11.2020: Werk stilgelegd omwille van het ondergaan van een PET/CT scan...
06.11.2020: Kwikschakelaar aangepast aan het 8mm uitsteeksel van de 20 mm as
waarrond de hoorn kan draaien. Dit werkje volledig met de hand uitgevoerd, vanwege
het risiko op breuk van de glazen kwikschakelaar zelf.
07.11.2020: Levering van de bestelde Traco Power voeding, 24 V - 2.5 A. Konstruktie
van een chassisplaat voor de montage van deze voeding. Kablering van de motor,
kwikschakelaar en kompressiedriver.
08.11.2020: Verdere bedrading hoorn module.
09.11.2020: Ontwikkeling 18F2525 kode voor debouncing (kontaktdenderonderdrukking)
van de kwikschakelaar voor de motorbesturing van de hoorn. Eerste tests van
de motorbesturing onder spanning. De motor blijkt niet te doen wat was voorspeld...
hebben we een fout gemaakt in de bedrading van de relaisvoet? Grondig nazicht
wijst uit: inderdaad, foutief genummerd op het printontwerp. Dit moeten we dus
via een patch korrigeren. PCB ontwerp meteen ook gekorrigeerd zodat in toekomstige
versies de fout niet opnieuw zou kunnen optreden.
10.11.2020: Montage van een 24V/5W buislampje op het bewegend deel van de hoorn.
Test van de gekorrigeerde print voor de motorbesturing. Het blijkt goed te werken,
maar... een van de aansluitdraden naar de kwikschakelaar kwam al te strak onder
mechanische spanning te staan, waardoor de aansluiting naar de kwikschakelaar
afbrak. Einde van de mooie antieke kwikschakelaar. Nu zit er niks anders op
dan weer een Penny-Giles sensor (type STT280/60/P2) te gebruiken. Met de redaktie
van de firmware moeten we nu natuurlijk ook helemaal herbeginnen.
11.11.2020: TIG microwelding works: mounting plate for the sensor on the 8 mm
axle. Nieuwe versie van de firmware afgewerkt. De Penny+Giles sensor wordt nu
gevoed uit de 5V DC spanning. Een 78L12 regulator op het PCB is daarmee overbodig
geworden. Overweging om de hoorn module toch als een autonome robot verder te
bouwen. Dit is een mogelijke wielbasis voor zo'n autonome jachthoorn robot:
12.11.2020: De kogel is door de kerk: de jachthoorn gaat alleen en verlaat het
<rumo> projekt... Nu moeten we er natuurlijk een nieuwe naam voor verzinnen.
Begin konstruktie van de wielbasis... we vallen echter zonder schutgas: Argon
fles leeg. Onderkant van de basisplaat per vergissing gelast met gewone Hilco
rood elektroden in plaats van met inox elektroden...
13.11.2020: Zoektocht naar alweer een nieuwe verdeler voor Argon gas. Zou <Hunt>
een geschikte naam zijn voor deze robot? Nieuw argon gas ingekocht.
14.11.2020: Lampvoeten voor E14 ingekocht (Brico). Onderzoek naar een geschikte
klankbron voor het geweerschot...
15.11.2020: Verdere experimenten rond de implementatie van het geweerschot.
Een 12V duwmagneet met veer, voorzien van een M4 kogelknop in bakeliet die slaat
op een rond gietstuk in aluminium gemonteerd op twee trillingsdempers geeft
een redelijk resultaat. Kwa luidheid kan het de vergelijking met een echt geweerschot
natuurlijk niet doorstaan, maar de klank komt alvast een heel klein beetje in
de buurt. De gunshot module wordt middels twee M6 boutjes en een rubber spacer-matje
op de basisplaat vastgezet. Twee witte LED lampjes (24V) met E14 fitting worden
op de voorzijde gemonteerd. Hier is de volledige geweerschotmodule:
17.11.2020: Alle komponenten voor <Hunt> weer uiteengehaald teneinde de
ontbrekende gaten te kunnen boren in het chassis.
18.11.2020: Her-assemblage van <Hunt>
19.11.2020: Firmware voor het midi-hub board geschreven.
21.11.2020: Bedrading van de voedingen afgewerkt. Terugslagdiodes gemonteerd
op het hub board voor de te voorziene induktieve belastingen.
22.11.2020: Bedrading data-verbindingen, laagspanning en belastingen. Eerste
tests. <Hunt> speelt zijn eerste nootjes. Het 24V/5W tungsten lampje met
E14 fitting werkt niet: probleem met de voeding en begrenzing van de inschakelstroom?
Met een LED lampje werkt het perfekt...
23.11.2020: Stroompanne in de Bomastraat... Uitwerken van de test-software in
GMT. Begin implementatie van de lookups voor juiste boventoonreeksen.
41 | 41.00 | 87.306 Hz | 1 |
53 | 53.00 | 174.613 Hz | 2 |
60 | 60.02 | 261.921 Hz | 3 |
65 | 65.00 | 349.228 Hz | 4 |
69 | 68.86 | 436.535 Hz | 5 |
72 | 72.02 | 523.842 Hz | 6 |
75 | 74.69 | 611.149 Hz | 7 |
77 | 77.00 | 698.456 Hz | 8 |
79 | 79.04 | 785.763 Hz | 9 |
81 | 80.86 | 873.070 Hz | 10 |
83 | 82.51 | 960.377 Hz | 11 |
84 | 84.02 | 1047.684 Hz | 12 |
85 | 85.41 | 1134.991 Hz | 13 |
87 | 86.69 | 1222.298 Hz | 14 |
88 | 87.88 | 1309.605 Hz | 15 |
89 | 89.00 | 1396.912 Hz | 16 |
90 | 90.05 | 1484.219 Hz | 17 |
91 | 91.04 | 1571.526 Hz | 18 |
92 | 91.97 | 1658.833 Hz | 19 |
93 | 92.86 | 1746.140 Hz | 20 |
94 | 93.71 | 1833.447 Hz | 21 |
95 | 95.28 | 2008.061 Hz | 23 |
96 | 96.02 | 2095.368 Hz | 24 |
97 | 97.41 | 2269.982 Hz | 26 |
98 | 98.05 | 2357.289 Hz | 27 |
98 | 98.69 | 2444.596 Hz | 28 |
99 | 99.29 | 2531.903 Hz | 29 |
99 | 99.88 | 2619.210 Hz | 30 |
100 | 100.45 | 2706.517 Hz | 31 |
101 | 101.00 | 2793.824 Hz | 32 |
In de PIC firmware te implementeren frekwenties voor een mogelijke just-intonation kromatische toonladder gesteund op Fa = 41 = 87.307 Hz:
41 | 42 - 42.05 | 43 - 43.04 | 44 - 43.97 | 45 - 44.86 | 46 - 45.71 | 47 - 46.51 | 48 - 48.02 | 49 - 49.41 | 50 - 50.05 | 51 - 50.69 | 52 - 51.88 |
87.306 | 92.76 | 98.22 | 103.68 | 109.13 | 114.590 | 120.047 | 130.960 | 141.874 | 147.330 | 152.787 | 163.700 |
53 | 54 - 54.05 | 55 - 55.04 | 56 - 55.97 | 57 - 56.86 | 58 - 57.71 | 59 - 58.51 | 60 - 60.02 | 61 - 61.41 | 62 - 62.05 | 63 - 62.69 | 64 - 63.88 |
174.613 | 185.53 | 196.44 | 207.35 | 218.27 | 229.181 | 240.094 | 261.921 | 283.747 | 294.661 | 305.574 | 327.401 |
65 | 66 - 66.05 | 67 - 67.04 | 68 - 67.97 | 69 - 68.86 | 70 - 69.71 | 71 - 70.51 | 72 - 72.02 | 73 - 73.41 | 74 - 74.05 | 75 - 74.69 | 76 - 75.88 |
349.228 | 371.05 | 392.88 | 414.71 | 436.535 | 458.362 | 480.188 | 523.842 | 567.495 | 589.322 | 611.149 | 654.802 |
77 | 78 - 78.05 | 79 - 79.04 | 80 - 79.97 | 81 - 80.86 | 82 - 81.71 | 83 - 82.51 | 84 - 84.02 | 85 - 85.41 | 86 - 86.05 | 87 - 86.69 | 88 - 87.88 |
698.456 | 742.11 | 785.763 | 829.42 | 873.070 | 916.724 | 960.377 | 1047.684 | 1134.991 | 1178.644 | 1222.298 | 1309.605 |
89 | 90 - 90.05 | 91 - 91.04 | 92 - 91.97 | 93 - 92.86 | 94 - 93.71 | 95 - 94.51 | 96 - 96.02 | 97 - 97.41 | 98 - 98.05 | 99 - 98.69 | 100 - 99.88 |
1396.912 | 1484.219 | 1571.526 | 1658.833 | 1746.140 | 1833.447 | 1920.754 | 2095.368 | 2269.982 | 2357.289 | 2444.596 | 2619.210 |
De in rood gedrukte frekwenties werden berekend door oktavering naar omlaag van hoger gelegen gehele boventonen. Deze tonen zijn normaal gesproken onspeelbaar op de natuurhoorn. De in blauw gedrukte noten en frekwenties zijn niet geimplementeerd in de firmware voor de <Hunt> robot. De just-intonation stemming kan door de gebruikers geselekteerd worden met controller 20, waarde 41. Da's geen spookgetal, maar de midinoot overeenkomend met de basisstemming van onze jachthoorn: fa. Firmware voor de PIC24 en voor de HUB aangepast.
24.11.2020: Formant filter nieuw berekend. Diverse bronnen geven erg verschillende
frekwenties op voor de formanten van de hoorn. Een lage formant tussen 400Hz
en 550Hz en een hoge gelegen tussen 2000Hz en 3500Hz. Aangezien we hier met
een hoge Fa hoorn te maken hebben, vermoeden we dat de hoge formant eerder naar
de 3500Hz zal toegaan. Deze formant vastleggen op 2794Hz lijkt een goede keuze,
want het is meteen ook het vierde oktaaf boven de grondtoon, of de 32ste boventoon.
De komponenten waarden in het dynamisch formant filter moeten nu worden C= 69nF,
L=47mH. (voor f=2794Hz). Toonschaal uitgetekend voor de gebruikershandleiding:
. PIC-firmware opnieuw
opgeladen in de diverse PIC's.
29.11.2020: Zarlino poogde in de zestiende eeuw een basis te vinden voor een
muziek gebaseerd op de drie harmonische majeur drieklanken: tonika, subdominant,
dominant. Hij stelde daarbij voor drie verhoudingen te gebruiken: 1, 5:4, 3:2.
Zijn frekwentieverhoudingen komen er uit te zien als: 1:1 9:8 5:4 4:3 3:2 5:3
15:8 2:1 of, in midi-noten: 36.00 38.04 39.86 40.98 43.02 44.84 46.88 48.00
De genoemde drieklanken klinken in deze schaal bijzonder konsonant en zwevingsvrij,
maar transpositie naar andere toonaarden wordt nu wel heel erg problematisch.
De kwint Re-La levert ons nu immers niet minder dan 11 zwevingen op. Het Zarlino
systeem kent drie kwalitatief verschillende intervallen: de halve toon met verhouding
16:5, en twee soorten hele tonen: 9:8 (do-re, fa-sol en la-si) en 10:9 (Si-Do,
sol-la). Het verschil tussen deze beide hele tonen nml. (9/8)/(10/9) = 81/80
= 1.0125. Dit verschil is men de syntonische komma gaan noemen, ongeveer een
negende van een toon.
Een vrij gangbare selektie waarmee 12 toontrappen per oktaaf kunnen worden samengesteld,
wordt gedefinieerd alsvolgt:
1:1 15:14 10:9 6:5 5:4 4:3 10:7 3:2 5:3 32:19 12:7 15:8
In fractionele midi getallen -de cent afwijking tegenover de gelijkzwevende
kromatische stemming is het gedeelte na de komma- levert dit plaatje op:
36.00 37.19 37.82 39.16 39.86 40.98 42.17 43.02 44.84 45.02 45.33 46.88 Noteer
dat een dergelijke 'juiste' stemming in het geheel niet overeenkomt met een
zuivere boventoonsstemming! Alleen de intervallen 5:4 (= 5e boventoon), 3:2
(= 6e boventoon), 32:19 (= 9e boventoon) en 15:8 (= 15e boventoon) stemmen overeen.
30.11.2020: Verder werk en experimenten met diverse juiste-boventoonsstemmingen.
Volgende just-intonation stemming is nu in de firmware geimplementeerd: Deze
stemmingen kunnen nu geselekteerd worden met controller 20, parameters 48 tot
59. Met parameter 41 kunnen we een uitsluitend uit boventonen van noot 41 bestaande
toonladder selekteren. De berekening van de nodige look-up tabellen voor de
24F PIC microprocessor gebeurt in de GMT module voor <Rumo>. Die module
genereert een log-bestand dat moet gekopieerd worden naar de betreffende bronkode
voor de microprocessor. Een tweede just intonation toonladder gesteund op volgende
intervalverhoudingen 1/1, 21/20, 9/8, 7/6, 5/4, 4/3, 7/5, 3/2, 14/9, 5/3, 7/4,
15/8, voegden we toe -vooral op instigatie van een post op onze facebook pagina.
01.12.2020: Niet echt gelukkig met het geweerschot. Om goed te klinken zou de
spanning over de spoel ca. 120V moeten zijn. Daarvoor zou dan wel een afzonderlijke
voeding moeten voorzien worden...
02.12.2020: Verdere experimenten en research rond de berekening van de lookuptables
voor de membraankompressor. Ook de lookups voor de dynamiek hebben we bij deze
meer mogelijkheden gegeven. Voor de ADSR lijkt een bereik van 30dB in elk geval
beter te werken dan de 40dB die we bij default hadden op deze en ook op de meeste
vroegere robots. 60dB is ook mogelijk, maar erg ver verwijderd van enige akoestische
realiteit.
03.12.2020: GMT-testkode aangepast. Om vergelijkingen van diverse golfvormen
mogelijk te maken, implementeerden we de one-shot kontrollers in de rechterkolom
van de GMT cockpit. De opnames van jachthoorns die we kunnen vinden, zijn muzikaal
weinig bruikbaar: er wordt een excessief vibrato toegepast en de dynamiek is
steeds fff , zo hard mogelijk, en dus ook extreem scherp. Het klinkt een beetje
alsof de hoorns met een kazoo (mirliton) worden bespeeld... Opnames van klassiek
repertoire (Haydn, Mozart) met natuurhoorn zijn heel wat beter bruikbaar als
referentiepunt.
04.12.2020: Firmware voor de 24EP256 processors volledig herschreven met een
interrupt gestuurde sampling rate voor de dynamiek.
05.12.2020: Bug gevonden in alle vroegere 24EP kode, i.v.m. foutieve manier
om een 32-bit timer uit te lezen. Alle programmeerwerk sinds 3 december in de
vernieling gereden door foutief overschrijven van de bronkode...
06.12.2020: Uit geheugen opnieuw de kode gerekonstrueerd en opnieuw getest.
Alles lijkt nu perfekt te werken. Het 'niet werken' van release bleek niet te
wijten aan enige fout in de firmware, maar wel aan de GMT testkode, waarin we
Noteoff gebruiken, wat altijd als lsb zero oplevert en dus telkens ook release
naar nul brengt. mPlay noot, 0 daareentegen werkt perfekt met CC19. Opmerking:
Gegeven de standaard sampling rate van 44.1kS/s is de hoogste noot waarvoor
onze metode voor de berekening van een excitatiegolfvorm kan worden toegepast,
midi noot 64 (329Hz). Met een sampling rate van 192 kS/s moeten we noten tot
en met 90 (1480 Hz) kunnen halen.
08.12.2020: De huidige versie voor de 24EP firmware blijkt het goed te doen.
Afwachten nu naar de reakties en feedback van onze gebruikers...
09.12.2020: Vele van de nieuw geimplementeerde mogelijkheden in de firmware
van <Hunt> nu ook toegepast in de nieuwste versie van de
<Bug> firmware.
10.12.2020: Tentatieve fotoshoot met <Hunt>.
29.12.2020: Uittekenen en lassen van een stuurstang aan de achterzijde. TIG
laswerk. Als handvat gebruikten we een gerecycleerde inox deurklink. Die is
echter dunwandig en hol, waardoor het lassen vrij lastig is. Bevestiging met
een enkele M10 x 30 inox bout op het onderchassis.
02.01.2021: Verder schaafwerk aan de firmware voor <Hunt>.
11.01.2021: Uitzoeken van enkele typische signaal melodien voor natuurhoorns
en klaroenen. De 'Last Post' bvb.:
Of/en deze taptoe melodie : Of
nog, als we het heel kort willen houden, de Amerikaanse taps:
Deze stukjes kunnen we embedden in GMT maar ook spelen vanuit een aangesloten
AXO-board.
12.01.2021: Transponeren naar fa en inbrengen van bovenstaande melodietjes.
15.01.2021: Firmware voor de motor besturings PIC afgewerkt en getest. De beweginghoek
kan -met de huidige kode- gaan van -40 tot + 40 graden. In principe moet -60
tot +60 graden mogelijk zijn, maar we vermoeden dat de motor niet krachtig genoeg
is om dat trajekt ook effektief te halen. Een Belimo motor type SM24A bestaat
en heeft viermaal meer kracht (20 Nm). Kostprijs: 180 euro...
16.01.2021: Merkwaardig: na enige tijd blijkt de hoorn naar de uiterst lage
positie te bewegen en meten we 3.5V op de sensor uitgang... Verklaring?
17.01.2021: De onbetrouwbaarheid van de motorbesturing blijkt een funktie te
zijn van de besturing van Lite1, het 24 Volt lampje gemonteerd op de hoorn en
met PWM bestuurd. We kunnen ofwel de PWM hier geheel achterwege laten, ofwel
de PWM frequentie een heel stuk verlagen. De stoorspanning kan natuurlijk ook
veroorzaakt worden door een niet al te gunstige tracing van de massas op het
PCB. Of, nog, doordat we geen afgeschermde kabel gebruikten voor de sensor noch
voor de PWM stroom naar het lampje. Hoe dan ook, gezien de geringe meerwaarde
van die PWM op dat lampje, besloten we dit helemaal uit de kode te verwijderen
en alleen nog aan/uit te implementeren.
18.01.2021: Problemen met de implementatie van vibrato op de pitch-PIC...
19.01.2021: Vibrato volledige debug o.k. nu. Dokumentatie: zie source kode voor
de PIC's. Sommige van de bug's waren ook relevant voor de firmware van <Flut>,<Autosax>,<So>
en <Bug>. 'The Last Post' als testfile aangemaakt in midi, getransponeerd
naar Fa.
20.01.2021: Afwerking van de handgrepen op <Hunt>: inox beugel gemaakt
uit 12 mm dik staafmateriaal en met TIG opgelast aan de voorkant. De M12 hex-wielbout
waarmee het voorste wiel is gemonteerd is iets te kort! De juiste maat hebben
we echter niet op voorraad...
25.01.2021: Afregeling trimpot voor het formant filter.
03.02.2021: <Hunt> placed in the orchestra, connected to port 4, and used
in 'Equilibrium', a new composition by Alain Van Zeveren.
15.02.2021: Bad news from Cera bank: our request for a subsidy leading to the
construction of an automated hunting horn was turned down... As a result, <Hunt>'s
improved brother <Yaho> will never be made.
22.02.2021: Verdere tests met <Hunt> in het robot orkest. Nu vast geimplementeerd
op midi poort 4 (tellend vanaf 0). De GMT testkode zit nog steeds in de slagwerkkompilatie
onder <Rumo>. Te zijner tijd moeten we dit nu wel overbrengen naar de
M-robots kompilatie.
23.02.2021: Demo files verder uitgewerkt met het oog op de live stream rond
<Hunt> donderdag a.s.
24.02.2021: Research on excitation waveforms based on algorithms obtained after
applying curve matching on our datasets.The best matching formula for our hunting
horn looks like this: y = a cos(x + d) + b cos(2x + d) + c cos(3x + d) with
the following parameters:
This result was obtained with version 2.2.1 of the CurveExpertBasic software.
An alternative formula could be y = a cos(2x) + b sin(x), with parameters: a
= -1.385711969E-01 and b = 5.74998612810E-01.
25.02.2021: Aangezien het geluid uit de hoorn toch nog steeds te scherp klinkt,
overwegen we ook het formant filter aan te passen en in plaats van de hoge formant
frekwentie van 2794Hz een lage tussen 400Hz en 800Hz uit te testen. Die lage
formant is ook wat vaak in registers voor elektronische orgels wordt toegepast
voor het hoornregister: Deze
voorbeeldschakelingen komen uit het boek van Hans Goddijn uit de vroege jaren
'70.,
03.02.2021: De berekende golfvorm op 24.02.2021 na resynthese met de formule
verkregen uit curve fitting ziet er uit als: Duidelijk
een vorm van additieve synthese waarbij de per periode variabele fasen van de
sinussen ontbreken. Het zou ook een goed idee zijn de eerste twee perioden te
voorzien van een Gauss-window.
05.03.2021: PIC code voor de toongenerator aangepast voor de wave0 lookup tabel.
PCB losgenomen voor wijzigingen aan het formant filter. Met de LC-waarden die
we hadden, 47 mH en 68 nF, was de formant frekwentie 2815Hz. Wanneer we de kondensator
op 1uF bepalen, verkrijgen we een frekwentie van 734 Hz, overeenkomend met midi
noot 78 of -ongeveer- fa#. We selekteerden de grootste 1uF kondensator uit onze
voorraad, maten die uit en bepaalden de kapaciteit op 1.05uF, wat de uiteindelijke
formantfrekwentie brengt op 716 Hz. Evaluatie: dit formant filter klinkt effektief
beter dan de eerste versie met de hoge formant. De wave0 lookup is bruikbaar
maar geeft heel wat artefakten in het hoogte. Dit zou kunnen opgelost worden
door de wav bestanden in de firmware minstens 4 maal groter te maken, dus 4096
words i.p.v. 1024.
Maintenance information:
Belimo LM24 motor. [used
for the horn up and down movement]
Relay's on the Belimo motor control board: Haller-Relais, HB8-4-1B8-702, Spule 12V dc, kontakte: 28V dc or 115V ac, max. 30W.
The Belimo motor power supply used is a Traco Power TMM60124 module, 24V - 2.5A
Tubular light on the horn assembly: 24 V - 5 W
Penny+Giles tilt sensor Type STT280/60 [on the horn assembly] [obsolete part as of 01.2021]
Tubular push solenoid used for the gunshot mechanism: Tremba Gmbh, ZMF-3258d.002 12VDC, 100%, Art.nr.101192
Rode LED signaallampjes met E14 fitting: 24V (2 stuks)
Witte LED lampjes met E14 fitting: 24V (2 stuks)
Selenium driver: type D250-X, 8 Ohms, 100W rms. 1.28kg. Peak SPL: 107dBA. Frequency range: 400-9000 Hz. Produced by Elektronica Selenium S.A., Nova Santa Rita RS, Brasil. Phone:(51)3479-4000. Web-URL: https://www.premiershop.com.br/driver-jbl-selenium-d250x-100-watts-rms.html#product-description This factory now produces the horn drivers for JBL loudspeaker systems.
References:
by Godfried-Willem Raes
Geschatte kost voor bouw en ontwerp van deze jachthoorn robot
1.- materialen:
Dubbel microprocessor board voor de besturing van de membraankompressor (2 16-bit 24EP256MC202 processors, precizie analoge multipliers...) |
600,-
|
Midi-hub board (parser, 18F2620 processor) |
350,-
|
Motor-controller board (18F4260 processor) |
200,-
|
Belimo motor met vertragingskast |
210,-
|
Jachthoorn (tweedehands?) |
100,-
|
Selenium compressor driver, 8 Ohm, 150W |
150,-
|
Vermogensversterkermodule, analoog, audio, 150W (LM12 opamp) |
200,-
|
Roestvast staal voor laswerk en konstruktie |
150,-
|
Industriegas: argon |
100,-
|
Wielen (2x 400mm, met spaken, PU banden, 1x90 mm zwenkwiel) |
650,-
|
Lampjes en lichtmaterialen, sockets enz. |
45,-
|
Voeding 24V - 8A |
160,-
|
Voeding +/- 36V - 150W, analoog |
200,-
|
Penny & Giles positiesensor (inclinatie) |
110,-
|
Bedrading en isolatie |
50,-
|
Solenoid Tremba |
62,-
|
IEC netingang en zekeringen |
18,-
|
aan-uit schakelaar |
12,-
|
Totaal: |
3.517,-
|
2.- arbeid: