小编Ral*_*ara的帖子

OpenAL播放捕获的音频数据c ++

我正在尝试使用OpenAL创建语音聊天程序.事情的网络方面似乎没问题,但我会接受建议=]

我目前遇到的问题是尝试从麦克风播放捕获的音频数据.我按照这里找到的代码获取麦克风输入并将其回显给扬声器.

这工作正常,但我似乎无法在捕获完成后播放完全捕获的音频.

当一些声音被捕获时,我将它存储在如此的列表中......

for (int i = 0; i < CAP_SIZE; i++)
{
    playbackBuffer.push_back( buffer[i] );
}
Run Code Online (Sandbox Code Playgroud)

捕获完成后,我尝试(并失败)使用以下代码播放该音频

ALuint  playbackSource;
alGenSources(1, &playbackSource);
errorCode = alGetError();

ALuint tempPlayback;
alBufferData(tempPlayback, AL_FORMAT_MONO16, &playbackBuffer.front(), playbackBuffer.size()*sizeof(ALuint), FREQ);

// Attach the playback buffer to the new playback source
alSourcei(playbackSource, AL_BUFFER, tempPlayback);
alSourcePlay(playbackSource);

ALint sState = 0;
do
{
    alGetSourcei(playbackSource, AL_SOURCE_STATE, &sState);
}
while ((sState == AL_PLAYING));
Run Code Online (Sandbox Code Playgroud)

调试时,我可以看到playbackBuffer中有很多数据,此时播放的噪音有一瞬间,但远不及捕获的噪声.

编辑:我添加了该行

alGenBuffers(1, &tempPlayback);
Run Code Online (Sandbox Code Playgroud)

在创建tempPlayback之后和调用alBufferData(...)之前,现在播放正确的时间,但我听到的只是一个高音调的噪音.

c++ audio openal capture playback

4
推荐指数
1
解决办法
4786
查看次数

标签 统计

audio ×1

c++ ×1

capture ×1

openal ×1

playback ×1