Visual Studio 2019 上的 MSVC 在這里說“運算式必須具有指向物件的指標型別,但它在泛型陣列上具有“浮點”型別”:
void _stdcall sample::Eff_Render(PWAV32FS SourceBuffer, PWAV32FS DestBuffer, int Length)
{
float gain = _gain;
for (int ii = 0; ii < Length; ii )
{
(*DestBuffer)[ii][0] = (*SourceBuffer)[ii][0] * gain;
(*DestBuffer)[ii][1] = (*SourceBuffer)[ii][1] * gain;
}
}
問題似乎在這里:
(*DestBuffer)[ii][0] = (*SourceBuffer)[ii][0] * gain;
(*DestBuffer)[ii][1] = (*SourceBuffer)[ii][1] * gain;
不知道為什么:
typedef float TWAV32FS[2];
typedef TWAV32FS *PWAV32FS;
一些標志被禁用?在 gcc 上,這種“強制轉換”似乎由編譯器自動管理。管理這個的正確方法是什么?(也許我在 gcc 上錯了,不知道......)
uj5u.com熱心網友回復:
改變這個:
(*DestBuffer)[ii][0] = (*SourceBuffer)[ii][0] * gain;
(*DestBuffer)[ii][1] = (*SourceBuffer)[ii][1] * gain;
對此:
DestBuffer[ii][0] = (SourceBuffer[ii][0]) * gain;
DestBuffer[ii][1] = (SourceBuffer[ii][1]) * gain;
解釋:
(我猜你正在對浮點立體聲信號進行音頻處理)。
DestBuffer并且SourceBuffer都是樣本陣列。每個樣本是一對浮點數。
每個樣本的參考如下:
DestBuffer[ii]
樣本上的每個單獨通道的參考如下:
DestBuffer[ii][0]
DestBuffer[ii][1]
您使用此語法時遇到的錯誤:
(*DestBuffer)[ii][0]
是否*DestBuffer真的與DestBuffer[0]或陣列中的第一個樣本相同。無論如何,這與which 不是您想要(*DestBuffer)[ii]的相同。DestBuffer[0][ii]但是與 -(*DestBuffer)[ii][0]相同,DestBuffer[0][ii][0]因為該第三維不存在,所以會觸發編譯器錯誤。
之前完成了一些音頻處理代碼 - 不要忘記gain適當地鉗制乘法的結果。
uj5u.com熱心網友回復:
由于這些 typedef
typedef float TWAV32FS[2];
typedef TWAV32FS *PWAV32FS;
typedef 名稱PWAV32FS等價于float ( * )[2].
所以引數SourceBuffer和 DestBuffer實際上被宣告為
float ( *SourceBuffer )[2], float ( * DestBuffer )[2]
因此 for 回圈應該重寫為
for (int ii = 0; ii < Length; ii )
{
DestBuffer[ii][0] = SourceBuffer[ii][0] * gain;
DestBuffer[ii][1] = SourceBuffer[ii][1] * gain;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480168.html
下一篇:應該回傳結構指標的函式
