Last active
November 25, 2024 23:44
-
-
Save Ardakilic/8f7809d06677d2ae7fe693dac3be1175 to your computer and use it in GitHub Desktop.
Headphone power calculator, extracted from https://headphones.com/pages/headphones-power-calculator using GPT. Access like: https://gistpreview.github.io/?8f7809d06677d2ae7fe693dac3be1175
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Headphone Power Calculator</title> | |
<style> | |
body { | |
font-family: Arial, sans-serif; | |
margin: 0; | |
padding: 20px; | |
background-color: #f4f4f4; | |
} | |
.container { | |
max-width: 600px; | |
margin: 0 auto; | |
padding: 20px; | |
background-color: white; | |
border-radius: 8px; | |
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
} | |
h1 { | |
text-align: center; | |
} | |
label { | |
display: block; | |
margin: 10px 0 5px; | |
} | |
input, select { | |
width: 100%; | |
padding: 8px; | |
margin-bottom: 20px; | |
border: 1px solid #ccc; | |
border-radius: 4px; | |
} | |
.results { | |
margin-top: 20px; | |
} | |
.result-item { | |
margin-bottom: 10px; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="container"> | |
<h1>Headphone Power Calculator</h1> | |
<label for="sensitivity">Sensitivity</label> | |
<input type="number" id="sensitivity" placeholder="Enter sensitivity (dB)" required> | |
<label for="impedance">Impedance (Ohms)</label> | |
<input type="number" id="impedance" placeholder="Enter impedance (Ohms)" required> | |
<label for="loudness">Loudness (dB)</label> | |
<input type="number" id="loudness" placeholder="Enter desired loudness (dB)" required> | |
<label for="sensitivity-unit">Sensitivity Unit</label> | |
<select id="sensitivity-unit"> | |
<option value="mw" selected>dB/mW</option> | |
<option value="volts">dB/1V</option> | |
</select> | |
<div class="results"> | |
<div class="result-item"><strong>Required Power (W):</strong> <span id="required-power">-</span></div> | |
<div class="result-item"><strong>Required Current (A):</strong> <span id="required-current">-</span></div> | |
<div class="result-item"><strong>Required Voltage (V):</strong> <span id="required-voltage">-</span></div> | |
<div class="result-item"><strong>Equivalent Sensitivity:</strong> <span id="equivalent">-</span></div> | |
</div> | |
</div> | |
<script> | |
class HeadphoneCalculator { | |
constructor() { | |
// DOM elements | |
this.sensitivityInput = document.getElementById("sensitivity"); | |
this.impedanceInput = document.getElementById("impedance"); | |
this.loudnessInput = document.getElementById("loudness"); | |
this.sensitivityUnit = document.getElementById("sensitivity-unit"); | |
this.requiredPower = document.getElementById("required-power"); | |
this.requiredCurrent = document.getElementById("required-current"); | |
this.requiredVoltage = document.getElementById("required-voltage"); | |
this.equivalent = document.getElementById("equivalent"); | |
// Event listeners | |
this.sensitivityInput.addEventListener("input", () => this.calculate()); | |
this.impedanceInput.addEventListener("input", () => this.calculate()); | |
this.loudnessInput.addEventListener("input", () => this.calculate()); | |
this.sensitivityUnit.addEventListener("change", () => this.calculate()); | |
} | |
calculate() { | |
const sensitivity = parseFloat(this.sensitivityInput.value); | |
const impedance = parseFloat(this.impedanceInput.value); | |
const loudness = parseFloat(this.loudnessInput.value); | |
if (isNaN(sensitivity) || isNaN(impedance) || isNaN(loudness)) { | |
this.clearResults(); | |
return; | |
} | |
let results; | |
if (this.sensitivityUnit.value === "volts") { | |
results = this.calculateVolts(sensitivity, impedance, loudness); | |
} else { | |
results = this.calculateMW(sensitivity, impedance, loudness); | |
} | |
this.displayResults(results); | |
} | |
calculateMW(sensitivity, impedance, loudness) { | |
const requiredPower = Math.pow(10, (loudness - sensitivity) / 10) / 1000; | |
const requiredCurrent = Math.sqrt(requiredPower / impedance); | |
const requiredVoltage = requiredCurrent * impedance; | |
const equivalent = sensitivity - 10 * Math.log10(impedance / 1000); | |
return { requiredPower, requiredCurrent, requiredVoltage, equivalent }; | |
} | |
calculateVolts(sensitivity, impedance, loudness) { | |
const equivalent = sensitivity + 10 * Math.log10(impedance / 1000); | |
const requiredPower = Math.pow(10, (loudness - equivalent) / 10) / 1000; | |
const requiredCurrent = Math.sqrt(requiredPower / impedance); | |
const requiredVoltage = requiredCurrent * impedance; | |
return { requiredPower, requiredCurrent, requiredVoltage, equivalent }; | |
} | |
displayResults({ requiredPower, requiredCurrent, requiredVoltage, equivalent }) { | |
this.requiredPower.textContent = requiredPower.toFixed(4); | |
this.requiredCurrent.textContent = requiredCurrent.toFixed(4); | |
this.requiredVoltage.textContent = requiredVoltage.toFixed(4); | |
this.equivalent.textContent = equivalent.toFixed(4); | |
} | |
clearResults() { | |
this.requiredPower.textContent = "-"; | |
this.requiredCurrent.textContent = "-"; | |
this.requiredVoltage.textContent = "-"; | |
this.equivalent.textContent = "-"; | |
} | |
} | |
// Initialize the calculator | |
document.addEventListener("DOMContentLoaded", () => { | |
new HeadphoneCalculator(); | |
}); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment