Spóźniające się dźwięki w winsound

Spóźniające się dźwięki w winsound
IR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Witam!
Napisałem prosty program do komponowania melodii. Cała nuta trwa w nim 4000ms, półnuta 4000ms/2, ćwierćnuta 4000ms/4, ósemka 4000ms/8, a szesnastka 4000ms/16 (w przykładowym programie poniżej dodałem jeszcze 1/32 = 4000/32.

Pytanie pierwsze: dlaczego im krótsze duration - długość trwania dźwięku Beep(frequency,duration) , tym mniej precyzyjnie odgrywa się kilka, bądź kilkanaście dźwięków pod rząd (dźwięki "spóźniają" i wcale nie są równe 1/16, czy 1/32)? Z czego to wynika i jakie są lepsze sposoby (nie mam tu na myśli uczenia się na pamięć całej biblioteki, bo to inna sprawa, chodzi mi raczej o jakąś konkretną funkcję z konkretnej biblioteki)?

Przykładowy program, który pokazuje, na czym polega problem:

Kopiuj
from winsound import Beep


Beep(440, 4000)

i = 0
while i < 2:
    i += 1
    Beep(440, 4000//2)

i = 0
while i < 4:
    i += 1
    Beep(440, 4000//4)

i = 0
while i < 8:
    i += 1
    Beep(440, 4000//8)

i = 0
while i < 16:
    i += 1
    Beep(440, 4000//16)

i = 0
while i < 32:
    i += 1
    Beep(440, 4000//32)

Pytanie drugie: dlaczego muszę użyć dzielenia całkowitego (np. duration = 4000//2 = 2000) nawet jeśli wynik, po wykonaniu zwykłego dzielenia (4000/2 = 2000) jest liczbą całkowitą? Jeśli użyję zwykłego dzielenia, wyskoczy mi błąd "integer argument expected, got float". Przy okazji: frequency, które podaje się z hertzah, też musi być liczbą całkowitą. Tymczasem dokładne wartości dźwięków mają na ogół coś po przecinku, a w niektórych sytuacjach (robiłem już taki program) trzeba podzielić, albo pomnożyć frequency (przykładowo: ten sam dźwięk o oktawę niżej to wartość tego dźwięku podana w Hz, podzielona na 2). Czy są jakieś funkcje, które przyjmują argument frequency w postaci liczby zmiennoprzecinkowej?

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
1

To moze wynikac z opoznienia w generacji dzwieku wywolanego przez wolne API.
Poszukaj jakiegos API gdzie mozna odtworzyc kilka dzwiekow pod rzad.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.