Objective-C, CoreAudio:播放的声音有额外的噪音,嘶嘶声和砰的一声的可能原因
Objective-C, CoreAudio: Possible reasons for which played sound has additional noise, hiss and pops?
我使用CoreAudio播放一些连续的声音。我设法让它工作,但是我现在有一个问题,我无法克服。它播放的声音,更重要的是它是我真正需要的声音,不仅仅是噪音,而且还有噪音,嘶嘶声,爆裂声。
我验证了采样率,零化了所有的沉默缓冲区,检查了通道(我肯定我只有1个),并仔细检查了提供回放方法的算法。(但我将在这里添加它只是为了确保)。我在声音方面的经验很有限,所以我可能做错了什么。我想知道是否还有其他事情需要检查,或者最好的方法是什么,首先要看哪里?
//init
playedBufferSize=audioFilesSize[audioFilesIndex];
startPointForPlayedBuffer=0;
//feed the audio
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
AudioBuffer buffer = ioData->mBuffers[0];
if (playedBufferSize>=buffer.mDataByteSize) {
memcpy(buffer.mData , audioFiles[audioFilesIndex]+startPointForPlayedBuffer, buffer.mDataByteSize);
playedBufferSize-=buffer.mDataByteSize;
startPointForPlayedBuffer+=buffer.mDataByteSize;
}else {
memcpy(buffer.mData , audioFiles[audioFilesIndex]+startPointForPlayedBuffer, playedBufferSize);
nextAudioFileIndex();
memcpy(buffer.mData+playedBufferSize, audioFiles[audioFilesIndex], playedBufferSize);
playedBufferSize = audioFilesSize[audioFilesIndex]-(buffer.mDataByteSize-playedBufferSize);
startPointForPlayedBuffer = (buffer.mDataByteSize-playedBufferSize);
}
return noErr;
}
编辑:我知道上面的代码不会连续播放声音,因为它在某些时候用一堆0填充缓冲区,但是,我得到了许多奇怪的声音,如果声音会播放并停止一小段时间并重新开始,我会很高兴,一个好的开始:)
EDIT2:我编辑了代码,使它不再输出沉默,但不幸的是,我仍然得到嘶嘶声和砰的一声…
谢谢!
我不完全熟悉你在做什么,但我在OSX上使用Core Graphics的东西有一个类似的问题-在某些情况下,我的图像上出现了可见的"噪音"。这里的问题是我的缓冲,我必须把它们归零,否则就会有噪声。你能试着在缓冲区上做一个memset吗?在使用mData[]之前?
出现的问题,以及为什么我认为你可能会看到相同类型的事情,是当你在OSX中分配大块内存时,出于安全原因,它通常为零,但对于小块内存,它不会为零。这可能会导致奇怪的bug -例如,一开始你可能会分配一个足够大的内存块,它已经为你清除了,但是当你继续流式传输时,你可能会分配较小的内存块,而这些内存块不会被清除。
相关文章:
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 为什么 gcc 会产生这种奇怪的组件与叮当声?
- 如何在窗户上使用和配置叮当声?
- 叮当声:折叠表情和"expression result unused"警告
- PJSUA在两个或多个不同的音频声卡之间切换
- 我是否以错误的方式声明了getpriorityvalues函数
- 使用NOLINT抑制叮当声.如何抑制抑制?
- 是否有可能编写新的叮当声现代化规则?
- 忽略由第三方标头引起的 [叮当声诊断错误] 叮当声整洁
- 使叮当声忽略对线路的评论
- 如何在Raspberry Pi上使用C /libao/alsa通过USB声卡播放音频
- 在叮当声中regex_constants实现错误
- 用叮当声(3.8)和Android NDK R14B建筑物提升(1.58)
- MAC上的叮当声不支持统一初始化
- C++ lambda 和内联嘶嘶声
- 别名 std::initializer_list 在叮当声中
- 在叮当声中init_priority支持
- 自定义分配器上的额外移动结构用于叮当声
- 你如何正确地";"啪"的一声;到一个值
- Objective-C, CoreAudio:播放的声音有额外的噪音,嘶嘶声和砰的一声的可能原因