Bjarke Walling Petersen wrote:
> Jeg kunne forestille mig at det måske var meget simpelt: "Blot" at se på om
> nogle bestemte frekvenser findes rytmisk i musikken. Men så simpelt er det
> jo nok heller ikke.
Jeg vil tro, at det er så simpelt. Et stykke musik kan (hvis man
da absolut vil ødelægge æstetikken) beskrives matematisk som
lufttrykket som funktion af tiden, h(t). Denne funktion kan
fouriertransformeres, formel 5 på
http://mathworld.wolfram.com/FourierTransform.html, så man får
fordelingen i (vinkel-)frekvenser, H(omega).
Givet H(omega) kan man give sig til at lede efter peaks i spektret
i frekvensintervallet 0.5 Hz til 5 Hz svarende til BPM-intervallet
30-300, som nok er dækkende for meget musik. Den nederste peak,
ved omega0, vil svare til grundfrekvensen (BPM), og man vil også
finde "overtoner" ved n x omega0, hvor n = 2, 3, ...
Yderligere, hvis f.eks. taktarten er 4/4 og 1-slaget i hver takt
er ekstra betonet, bør der være en højere peak ved omega0/4 (og
generelt ved omega0/m, når taktarten er (m/k)).
> I øvrigt kan jeg ikke se hvorledes man skulle kunne sortere
> frekvenserne/betoningerne - så man kunne finde ud af på hvilke taktslag der
> er mere eller mindre betoning.
Det bør være muligt, når man først har bestemt længden af en takt
(svarende til frekvensen omega0/m). Herefter kan man "lægge alle
takter oven i hinanden", sådan at man får en funktion g(t), som er
defineret for 0 <= t < T, hvor T er længden af en takt (man skal
nok først kvadrere h(t), sådan at forskellige takter ikke udligner
hinanden ved destruktiv inteferens). Givet g(t) svarer den største
peak til det mest betonede slag (1-slaget), og g(t) er generelt et
mål for betoningen til tidspunktet t, så derved kan man
sammenligne betoningen af forskellige slag i takten.
> Og hvordan finder programmet til BPM-detektering ud af at rytmen i en
> bestemt frekvens ikke blot er den fordoblede rytme - at den egentlig kun
> skulle tælle hvert andet udslag i frekvensen?
Det gør programmet ved at udvælge den nederste peak
(grundfrekvensen), hvor en peak er defineret ved at H(omega) er
større end en passende tærskel.
> Er metoden til BPM-detektering brugbar for al slags musik?
Naturligvis er den ikke det. Der findes musik med meget
regelmæssig rytme (f.eks. disko), musik helt uden rytme og alle
varianter herimellem. Derudover bør det være muligt at notere et
vilkårligt stykke musik i en vilkårlig taktart og med vilkårlig
BPM (til gengæld bliver nodearket vilkårligt grimt), så et
musikstykkes BPM er ikke umiddelbart veldefineret. Det perfekte
BPM-program findes derfor ikke, så udfordringen er at lave et
program, der giver tilstrækkeligt præcise svar i tilstrækkeligt
mange tilfælde (jeg ved ikke, om det er forsøgt før).
--
Jonas Møller Larsen