【发布时间】:2011-06-17 22:48:37
【问题描述】:
OSStatus MusicPlayerCallback (
void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData) {
MusicPlaybackState *musicPlaybackState = (MusicPlaybackState*) inRefCon;
double sampleinp;
double A,omega,sn,cs,alpha,Bandwidth;
double dbGain;
double a0,a1,a2,b0,b1,b2;
dbGain = 1.0;
A=pow(10.0,dbGain/40.0);
Bandwidth = 2.0;
omega=2 * M_PI * 800.0/44100.0;
sn=sin(omega);
cs=cos(omega);
alpha=sn*sinh(((M_LN2/2)*Bandwidth*omega)/sn);
//Peak Filter Biquad
b0 =1.0 + alpha * A;
b1 = (-2.0 * cs);
b2 = 1.0 - alpha * A;
a0 = 1.0 + (alpha /A);
a1 = -2.0 * cs;
a2 = 1.0 - (alpha /A);
double b0a0, b1a0, b2a0, a1a0, a2a0;
double static x1;
double static x2;
double static y1;
double static y2;
b0a0=b0/a0;
b1a0=b1/a0;
b2a0=b2/a0;
a1a0=a1/a0;
a2a0=a2/a0;
for (int i = 0 ; i < ioData->mNumberBuffers; i++){
AudioBuffer buffer = ioData->mBuffers[i];
AudioSampleType *outSample = buffer.mData;
for (int j = 0; j < inNumberFrames*2; j++){
sampleinp = *musicPlaybackState->samplePtr++;
outSample[j] = b0a0 * sampleinp +
b1a0 * x1 +
b2a0 * x2 -
a1a0 * y1 -
a2a0 * y2;
x2=x1;
x1=sampleinp;
y2=y1;
y1=outSample[j];
}}
return noErr;
}
有点击/弹出问题。有人请帮忙......我不知道我做错了什么。这是在 Xcode 中使用 Objective-C 中的 C。我尝试制作 Coeff Global 和 Static 但没有运气。使用的音频文件是 .caf 我试过 .wav 但还是不行....
谢谢,对于一般的求助感到抱歉。我是这个网站的新手.. 我正在尝试在我的应用程序中添加一个峰值过滤器,但每次我使用滑块或只是将增益保持在 1 时,我都会得到弹出和点击。就保存先前的样本等而言,似乎一切都在那里并且工作正常。在改变频率或带宽时,我也会得到某种类型的相位。几个月来我一直在研究 dsp,我很困惑,我认为这与 Objective-C 和 lil 用户错误有关。将样本更改为 SInt32 时似乎消失了,但更改频率时左声道消失了。
Dsp.h
typedef struct {
void* audioData;
UInt32 audioDataByteCount;
SInt16 *samplePtr;
} MusicPlaybackState;
【问题讨论】:
-
我无法想象为什么有人投票结束这个。
-
@Slomojo:我认为这个问题不应该结束,但就目前而言,它的提出并不是很好,我可以理解为什么它可能会获得接近的选票。 @Cocell:您可能希望改进问题以避免进一步接近投票 - 尝试提供有关问题的更多详细信息以及您尝试过的内容,并将其作为单个特定问题而不是一般的“呼救”。
-
@Paul R - 我同意这个问题应该更有效地提出,但完全无声的投票结束是不合适的。很明显,Cocell 是 SO 的新用户,只是想解决一个棘手的问题。低于 2k 代表的人不可能投票结束,所以当这种情况发生时非常令人失望。这是武断的、无益的而且坦率地说是粗鲁的,如果需要,需要更多信息的评论就是这里所需要的,而不是“走开,你的问题是不想要的”,这正是近距离投票所传达的内容。
-
@Slomojo:你是对的,当然,近距离投票应该总是有评论解释原因,但不幸的是,我们似乎确实得到了很多“路过”的近距离投票,没有厘米。
-
@eryksun 数据类型是 SInt16,希望这就是您所需要的。我还没有通过 SineWave 进行测试。我正在测试不同的立体声歌曲,认为过滤器会起作用。这真让我抓狂。我一直在使用 MATLab 创建过滤器,然后尝试在我的应用程序中实现它们,但即使有静态系数也没有运气。
标签: iphone c++ ios signal-processing core-audio