使用C++播放声音的完整指南

这篇具有很好参考价值的文章主要介绍了使用C++播放声音的完整指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 准备工作:


首先,我们需要选择一个合适的音频库。在C++中,常用的音频库有OpenAL、SDL和SFML等。这里我们选择使用SFML库,因为它易于使用且跨平台性好。

2. 安装SFML库:
在开始之前,请确保已经安装了SFML库。你可以从SFML的官方网站(https://www.sfml-dev.org/)下载并安装适合你的操作系统的版本。

3. 创建C++项目:
在你的C++项目中,包含SFML的头文件,并链接相应的库文件。如果你使用的是集成开发环境(IDE),请按照IDE的指导手册进行设置。如果你使用的是命令行编译,你需要添加相应的编译选项。

2. 播放声音:


下面的代码演示了如何使用SFML库来播放声音文件。

#include <SFML/Audio.hpp>

int main()
{
    sf::SoundBuffer buffer;
    if (!buffer.loadFromFile("sound.wav"))
    {
        // 处理加载失败的情况
        return -1;
    }

    sf::Sound sound;
    sound.setBuffer(buffer);
    sound.play();

    // 运行一段时间,让声音播放
    sf::sleep(sf::seconds(5));

    return 0;
}

在上面的代码中,我们首先创建了一个`sf::SoundBuffer`对象,并使用`loadFromFile`函数从文件中加载声音。然后,我们创建了一个`sf::Sound`对象,并将加载的声音缓冲设置给它。最后,我们调用`play`函数来播放声音。

5. 播放自己准备好的声音:
如果你想播放自己准备好的声音文件,只需将文件路径替换为你的声音文件的路径即可。确保声音文件位于当前工作目录或者指定了正确的相对路径。

if (!buffer.loadFromFile("path_to_your_sound_file.wav"))
{
    // 处理加载失败的情况
    return -1;
}

请注意,在使用SFML库时,支持的音频格式包括.wav、.ogg和.flac等。

3.如何不用第三方库播放声音

可以使用Windows的Multimedia API来播放声音。具体步骤如下:

1.首先需要包含Windows.h头文件和Mmsystem.h头文件。

#include <Windows.h>
#include <Mmsystem.h>

2.定义一个回调函数,在这个函数中填充音频数据。

void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
    // 填充音频数据
}

3.使用waveOutOpen函数打开音频设备,并指定回调函数。

WAVEFORMATEX wfx;
wfx.wFormatTag = WAVE_FORMAT_PCM;  // 指定PCM格式
wfx.nChannels = 1;                // 单声道
wfx.nSamplesPerSec = 44100;       // 采样率
wfx.wBitsPerSample = 16;          // 量化位数
wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;

HWAVEOUT hwo;
MMRESULT result = waveOutOpen(&hwo, WAVE_MAPPER, &wfx, (DWORD_PTR)waveOutProc, NULL, CALLBACK_FUNCTION);

4.使用waveOutWrite函数向音频设备写入数据。

WAVEHDR whdr;
whdr.lpData = // 音频数据指针
whdr.dwBufferLength = // 音频数据长度
whdr.dwFlags = 0;

result = waveOutWrite(hwo, &whdr, sizeof(WAVEHDR));

5.使用waveOutReset函数重置音频设备,停止播放。

result = waveOutReset(hwo);

完整的代码示例:

#include <Windows.h>
#include <Mmsystem.h>

#pragma comment(lib, "Winmm.lib")

void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
    // 填充音频数据
}

int main()
{
    WAVEFORMATEX wfx;
    wfx.wFormatTag = WAVE_FORMAT_PCM;  // 指定PCM格式
    wfx.nChannels = 1;                // 单声道
    wfx.nSamplesPerSec = 44100;       // 采样率
    wfx.wBitsPerSample = 16;          // 量化位数
    wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
    wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;

    HWAVEOUT hwo;
    MMRESULT result = waveOutOpen(&hwo, WAVE_MAPPER, &wfx, (DWORD_PTR)waveOutProc, NULL, CALLBACK_FUNCTION);

    // 填充音频数据
    const int bufferSize = 44100 * 2;
    char buffer[bufferSize];
    // ...

    WAVEHDR whdr;
    whdr.lpData = buffer;
    whdr.dwBufferLength = bufferSize;
    whdr.dwFlags = 0;

    result = waveOutWrite(hwo, &whdr, sizeof(WAVEHDR));

    Sleep(3000);  // 播放3秒

    result = waveOutReset(hwo);

    return 0;
}

