<phyphox xmlns="http://phyphox.org/xml" xmlns:editor="http://phyphox.org/editor/xml" version="1.7" editor:version="1.0" locale="en">
    <title>Frequency Response</title>
    <category>Acoustics</category>
    <description>Get the amplitude and frequency of sounds. Also shows the frequency spectrum.
</description>
    <link label="Wiki">http://phyphox.org/wiki/index.php?title=Experiment:_Audio_Amplitude</link>
    <icon format="base64">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</icon>
    <translations>
        <translation locale="de">
            <title>Frequenzgang</title>
            <category>Akustik</category>
            <description>
Ermittelt die Amplitude und den Frequenzverlauf von Audio-Signalen. Zeigt außerdem ein Spektrum an.
</description>
            <string original="NOT calibrated">NICHT kalibriert</string>
            <string original="calibrated">kalibriert</string>
            <string original="Sound pressure level">Schalldruckpegel</string>
            <string original="History">Verlauf</string>
            <string original="Time">Zeit</string>
            <string original="Clear history">Verlauf löschen</string>
            <string original="Please see the calibration tab to get proper results.">Sieh dir bitte die Seite 'Kalibration' an, um vernünftige Ergebnisse zu erhalten.</string>
            <string original="Calibration">Kalibration</string>
            <string original="This experiment uses a rather naive approach to determine the sound pressure level (SPL). You will need a reference sound with a known amplitude in dB. For example, you could setup a constant noise source and measure its sound pressure level with an external device. Enter the measured level as the reference SPL and push 'calibrate' while the experiment is running.">Dieses Experiment nutzt eine recht simple Methode um den Schalldruckpegel zu bestimmen. Du musst ein Referenz-Geräusch mit bekannter Amplitude in dB erzeugen. Beispielsweise könntest du eine konstante Geräuschquelle benutzen und den Schalldruckpegel mit einem externen Gerät in gleichem Abstand messen. Den Pegel kannst du dann als Referenz eingeben und bei laufendem Experiment auf 'Kalibrieren' drücken.</string>
            <string original="Reference SPL">Referenz-Pegel</string>
            <string original="Calibrate">Kalibrieren</string>
            <string original="Calibration offset">Kalibrations-Offset</string>
            <string original="If you have done this before or on an identical device you may just enter the calibration offset from your previous calibration directly and press 'set offset'.">Wenn du dieses oder ein identisches Smartphone schon vorher kalibriert hast, kannst du auch einfach den Offset der vorherigen Kalibration unten eingeben und auf 'Offset setzen' drücken.</string>
            <string original="Custom offset">Eigener Offset</string>
            <string original="Set offset">Offset setzen</string>
            <string original="How accurate are these results?">Wie genau sind die Ergebnisse?</string>
            <string original="For teaching and exploring? Probably good enough. For serious studies? Probably not, but other apps might perform better (see below). For scientific or health-related applications? Certainly not, get a dedicated device for this.">Für den Unterricht und einfaches Ausprobieren? Wahrscheinlich gut genug. Für ernstere Studien? Wahrscheinlich nicht so gut, aber andere Apps könnten besser sein (siehe unten). Für Wissenschaft oder Arbeitsschutz? Sicherlich nicht gut genug, dafür braucht man spezielle Geräte.</string>
            <string original="Why isn't this already calibrated?">Warum ist das Experiment nicht schon kalibriert?</string>
            <string original="phyphox is available on more than 10000 devices. Most of them have different microphones, different electronics and different software - all affecting their response to sound. We cannot calibrate them all, but in some cases there are apps which only target a limited number of devices (like apps specific to iPhones) which can calibrate these few devices. If you are interested in better results without calibration, you should check out specific apps for your device.">phyphox ist auf mehr als 10000 Geräten verfügbar. Die meisten haben verschiedene Mikrofone, verschiedene Elektronik und verschiedene Software - das alles beeinflusst die Messung. Wir können diese Geräte nicht alle kalibrieren, aber manche Apps bedienen eine kleinere Geräte-Auswahl (beispielsweise iPhone-Apps) und können diese Auswahl auch kalibrieren. Wenn du Interesse an genaueren Messungen hast, solltest du solche spezielleren Apps ausprobieren.</string>
            <string original="Why can't we get a better calibration?">Warum ist keine genauere Kalibration möglich?</string>
            <string original="We wanted a simple procedure to allow students to get comparable data across different devices. With decent equipment you could calibrate the frequency dependency of your microphone as well and maybe even compensate for non-linear responses. If you have such equipment and want to try it, please let us know - we already have phyphox-experiments that allow for more advanced calibration techniques.">Wir wollen eine einfache Kalibration für Schülerinnen und Schüler sowie Studierende anbieten, so dass vergleichbare Daten für verschiedene Geräte möglich sind. Mit guten Messgeräten könnte man auch den Frequenzgang des Mikrofons und vielleicht sogar nicht-lineares Verhalten kompensieren. Wenn du über solche Geräte verfügst und es ausprobieren möchtest, lass es uns wissen - wir haben bereits phyphox-Experimente, die komplexere Kalibrationstechniken ermöglichen.</string>
            <string original="Spectrum">Spektrum</string>
            <string original="Peak-Frequency">Frequenzspitze</string>
            <string original="Musical note">Note (Musik)</string>
            <string original="Low">Niedrig</string>
            <string original="High">Hoch</string>
            <string original="Cents from note">Cent über Note</string>
            <string original="Fourier Transform">Fourier-Transformierte</string>
            <string original="Frequency">Frequenz</string>
            <string original="Samples used">Genutzte Werte</string>
            <string original="Period used">Genutzte Periode</string>
            <string original="History">Verlauf</string>
            <string original="Fourier Transform">Fourier-Transformierte</string>
            <string original="Frequency">Frequenz</string>
            <string original="Settings">Einstellungen</string>
            <string original="Below you can set the number of samples used for the Fourier transform. More samples means slower updates, but higher spectral resolution.">Hier kannst du die Anzahl der Messwerte einstellen, die für die Fourier-Transformation genutzt werden. Mehr Messwerte bedeuten langsamere Aktualisierung, aber auch ein Spektrum mit höherer Auflösung.</string>
            <string original="Samples">Messwerte</string>
            <string original="Raw data">Rohdaten</string>
            <string original="Recording">Aufnahme</string>
        </translation>
    </translations>
    <data-containers>
