iffe skrev:import math
from struct import *
freqStart, freqEnd = 200, 22000
freq = freqStart
sampleRate = float(44100)
interval = 5
samples = interval * sampleRate
filename = "sample.raw"
stepsize=(freqEnd - freqStart) / samples
file=open(filename, "w")
for sampleIterator in range(samples):
s = pack('<h',int(2**7 * math.sin(freq*(sampleIterator/sampleRate))))
freq=freq+stepsize
file.write(s)
file.close()
Någon som har koll på vad som kan tänkas vara fel?
Mja... Nu pratar jag ju inte Python, men jag ser åtminstone två fel, tror jag. Eller tre.
Du multiplicerar med 2^7=32768. Största talet som kan representeras är 32767, det kan alltså bli överstyrton sinusen blr 1. Det är kanske inte hemskt allvarligt, men i en del språk får man "wraparound" om man försöker göra så ock +32768 ersätts med -32768 och
det låter inget kul.
Du verkar anta att sin(freq*t) ska ge frekvensen freq. Det gör det inte. Om freq är konstant ger det
vinkelfrekvensen freq, dvs frekvensen freq/(2pi). Om freq inte är konstant blir det krångligare. I ditt fall är den proportionell mot t, dvs det står ungefär sin(konstant*t^2). Vad blir resultatet av det då? Jo, allmänt är momentana vinkelfrekvensen för en sinus derivatan av dess argument map tiden. Sug på den en stund.
Om du då har sin(wt) och w=t/k så kommer vinkelfrekvensen att bli derivatan av t^2/k=t*2/k. Det blir en tvåa där som man lätt missar, frekvensen blir dubbelt så stor som man tror.
Hur ska man göra godtyckliga svep då? Jo, man ska ta funktionen för vinkelfrekvens som man vill ha och integrera den map tid och använda den som argument i sinusen.
Alternativt, om det är svårt att räkna ut integralen analytiskt, kan man i stället för varje sampel lägga till ett tal som motsvarar frekvensen just nu. Denna metod är egentligen sämre eftersom den ger en massa additioner och då blir det en massa fel som adderas, och då vet man inte i slutänden riktigt vilket fasläge sinusen har.
Sen lät filen skunk, men det beror på att den är upphackad i bitar på nåt sätt. Det måste bero på nåt Pythonspecifikt som jag inte begriper.[/i]
Så länge har jag längat efter att loudness war skulle vara över. Nu börjar jag tro att vi faktiskt är där. Kruxet är att vi förlorade.