SFML Audio не воспроизводится - PullRequest
       14

SFML Audio не воспроизводится

0 голосов
/ 09 декабря 2018

У меня есть этот код:

#include <SFML/Audio.hpp>
#include <unistd.h>
#include <cmath>

int main()
{
    const double volume = 10000;
    const sf::Uint64 sampleCount = 44100;
    sf::Int16* samples = new sf::Int16[sampleCount];
    for (sf::Uint64 i = 0; i < sampleCount; i++) {
        samples[sampleCount] = sin(((double)i / 44100.0)*M_PI*2.0*440) * volume;
    }

    sf::SoundBuffer b;
    b.loadFromSamples(samples, sampleCount, 1, 44100);

    sf::Sound s;
    s.setBuffer(b);
    s.play();

    usleep(1000000);

    delete [] samples;

    return 0;
}

И я компилирую с:

g++ -o sound main.cpp -framework SFML -framework sfml-audio -F/Library/Frameworks

Он должен воспроизводить синусоидальную волну при 440 Гц в течение 1 секунды, но он не играетчто-нибудь, и просто ждет одну секунду.

1 Ответ

0 голосов
/ 11 декабря 2018

Ваш цикл вызывает неопределенное поведение, записывая в память, которой вы не владеете, в частности samples[sampleCount].Мое лучшее предположение состоит в том, что он воспроизводит либо все нули, либо случайные статические, но ваш компилятор должен выяснить , насколько точно это не удалось.

Это:

sf::Int16* samples = new sf::Int16[sampleCount];
for (sf::Uint64 i = 0; i < sampleCount; i++) {
    samples[sampleCount] = sin(((double)i / 44100.0)*M_PI*2.0*440) * volume;
}

должно быть

sf::Int16* samples = new sf::Int16[sampleCount];
for (sf::Uint64 i = 0; i < sampleCount; i++) {
    samples[i] = sin(((double)i / 44100.0)*M_PI*2.0*440) * volume;
}
...