【问题标题】:SFML SoundBuffer to Music bufferSFML SoundBuffer 到音乐缓冲区
【发布时间】:2016-01-16 21:42:06
【问题描述】:

我有 SoundBuffer。我希望这个缓冲区移动到音乐。 现在我保存在文件中并读出,但我不想保存。我能做些什么? 现在我有了这个代码:

sf::SoundBuffer sb = getSoundBuffer(new_channels,sample_rate);
sb.saveToFile("sound.wav");
std::unique_ptr<sf::Music> Buffer(new sf::Music());
Buffer->openFromFile("sound.wav")
 musicAlias[alias] = std::move(Buffer);
...
music->selected = musicAlias[alias].get();

【问题讨论】:

    标签: c++ sfml soundbuffer


    【解决方案1】:

    sf::Music 类旨在用于播放从文件加载的长音频数据。如果您想播放声音缓冲区中的音乐,请像这样使用sf::Sound

    sf::SoundBuffer sb = getSoundBuffer(new_channels,sample_rate);
    std::unique_ptr<sf::Sound> Buffer(new sf::Sound( sb ));
    musicAlias[alias] = std::move(Buffer);
    ...
    music->selected = musicAlias[alias].get();
    

    您可能需要将musicAlias 的类型更改为std::unique_ptr&lt;sf::Sound&gt; 的容器,但这应该可以,因为sf::Sound 类提供了与sf::Music 类非常相似的接口。

    【讨论】:

    • 我有这样的错误:error: cannot convert 'std::unique_ptr&lt;sf::Sound&gt;::pointer {aka sf::Sound*}' to 'sf::Music*' in assignment this-&gt;selected = musicAlias[alias].get();
    • @neiiic 好吧,然后将数据成员selected 的类型从sf::Music* 更改为sf::Sound*。您可能还需要在其他一些地方更改类型。我不知道你程序的其余部分。
    • 现在我什么也没听到。没有错误。如果我换回音乐,工作。
    • sf::SoundBuffer sb = getSoundBuffer(new_channels,sample_rate); sb.saveToFile("sound.wav"); std::unique_ptr&lt;sf::Sound&gt; Buffer(new sf::Sound(sb)); sf::Sound a; a.setBuffer(sb); a.play(); musicAlias[alias] = std::move(Buffer); 在 wav 文件中我可以听到。但是当我以两种不同的方式播放声音时,我什么也听不见。为什么?
    • @neiiic 是的。离开函数后,局部变量将被销毁。出于代码可维护性的目的,请不要将变量 SoundBuffer 设为全局变量,而是将其设为类的成员变量。
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多