c++ - libSDL2-mixer:如何更改 wav 文件 MixChunk 中的样本?
问题描述
我正在使用 libSDL2 的混音器播放在我的项目中存储为 wav 文件的音频,但我需要对音频数据进行一些信号处理,这需要我访问单个样本(即:作为双精度数组)。
所以我正在寻找一种方法来从 MixChunk 中检索样本,或者将一个双精度数组提供给 libSDL 进行播放。
这是我播放 wav 文件的代码示例:
#include <SDL2/SDL.h>
#include <SDL2/SDL_mixer.h>
#include <iostream>
int playSound(char path[], int channel) {
if (SDL_Init(SDL_INIT_AUDIO) < 0)
return -1;
// Initialize SDL_mixer
if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) == -1)
return -1;
Mix_Chunk *wave = NULL;
wave = Mix_LoadWAV(path);
if (wave == NULL) {
std::cout << "Error: Could not load .wav file: " << path << std::endl;
return -1;
}
if (Mix_PlayChannel(channel, wave, 0) == -1) {
std::cout << "Error: Could not play wav file (" << path << ") on channel "
<< channel << std::endl;
return -1;
}
while (Mix_Playing(channel)) {
printf("%i\n", wave->abuf);
}
Mix_FreeChunk(wave);
}
void initializeAudioDevice() {
if (SDL_Init(SDL_INIT_AUDIO) < 0)
printf("Error: Can't open audio device!\n");
if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 256) == -1)
printf("Error: Failed to setup audio device!\n");
}
int main() {
initializeAudioDevice();
char path[] = "sound.wav";
playSound(path, 1);
return 0;
}
如您所见,我试图打印出 MixChunk->abuf 属性的内容,但这并没有给我样本。
感谢您帮助我走上正轨。
解决方案
推荐阅读
- date - 在 Hive 或 Impala 中从 into 到时间戳的转换
- java - 毕加索上下文==空问题
- asp.net-mvc - 如何在 Azure-AD 中存储用户首选项?
- python - 具有不同参数的函数的并行处理
- dicom - Dcm4che 从本地存档中删除研究 (dicomdir)
- mysql - 如何在 MySQL 工作台中创建触发器来限制可以在某些列中输入哪些值?
- python - 如何从文件中的列表中随机打印特定单词
- reactjs - 如何在反应中使用脚本
- dialogflow-es - 是否可以通过编程方式请求连接到 google home 帐户的智能设备?
- kubernetes - Kubernetes 入口:不创建 LB?