[英]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.