c++ - 如何在音频的特定点开始播放波形音频文件?
问题描述
我找不到任何可以让我在特定时间点开始播放 wav 文件的代码(比如进入音频 30 秒)。C ++中有什么可以让我这样做吗?
我的程序应该像理论上的收音机一样运行,当你改变“频道”时,歌曲已经到了某个点,而不是从头开始。一旦歌曲的持续时间完成,“广播电台”上的歌曲当前会更改和随机化,但是如果持续时间为 30 秒,则歌曲只会从头开始。
PlayWavFile 函数:
void PlayWavFile(int resource) {
PlaySound(MAKEINTRESOURCE(resource), hInst, SND_RESOURCE | SND_ASYNC);
}
变量初始化:
const RECT wCoord = { 0, 0, 500, 500 };
duration = std::clock() - start;
int durSec = duration / 1000;
if (durSec1 == NULL) {
durSec1 = duration / 1000;
}
if (durSec2 == NULL) {
durSec2 = duration / 1000;
}
if ((durSec - durSec1) >= songs[i].songLength) {
i = NULL;
durSec1 = NULL;
}
if ((durSec - durSec2) >= songs[j].songLength) {
j = NULL;
durSec2 = NULL;
}
srand((unsigned)timer * duration);
if (i == NULL) {
i = rand() % 26;
InvalidateRect(hWnd, &wCoord, true);
UpdateWindow(hWnd);
}
if (j == NULL) {
j = rand() % 26;
InvalidateRect(hWnd, &wCoord, true);
UpdateWindow(hWnd);
}
std::string song1 = songs[i].songName + " - " + songs[i].artist;
std::string song2 = songs[j].songName + " - " + songs[j].artist;
按下按钮的位置,广播电台将更改为播放不同的歌曲:
case WM_COMMAND:
if (LOWORD(wParam) == 1) {
PlayWavFile(i);
}
else if (LOWORD(wParam) == 2) {
PlayWavFile(j);
}
else if (LOWORD(wParam) == 3) {
PlaySound(NULL, NULL, NULL);
}
break;
如上所述,我希望能够在歌曲的特定时间点播放歌曲,比如 30 秒。此外,我正在编写 Windows 应用程序,因此代码必须兼容。
解决方案
推荐阅读
- firebase - 为什么较大的视频流比较小的视频更快?
- linux - 使用 REST API 可以看到 Spark 应用程序的进度百分比吗
- jsf - 如何在 JSF 的浏览器中使用加载微调器直接显示可打印的 PDF?
- oracle - CAS 实施到 Oracle APEX
- python - 读取文件夹中的多个 csv 文件
- azure - 如何为在 Azure 上的 Kubernetes 集群中运行的 Grafana 安装自定义插件
- c++ - 默认初始化的 std::atomic
vs 无锁栈 - python - Python new columns from multi groupby
- c++ - 如何使用 C++ 在 Winsock 中将大字符串从客户端发送到服务器
- jenkins - 如何保持 terraform 的 remote-exec shell 持久化?