通过本文的指南,你应该能够轻松地在C++项目中播放声音了。记得合理处理错误和异常情况。文章来源地址https://www.toymoban.com/news/detail-803089.html

到了这里,关于使用C++播放声音的完整指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity声音与视频播放】播放声音视频、代码控制、UI播放视频

    闲谈: 游戏开发比普通软件开发难也是有原因的,第一 游戏功能需求变化多样内部逻辑交错纵横, 而软件相对固定,无非也就是点击跳转、数据存储 第二,游戏需要很多3D数学知识、物理知识,最起码得有高中物理的基础,力、向量、射线,除了这些数据存储一样不少 但是

    2024年02月19日
    浏览(41)
  • 04-2_Qt 5.9 C++开发指南_SpinBox使用

    QSpinBox 用于整数的显示和输入,一般显示十进制数,也可以显示二进制、十六进制的数,而且可以在显示框中增加前缀或后缀。 QDoubleSpinBox 用于浮点数的显示和输入,可以设置显示小数位数,也可以设置显示的前缀或后缀。 实例samp4_3 演示QSpinBox和QDoubleSpinBox这两个组件的使

    2024年02月14日
    浏览(68)
  • 掌握C语言文件操作:从入门到精通的完整指南!

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 文件 其实是指一组相关数据的有序集合。这个数据集有一个名称,叫做 文件名 。文件通常是 驻留在外部介质(如磁盘等)上的 ,在使用时才调入内存中来

    2024年02月19日
    浏览(61)
  • 在Windows电脑上部署自然语言大模型:完整指南

    自然语言处理(NLP)的模型越来越强大,人们越来越想把这些模型部署在自己的电脑上。本文就将详细指导你如何在Windows电脑上部署自然语言大模型,包括CUDA的安装,运行环境的搭建,Python载入模型以及模型下载网址等内容。 首先,你需要一个支持CUDA的NVIDIA显卡。CUDA是N

    2024年02月04日
    浏览(41)
  • Go语言开发者的Apache Arrow使用指南:内存管理

    如果你看了上一篇《Go语言开发者的Apache Arrow使用指南:数据类型》 [1] 中的诸多Go操作arrow的代码示例,你很可能会被代码中大量使用的Retain和Release方法搞晕。不光大家有这样的感觉,我也有同样的feeling:**Go是GC语言 [2] ,为什么还要借助另外一套Retain和Release来进行内存管理

    2024年02月11日
    浏览(54)
  • Web 应用项目开发的完整指南

    目录 一、web介绍: 二、使用IntelliJ IDEA 搭建 Web 开发环境:简易指南 三、常用注解的使用 Web(World Wide Web)是指互联网上的一个大规模信息系统,通过超文本链接和互联网协议进行交互。它是一种基于客户端-服务器模型的分布式系统,由许多网络服务器构成,通过互联网连

    2024年02月04日
    浏览(42)
  • 12-4_Qt 5.9 C++开发指南_创建和使用共享库

    除了静态库,Qt 还可以创建共享库, 也就是 Windows 平台上的动态链接库 。动态链接库项目编译后生成 DLL 文件,DLL 文件在 windows 平台上应用广泛。DLL 文件是在应用程序运行时加载的,不像静态库那样在编译期间就连编到应用程序里。若更新了 DLL 文件版本,只要接口未变,

    2024年02月14日
    浏览(54)
  • Unity中的声音(声音开关+动画事件播放声音+控制声音大小UI)

            声音组件(一个scene中只能有一个Audio Listener,位于Camera)         Audio Source 理解为 “嘴巴” Unity中支持的音频格式 效果 :点击背景音乐暂停,再点击音乐继续。 步骤 (1)创建UI—Toggle(切换) 与图片上对应:       Label 文字       Background 白色框框    

    2024年02月10日
    浏览(42)
  • 使用libssh2建立安全的SSH连接:C++开发者的综合指南

    SSH和安全连接的重要性是不可忽视的。在今天的互联网环境中,保护敏感数据和网络通信的安全至关重要。 通过使用SSH建立安全连接,可以确保数据在传输过程中是加密的。这意味着即使在网络上拦截到数据包,攻击者也无法读取其内容。 SSH提供了多种身份验证方法,如密

    2024年02月04日
    浏览(51)
  • 从零基础到精通:Flutter开发的完整指南

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 Flutter是一种跨平台的移动应用开发框架,它允许开发者使用单一代码库构建高性能

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包