diff --git a/AV.cc b/AV.cc index 5c01484..4454b47 100644 --- a/AV.cc +++ b/AV.cc @@ -8,16 +8,9 @@ #include using namespace std; -static void AV_sound_callback(void * userdata, Uint8 * stream, int len) +void AV_sound_callback(void * userdata, Uint8 * stream, int len) { - static int pos = 0; - Sint16 * str = (Sint16 *) stream; - for (int i = 0; i < len / 4; i++) - { - str[i*2] = (Sint16) (32000.0 * sin(pos * 263.0 / AV_SOUND_RATE * 2.0 * M_PI)); - str[i*2+1] = 0; - pos++; - } + ((AV *)userdata)->playCallback(stream, len); } AV::AV() @@ -121,6 +114,18 @@ void AV::stop() } } +void AV::playCallback(Uint8 * stream, int len) +{ + static int pos = 0; + Sint16 * str = (Sint16 *) stream; + for (int i = 0; i < len / 4; i++) + { + str[i*2] = (Sint16) (32000.0 * sin(pos * 440.0 / AV_SOUND_RATE * 2.0 * M_PI)); + str[i*2+1] = 0; + pos++; + } +} + AV::Sound::Sound(AV & av) : m_av(av) { diff --git a/AV.h b/AV.h index a00ebe5..8dcfcab 100644 --- a/AV.h +++ b/AV.h @@ -55,7 +55,11 @@ class AV } refptr createSound() { return new Sound(*this); } + friend void AV_sound_callback(void * userdata, Uint8 * stream, int len); + protected: + void playCallback(Uint8 * stream, int len); + int m_defaultWidth; int m_defaultHeight; int m_width;