Python - spela ljud - hur?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26794
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Python - spela ljud - hur?

Inlägg av Icecap »

Win 11 Pro, 64 bit.
Jag skulle gärna vilja spela upp en ton där jag väljer frekvens och tid (100 - 300 ms).
Kan bäst jämföra med att spela upp morsekod - för det är exakt vad jag vill.

Jag vill göra det vid att skapa en minnesbuffer med audiodata i när programet startas då jag inte vill blanda in hårddisken.

Pga. Win 11 fungerar winsound.Beep inte, det kommer varken fel eller ljud.

Det finns olika andra exempel med spela upp fil osv. men ingen med spela upp en ljudbuffer.

Tips?
Användarvisningsbild
4kTRB
Inlägg: 21633
Blev medlem: 16 augusti 2009, 19:04:48

Re: Python - spela ljud - hur?

Inlägg av 4kTRB »

Om du väljer Java så går det bra. Men borde väl finnas i Phyton också?
Användarvisningsbild
Icecap
Inlägg: 26794
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python - spela ljud - hur?

Inlägg av Icecap »

Java är inget alternativ.
Användarvisningsbild
rvl
Inlägg: 7123
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Python - spela ljud - hur?

Inlägg av rvl »

Testade winsound.Beep på w10 maskin, har ingen w11 ...än.
ETT beep verkar fungera, men med fler efter varann låter det inte som jag förväntade mig, men har inte läst dokumentationen ingående. Standardwindowsljud ger den ifrån sig ok, och varvar man med dessa mellan beepen så blev de bättre,,?
Användarvisningsbild
Icecap
Inlägg: 26794
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python - spela ljud - hur?

Inlägg av Icecap »

Har testat Beep - och hittat text där det anges att 'system-beep' inte fungerar f.o.m. Win 11.
nifelheim
Den första
Inlägg: 2552
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Python - spela ljud - hur?

Inlägg av nifelheim »

kolla Win32 API , specifikt PlaySound med SND_MEMORY flaggan
Python är inte riktigt för mig,
med det finns väl pywin32 för att komma åt windows api från python :)
Användarvisningsbild
Icecap
Inlägg: 26794
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python - spela ljud - hur?

Inlägg av Icecap »

Nifelheimer: Skal kolla på det. Låter som rätt väg att gå.
Jag gillar inte Pyton - men har gjort MYCKET med det och det får duga till 'Q&D'-lösningar. ('Q&D' = Quick & Dirty)

Jag ska fixa det siste med sökvägen till TPAPRO så jag kan få Borland C Builder 6 upp att köra igen, DÅ kan jag göra vettiga program.
LarryXz
Inlägg: 678
Blev medlem: 13 mars 2013, 20:31:08
Ort: Norra Uppland

Re: Python - spela ljud - hur?

Inlägg av LarryXz »

Kan detta vara något?
pip install sounddevice numpy

Kod: Markera allt

import numpy as np
import sounddevice as sd

# ======================
# Ljudinställningar
# ======================
SAMPLE_RATE = 44100
FREQ = 700        # Hz
VOLUME = 0.5

# ======================
# CW-funktioner
# ======================
def cw_tone(freq, duration_ms, volume=0.5):
    n = int(SAMPLE_RATE * duration_ms / 1000)
    t = np.arange(n) / SAMPLE_RATE

    # Fyrkantsvåg (klassisk CW)
    wave = np.sign(np.sin(2 * np.pi * freq * t))

    # Envelope (5 ms attack/release)
    env_len = int(SAMPLE_RATE * 0.005)
    envelope = np.ones(n)
    envelope[:env_len] = np.linspace(0, 1, env_len)
    envelope[-env_len:] = np.linspace(1, 0, env_len)

    return volume * wave * envelope


def silence(duration_ms):
    return np.zeros(int(SAMPLE_RATE * duration_ms / 1000))


# ======================
# Morse-timing (WPM ≈ 12)
# ======================
DIT_MS = 100
DAH_MS = 3 * DIT_MS
GAP_MS = DIT_MS
LETTER_GAP_MS = 3 * DIT_MS

DIT = cw_tone(FREQ, DIT_MS, VOLUME)
DAH = cw_tone(FREQ, DAH_MS, VOLUME)
GAP = silence(GAP_MS)
LETTER_GAP = silence(LETTER_GAP_MS)

# ======================
# SOS (... --- ...)
# ======================
TAIL = silence(200)   # 100 ms säkerhetsmarginal

sequence = np.concatenate([
    DIT, GAP, DIT, GAP, DIT,
    LETTER_GAP,
    DAH, GAP, DAH, GAP, DAH,
    LETTER_GAP,
    DIT, GAP, DIT, GAP, DIT,
    TAIL
])

# ======================
# Spela upp
# ======================
sd.play(sequence, SAMPLE_RATE)
sd.wait()
Användarvisningsbild
Icecap
Inlägg: 26794
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Python - spela ljud - hur?

Inlägg av Icecap »

Hnnn... det verkar vara ett enklare sätt. Tack.

Testade det och jag är nu i mål.
Skriv svar