首页 > 解决方案 > 如何从特定点(例如 30 秒)播放 .wav 文件

问题描述

我希望能够在复制广播电台的程序中的特定时间(例如,歌曲开始播放 30 秒)开始播放歌曲,当您更改频道并且歌曲已经播放或即将播放完毕时。

目前我使用 PlaySound 并将我的 26 首歌曲保存为 wav 文件和程序中的资源。我已经将 mciSendString 视为一个选项,但是我不明白在使用 Windows API 和 C++ 编码时如何设法让它工作。

这是我当前的 PlayWavFile 函数(其中资源整数是从 0 到 25 的随机生成的数字,投射到此函数以播放随机歌曲):

void PlayWavFile(int resource) {
    PlaySound(MAKEINTRESOURCE(resource), hInst, SND_RESOURCE | SND_ASYNC);
}

我希望能够使用我预先确定的整数值(如持续时间)以某种方式播放歌曲。

标签: c++winapi

解决方案


我已经将 mciSendString 视为一个选项,但是我不明白在使用 Windows API 和 C++ 编码时如何设法让它工作。

您可以阅读 MSDN 文档,例如Multimedia Command Strings,了解命令的语法

从 1 秒开始读取 wav 文件的基本示例 =>

int rc = mciSendString(L"open E:\\test.wav alias wav1", NULL, 0, 0);
if (rc == 0)
{
    rc = mciSendString(L"set wav1 time format ms", NULL, 0, 0);
    rc = mciSendString(L"seek wav1 to 1000", NULL, 0, 0);
    if (rc == 0)
    {
        rc = mciSendString(L"play wav1", NULL, 0, 0);
    }
    else
    {
        // handle error (like MCIERR_OUTOFRANGE for example)
    }
}
else
{
    // handle error
}

推荐阅读