簡體   English   中英

SFML音頻未播放

[英]SFML Audio not playing

我有以下代碼:

#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 Hz的頻率播放正弦波1秒鍾,但是它什么也沒有播放,只等待一秒鍾。

循環通過寫入您不擁有的內存(特別是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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM