Skip to content

Instantly share code, notes, and snippets.

@Ardakilic
Last active November 25, 2024 23:44
Show Gist options
  • Save Ardakilic/8f7809d06677d2ae7fe693dac3be1175 to your computer and use it in GitHub Desktop.
Save Ardakilic/8f7809d06677d2ae7fe693dac3be1175 to your computer and use it in GitHub Desktop.
<!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