<!--    <container size="4800" static="false">recording</container> -->
        <container size="4800" static="false">recordingSquared</container>
        <container size="1" static="false">sum</container>
        <container size="1" static="false">mean</container>
        <container size="1" static="false">dbUncal</container>
        <container size="1" static="false">lnMean</container>
        <container size="1" static="false">userCalibration</container>
        <container size="1" static="true">ln10</container>
        <container size="0" static="false">timedb</container>
        <container size="1" static="false">now</container>
        <container size="1" init="0" static="false">t0</container>
        <container size="1" init="0" static="false">resetTime</container>
        <container size="0" static="false">dB</container>
        <container size="1" init="0" static="false">calibration</container>
        <container size="1" init="60" static="false">target dB</container>
        <container size="1" static="false">newCal</container>
        
        <container size="32768" static="false">recording</container>
        <container size="1" static="false">rate</container>
        <container size="1" static="false">rate/2</container>
        <container size="32768" static="false">recording_subrange</container>
        <container size="1" static="false">recording_length</container>
        <container size="1" init="2048" static="false">samples</container>
        <container size="1" static="false">actual_samples/2</container>
        <container size="1" static="false">actual_samples/2+1</container>
        <container size="1" static="false">actual_samples+1</container>
        <container size="1" static="false">actual_samples</container>
        <container size="1" static="false">subrange_start</container>
        <container size="1" static="false">period</container>
        <container size="32769" static="false">time</container>
        <container size="32769" static="false">frequency</container>
        <container size="32768" static="false">fftX</container>
        <container size="32768" static="false">fftY</container>
        <container size="16384" static="false">halfFrequency</container>
        <container size="16384" static="false">halfFFTtempX</container>
        <container size="16384" static="false">halfFFTtempY</container>
        <container size="16384" static="false">fft</container>
        <container size="1" static="false">f0</container>
        <container size="1" static="false">ratio</container>
        <container size="1" static="true">log2</container>
        <container size="1" static="false">logRatio</container>
        <container size="1" static="false">log2Ratio</container>
        <container size="1" static="false">cents</container>
        <container size="1" static="false">semitones</container>
        <container size="1" static="false">semitonesRound</container>
        <container size="1" static="false">semitonesDiff</container>
        <container size="1" static="false">centsDiff</container>
        <container size="1" static="false">t</container>
        <container size="1" static="false">resolutionRatio</container>
        <container size="256" static="false">timeline</container>
        <container size="4096" static="false">reducedf</container>
        <container size="4096" static="false">reducedfft</container>
        <container size="256" static="false">subf</container>
        <container size="256" static="false">subfft</container>
        <container size="32768" static="false">tmap</container>
        <container size="32768" static="false">fmap</container>
        <container size="32768" static="false">fftmap</container>
        
    </data-containers>
    <input>
        <audio editor:uuid="175" editor:posx="100" editor:posy="250" rate="48000">
            <output>recording</output>
            <output component="rate">rate</output>
        </audio>
    </input>
    <output>
    </output>
    <analysis sleep="0.05" dynamicSleep="period" onUserInput="false">
        <timer editor:uuid="356">
            <output as="out" >now</output>
        </timer>
        <if editor:uuid="357" less="false" equal="true" greater="false">
            <input as="a" clear="false">resetTime</input>
            <input as="b" type="value">1</input>
            <input as="true" clear="false">now</input>
            <output as="result">t0</output>
        </if>
        <append editor:uuid="358">
            <input as="in" type="value">0</input>
            <output as="out">resetTime</output>
        </append>
        <subtract editor:uuid="359">
            <input as="minuend" clear="false">now</input>
            <input as="subtrahend" clear="false">t0</input>
            <output as="difference" clear="false">timedb</output>
        </subtract>
        <power editor:uuid="360">
            <input as="base" clear="false">recording</input>
            <input as="exponent" type="value">2</input>
            <output as="power">recordingSquared</output>
        </power>
        <integrate editor:uuid="361">
            <input as="in">recordingSquared</input>
            <output as="out">sum</output>
        </integrate>
        <divide editor:uuid="362">
            <input as="dividend">sum</input>
            <input as="divisor" type="value">2400</input>
            <output as="quotient">mean</output>
        </divide>
        <log editor:uuid="363">
            <input as="value" clear="false">mean</input>
            <output as="log">lnMean</output>
        </log>
        <log editor:uuid="364">
            <input as="value" type="value">10</input>
            <output as="log">ln10</output>
        </log>
        <divide editor:uuid="365">
            <input as="dividend" clear="false">lnMean</input>
            <input as="divisor" clear="false">ln10</input>
            <input as="divisor" type="value">0.1</input>
            <output as="quotient">dbUncal</output>
        </divide>
        <add editor:uuid="366">
            <input as="summand" clear="false">dbUncal</input>
            <input as="summand" clear="false">calibration</input>
            <output as="sum" clear="false">dB</output>
        </add>
        <subtract editor:uuid="367">
            <input as="minuend" clear="false">target dB</input>
            <input as="subtrahend" clear="false">dbUncal</input>
            <output as="difference">newCal</output>
        </subtract>
        
        
        
        <timer editor:uuid="223" editor:posx="500" editor:posy="100">
            <output as="out">t</output>
        </timer>
        <const editor:uuid="224" editor:posx="750" editor:posy="350">
            <input as="value" clear="false">time</input>
            <input as="length" type="value">256</input>
            <output as="out">timeline</output>
        </const>
        <count editor:uuid="225" editor:posx="1000" editor:posy="600">
            <input as="buffer" clear="false">recording</input>
            <output as="count">recording_length</output>
        </count>
        <subtract editor:uuid="226" editor:posx="1250" editor:posy="850">
            <input as="minuend" clear="false">recording_length</input>
            <input as="subtrahend" clear="false">samples</input>
            <output as="difference">subrange_start</output>
        </subtract>
        <subrange editor:uuid="227" editor:posx="1500" editor:posy="1100">
            <input as="from" clear="false">subrange_start</input>
            <input as="in" clear="false">recording</input>
            <output as="out">recording_subrange</output>
        </subrange>
        <count editor:uuid="228" editor:posx="1750" editor:posy="1350">
            <input as="buffer" clear="false">recording_subrange</input>
            <output as="count">actual_samples</output>
        </count>
        <add editor:uuid="229" editor:posx="2000" editor:posy="1600">
            <input as="summand" clear="false">actual_samples</input>
            <input as="summand" type="value">1</input>
            <output as="sum">actual_samples+1</output>
        </add>
        <divide editor:uuid="230" editor:posx="2250" editor:posy="1850">
            <input as="dividend" clear="false">actual_samples</input>
            <input as="divisor" type="value">2</input>
            <output as="quotient">actual_samples/2</output>
        </divide>
        <add editor:uuid="231" editor:posx="2500" editor:posy="2100">
            <input as="summand" clear="false">actual_samples/2</input>
            <input as="summand" type="value">1</input>
            <output as="sum">actual_samples/2+1</output>
        </add>
        <divide editor:uuid="232" editor:posx="2750" editor:posy="2350">
            <input as="dividend" clear="false">actual_samples</input>
            <input as="divisor" clear="false">rate</input>
            <output as="quotient">period</output>
        </divide>
        <divide editor:uuid="233" editor:posx="3000" editor:posy="2600">
            <input as="dividend" clear="false">rate</input>
            <input as="divisor" type="value">2</input>
            <output as="quotient">rate/2</output>
        </divide>
        <ramp editor:uuid="234" editor:posx="3250" editor:posy="2850">
            <input as="start" type="value">0</input>
            <input as="stop" clear="false">period</input>
            <input as="length" clear="false">actual_samples+1</input>
            <output as="out">time</output>
        </ramp>
        <ramp editor:uuid="235" editor:posx="3500" editor:posy="3100">
            <input as="start" type="value">0</input>
            <input as="stop" clear="false">rate/2</input>
            <input as="length" clear="false">actual_samples/2+1</input>
            <output as="out">frequency</output>
        </ramp>
        <fft editor:uuid="236" editor:posx="3944" editor:posy="3256">
            <input as="re" clear="false">recording_subrange</input>
            <output as="re">fftX</output>
            <output as="im">fftY</output>
        </fft>
        <subrange editor:uuid="237" editor:posx="4000" editor:posy="3600">
            <input as="from" type="value">1</input>
            <input as="to" clear="false">actual_samples/2</input>
            <input as="in" clear="false">frequency</input>
            <input as="in" clear="false">fftX</input>
            <input as="in" clear="false">fftY</input>
            <output as="out">halfFrequency</output>
            <output as="out">halfFFTtempX</output>
            <output as="out">halfFFTtempY</output>
        </subrange>
        <formula editor:uuid="238" editor:posx="4250" editor:posy="3850" formula="sqrt([1_]*[1_]+[2_]*[2_])">
            <input as="in" clear="false">halfFFTtempX</input>
            <input as="in" clear="false">halfFFTtempY</input>
            <output as="out">fft</output>
        </formula>
        <max editor:uuid="239" editor:posx="4500" editor:posy="4100" multiple="false">
            <input as="x" clear="false">halfFrequency</input>
            <input as="y" clear="false">fft</input>
            <output as="position">f0</output>
        </max>
        <divide editor:uuid="240" editor:posx="4750" editor:posy="4350">
            <input as="dividend" clear="false">f0</input>
            <input as="divisor" type="value">440</input>
            <output as="quotient">ratio</output>
        </divide>
        <log editor:uuid="241" editor:posx="5000" editor:posy="4600">
            <input as="value" type="value">2</input>
            <output as="log">log2</output>
        </log>
        <log editor:uuid="242" editor:posx="5250" editor:posy="4850">
            <input as="value" clear="false">ratio</input>
            <output as="log">logRatio</output>
        </log>
        <divide editor:uuid="243" editor:posx="5500" editor:posy="5100">
            <input as="dividend" clear="false">logRatio</input>
            <input as="divisor" clear="false">log2</input>
            <output as="quotient">log2Ratio</output>
        </divide>
        <multiply editor:uuid="244" editor:posx="5750" editor:posy="5350">
            <input as="factor" clear="false">log2Ratio</input>
            <input as="factor" type="value">1200</input>
            <output as="product">cents</output>
        </multiply>
        <divide editor:uuid="245" editor:posx="6000" editor:posy="5600">
            <input as="dividend" clear="false">cents</input>
            <input as="divisor" type="value">100</input>
            <output as="quotient">semitones</output>
        </divide>
        <round editor:uuid="246" editor:posx="6250" editor:posy="5850" floor="false" ceil="false">
            <input as="value" clear="false">semitones</input>
            <output as="round">semitonesRound</output>
        </round>
        <subtract editor:uuid="247" editor:posx="6500" editor:posy="6100">
            <input as="minuend" clear="false">semitones</input>
            <input as="subtrahend" clear="false">semitonesRound</input>
            <output as="difference">semitonesDiff</output>
        </subtract>
        <multiply editor:uuid="248" editor:posx="6750" editor:posy="6350">
            <input as="factor" clear="false">semitonesDiff</input>
            <input as="factor" type="value">100</input>
            <output as="product">centsDiff</output>
        </multiply>
        <divide editor:uuid="249" editor:posx="7000" editor:posy="6600">
            <input as="dividend" clear="false">actual_samples</input>
            <input as="divisor" type="value">2048</input>
            <output as="quotient">resolutionRatio</output>
        </divide>
        <reduce editor:uuid="250" editor:posx="7250" editor:posy="6850" averageX="true" averageY="true" sumY="false">
            <input as="factor" clear="false">resolutionRatio</input>
            <input as="x" clear="false">halfFrequency</input>
            <input as="y" clear="false">fft</input>
            <output as="x">reducedf</output>
            <output as="y">reducedfft</output>
        </reduce>
        <subrange editor:uuid="251" editor:posx="7500" editor:posy="7100">
            <input as="from" type="value">0</input>
            <input as="to" type="value">256</input>
            <input as="in" clear="false">reducedf</input>
            <input as="in" clear="false">reducedfft</input>
            <output as="out">subf</output>
            <output as="out">subfft</output>
        </subrange>
        <append editor:uuid="252" editor:posx="7750" editor:posy="7350">
            <input as="in" clear="false">timeline</input>
            <output as="out">tmap</output>
        </append>
        <append editor:uuid="253" editor:posx="8000" editor:posy="7600">
            <input as="in" clear="false">subf</input>
            <output as="out">fmap</output>
        </append>
        <append editor:uuid="254" editor:posx="8250" editor:posy="7850">
            <input as="in" clear="false">subfft</input>
            <output as="out">fftmap</output>
        </append>
        
       
    </analysis>
    <views>
        <view label="Amplitude">
            <value editor:uuid="374" label="Status" size="1" precision="2" scientific="false"  factor="1" >
                <input>calibration</input>
                <map min="0" max="0">NOT calibrated</map>
                <map  >calibrated</map>
            </value>
            <value editor:uuid="375" label="Sound pressure level" size="3" precision="1" scientific="false" unit="dB" factor="1" >
                <input>dB</input>
            </value>
            <separator editor:uuid="376" height="1" color="404040">
            </separator>
            <graph editor:uuid="377" label="History" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="Time" labelY="SPL" labelZ="" unitX="s" unitY="dB" unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">timedb</input>
                <input axis="y">dB</input>
            </graph>
            <button editor:uuid="378" label="Clear history">
                <input type="empty" />
                <output>dB</output>
                <input type="empty" />
                <output>timedb</output>
                <input type="value">1</input>
                <output>resetTime</output>
            </button>
            <separator editor:uuid="379" height="1" color="404040">
            </separator>
            <info editor:uuid="380" label="Please see the calibration tab to get proper results." >
            </info>
            <separator editor:uuid="185" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
            <value editor:uuid="261" editor:posx="3635.75" editor:posy="1399.140625" label="Frequenz" size="1" precision="2" scientific="false" unit="Hz" factor="1" >
                <input>f0</input>
            </value>
            <graph editor:uuid="186" editor:posx="3650" editor:posy="1250" label="History" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="Time" labelY="Frequenz" labelZ="" unitX="s" unitY="Hz" unitZ="" logX="false" logY="true" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">timedb</input>
                <input axis="y">f0</input>
            </graph>
            <separator editor:uuid="187" editor:posx="0" editor:posy="0" height="1" color="404040">
            </separator>
        </view>
        <view label="Settings">
            <info editor:uuid="381" label="This experiment uses a rather naive approach to determine the sound pressure level (SPL). You will need a reference sound with a known amplitude in dB. For example, you could setup a constant noise source and measure its sound pressure level with an external device. Enter the measured level as the reference SPL and push 'calibrate' while the experiment is running." >
            </info>
            <separator editor:uuid="382" height="1" color="404040">
            </separator>
            <edit editor:uuid="383" label="Reference SPL" signed="true" decimal="true"   unit="dB" factor="1" default="0">
                <output>target dB</output>
            </edit>
            <button editor:uuid="384" label="Calibrate">
                <input>newCal</input>
                <output>calibration</output>
            </button>
            <value editor:uuid="385" label="Calibration offset" size="1" precision="2" scientific="false" unit="dB" factor="1" >
                <input>calibration</input>
            </value>
            <separator editor:uuid="386" height="1" color="404040">
            </separator>
            <info editor:uuid="387" label="If you have done this before or on an identical device you may just enter the calibration offset from your previous calibration directly and press 'set offset'." >
            </info>
            <separator editor:uuid="388" height="1" color="404040">
            </separator>
            <edit editor:uuid="389" label="Custom offset" signed="true" decimal="true"   unit="dB" factor="1" default="0">
                <output>userCalibration</output>
            </edit>
            <button editor:uuid="390" label="Set offset">
                <input>userCalibration</input>
                <output>calibration</output>
            </button>
            <separator editor:uuid="388" height="2" color="404040">
            </separator>
            <info editor:uuid="271" label="Below you can set the number of samples used for the Fourier transform. More samples means slower updates, but higher spectral resolution." >
            </info>
            <value editor:uuid="272" editor:posx="8650" editor:posy="2000" label="Samples" size="1" precision="0" scientific="false"  factor="1" >
                <input>samples</input>
            </value>
            <separator editor:uuid="273" height="0.5" color="404040">
            </separator>
            <button editor:uuid="274" editor:posx="8650" editor:posy="2250" label="2048">
                <input type="value">2048</input>
                <output>samples</output>
            </button>
            <button editor:uuid="275" editor:posx="8650" editor:posy="2500" label="4096">
                <input type="value">4096</input>
                <output>samples</output>
            </button>
            <button editor:uuid="276" editor:posx="8650" editor:posy="2750" label="8192">
                <input type="value">8192</input>
                <output>samples</output>
            </button>
            <button editor:uuid="277" editor:posx="8650" editor:posy="3000" label="16384">
                <input type="value">16384</input>
                <output>samples</output>
            </button>
            <button editor:uuid="278" editor:posx="8650" editor:posy="3250" label="32768">
                <input type="value">32768</input>
                <output>samples</output>
            </button>
        </view>
        
        <view label="Spectrum">
            <value editor:uuid="261" editor:posx="8650" editor:posy="250" label="Peak-Frequency" size="1" precision="2" scientific="false" unit="Hz" factor="1" >
                <input>f0</input>
            </value>
            <separator editor:uuid="262" height="1" color="404040">
            </separator>
            <value editor:uuid="263" editor:posx="8650" editor:posy="500" label="Musical note" size="1" precision="2" scientific="false"  factor="1" >
                <input>semitonesRound</input>
                <map  max="-25">Low</map>
                <map  max="-24">A2</map>
                <map  max="-23">A#2 / Bb2</map>
                <map  max="-22">B2</map>
                <map  max="-21">C3</map>
                <map  max="-20">C#3 / Db3</map>
                <map  max="-19">D3</map>
                <map  max="-18">D#3 / Eb3</map>
                <map  max="-17">E3</map>
                <map  max="-16">F3</map>
                <map  max="-15">F#3 / Gb3</map>
                <map  max="-14">G3</map>
                <map  max="-13">G#3 / Ab3</map>
                <map  max="-12">A3</map>
                <map  max="-11">A#3 / Bb3</map>
                <map  max="-10">B3</map>
                <map  max="-9">C4</map>
                <map  max="-8">C#4 / Db4</map>
                <map  max="-7">D4</map>
                <map  max="-6">D#4 / Eb4</map>
                <map  max="-5">E4</map>
                <map  max="-4">F4</map>
                <map  max="-3">F#4 / Gb4</map>
                <map  max="-2">G4</map>
                <map  max="-1">G#4 / Ab4</map>
                <map  max="0">A4</map>
                <map  max="1">A#4 / Bb4</map>
                <map  max="2">B4</map>
                <map  max="3">C5</map>
                <map  max="4">C#5 / Db5</map>
                <map  max="5">D5</map>
                <map  max="6">D#5 / Eb5</map>
                <map  max="7">E5</map>
                <map  max="8">F5</map>
                <map  max="9">F#5 / Gb5</map>
                <map  max="10">G5</map>
                <map  max="11">G#5 / Ab5</map>
                <map  max="12">A5</map>
                <map  max="13">A#5 / Bb5</map>
                <map  max="14">B5</map>
                <map  max="15">C6</map>
                <map  max="16">C#6 / Db6</map>
                <map  max="17">D6</map>
                <map  max="18">D#6 / Eb6</map>
                <map  max="19">E6</map>
                <map  max="20">F6</map>
                <map  max="21">F#6 / Gb6</map>
                <map  max="22">G6</map>
                <map  max="23">G#6 / Ab6</map>
                <map  max="24">A6</map>
                <map  max="25">A#6 / Bb6</map>
                <map  max="26">B6</map>
                <map  max="27">C7</map>
                <map  max="28">C#7 / Db7</map>
                <map  max="29">D7</map>
                <map  max="30">D#7 / Eb7</map>
                <map  max="31">E7</map>
                <map  max="32">F7</map>
                <map  max="33">F#7 / Gb7</map>
                <map  max="34">G7</map>
                <map  max="35">G#7 / Ab7</map>
                <map min="35" >High</map>
            </value>
            <value editor:uuid="264" editor:posx="8650" editor:posy="750" label="Cents from note" size="1" precision="2" scientific="false"  factor="1" >
                <input>centsDiff</input>
            </value>
            <separator editor:uuid="265" height="1" color="404040">
            </separator>
            <graph editor:uuid="266" editor:posx="8650" editor:posy="1000" label="Fourier Transform" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="Frequency" labelY="FFT Mag" labelZ="" unitX="Hz" unitY="a.u." unitZ="" logX="true" logY="true" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">halfFrequency</input>
                <input axis="y">fft</input>
            </graph>
            <separator editor:uuid="267" height="1" color="404040">
            </separator>
            <value editor:uuid="268" editor:posx="8650" editor:posy="1250" label="Samples used" size="1" precision="2" scientific="false"  factor="1" >
                <input>actual_samples</input>
            </value>
            <value editor:uuid="269" editor:posx="8650" editor:posy="1500" label="Period used" size="1" precision="2" scientific="false" unit="ms" factor="1000" >
                <input>period</input>
            </value>
        </view>
        <view label="History">
            <graph editor:uuid="270" editor:posx="8650" editor:posy="1750" label="Fourier Transform" aspectRatio="1" style="map" lineWidth="1" color="ff7e22" partialUpdate="true" history="1" labelX="Frequency" labelY="Time" labelZ="FFT Mag" unitX="Hz" unitY="s" unitZ="a.u." logX="false" logY="false" logZ="true" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="256"       >
                <input axis="x">fmap</input>
                <input axis="y">tmap</input>
                <input axis="z">fftmap</input>
            </graph>
        </view>
        <view label="Raw data">
            <graph editor:uuid="279" editor:posx="8650" editor:posy="3500" label="Recording" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="t" labelY="Amplitude" labelZ="" unitX="s" unitY="a.u." unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">time</input>
                <input axis="y">recording_subrange</input>
            </graph>
        </view>
        <view label="Frequency Response">
            <info editor:uuid="271" label="In diesem Fenster wird der Frequenzgang des gemessenen Lautsprechers angezeigt, sofern möglich." >
            </info>
        </view>
        
    </views>
    <export>
        <set name="Amplitudes">
            <data name="Time (s)">timedb</data>
            <data name="Sound pressure level (dB)">dB</data>
        </set>
        <set name="Calibration">
            <data name="calibration offset (dB)">calibration</data>
        </set>
        <set name="Frequenzverlauf">
            <data name="Time (s)">time</data>
            <data name="Frequenz (Hz)">f0</data>
        </set>
        <set name="FFT Spectrum">
            <data name="Frequency (Hz)">halfFrequency</data>
            <data name="Absolute Amplitude (a.u.)">fft</data>
        </set>
        <set name="Raw data">
            <data name="Time (s)">time</data>
            <data name="Recording (a.u.)">recording_subrange</data>
        </set>
    </export>
</phyphox>
