#!/usr/bin/env python3
# SPDX-License-Identifier: Apache-2.0
"""Generate an original quiet four-beat timing cue; no speech or borrowed music."""
from __future__ import annotations

import argparse
import math
import struct
import wave
from pathlib import Path

HERE = Path(__file__).resolve().parent
RATE = 16_000
BEAT_SECONDS = 0.6
AMPLITUDE = 0.12


def build() -> bytes:
    beats = ((440.0, 0.18), (0.0, 0.0), (523.25, 0.36), (0.0, 0.0))
    payload = bytearray()
    for frequency, duration in beats:
        for index in range(int(RATE * BEAT_SECONDS)):
            elapsed = index / RATE
            if frequency and elapsed < duration:
                fade = min(1.0, elapsed / 0.012, (duration - elapsed) / 0.025)
                sample = AMPLITUDE * max(fade, 0.0) * math.sin(2 * math.pi * frequency * elapsed)
            else:
                sample = 0.0
            payload.extend(struct.pack("<h", round(sample * 32767)))
    return bytes(payload)


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--output", type=Path, default=HERE / "quiet-four-beat.wav")
    args = parser.parse_args()
    args.output.parent.mkdir(parents=True, exist_ok=True)
    with wave.open(str(args.output), "wb") as sound:
        sound.setnchannels(1)
        sound.setsampwidth(2)
        sound.setframerate(RATE)
        sound.writeframes(build())
    print(args.output.name)


if __name__ == "__main__":
    main()
