Ton abspielen mittels OpenAL
-
Huhu,
Ich versuche gerade, mittels OpenAL eine play_sound-Funktion zu schreiben, die einen Ton mit bestimmter Frequenz und Dauer abspielen kann. Leider dauert mein Ton immer kürzer als die angegebene Zeit. Jedoch verhält sich die Länge des Tons proportional zur Angegebenen Zeit, d.h. wird die Zeit länger, wird auch der Ton länger, aber die Zeit stimmt eben nicht genau. (ich habe danach merkbare Pausen)
Meine Funktion sieht so aus:
void play_sound(float frequency, std::size_t seconds) { std::size_t const sample_rate = 22050; std::size_t const volume = 32760; double const pi = 3.14159265358979323846264338327950288; std::vector<std::uint16_t> samples(seconds * sample_rate); for(std::size_t i = 0; i < samples.size(); ++i) samples[i] = volume * std::sin((2.f * pi * frequency) / sample_rate * i); ALuint buf; alGenBuffers(1, &buf); alBufferData(buf, AL_FORMAT_MONO16, samples.data(), samples.size(), sample_rate); ALuint src; alGenSources(1, &src); alSourcei(src, AL_BUFFER, buf); alSourcePlay(src); sleep(seconds); }
Vielleicht sieht ja jemand den Fehler.
Grüße,
PI
-
.size() gibt die Größe des Vektors, nicht die Größe in Byte zurück. Daher dauert der Ton nur halb so lange.
-
Willst du mich heiraten?
-
Da muss ich erst drüber nachdenken.
-
Ich nehme das als Ja.
-
314159265358979__ schrieb:
Willst du mich heiraten?
Bist weiblich, willig, hübsch, treu, fruchtbar und gehorsam? Wenn ja, dann schreib mir ne SMS.
-
Dazu bräuchte ich deine Nummer.