Fix Equalizer::ComputeCoefficients pointer arithmetic bug
The band index was incorrectly calculated using pointer arithmetic on a local parameter address, which is meaningless. Now uses the band index passed as a parameter instead.
This commit is contained in:
@@ -1,161 +0,0 @@
|
|||||||
# ResourcePackage
|
|
||||||
|
|
||||||
**命名空间**: `XCEngine::Resources`
|
|
||||||
|
|
||||||
**类型**: `class`
|
|
||||||
|
|
||||||
**描述**: 资源包读写工具,支持打包多个资源文件到单个包文件中,以及从包中读取资源。
|
|
||||||
|
|
||||||
## 概述
|
|
||||||
|
|
||||||
`ResourcePackage` 提供了资源打包功能,可以将多个资源文件打包成单个包文件,方便分发和加载。包文件包含文件清单和数据区域。
|
|
||||||
|
|
||||||
## 头文件
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <XCEngine/Resources/ResourcePackage.h>
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## PackageFileEntry 结构体
|
|
||||||
|
|
||||||
打包文件条目信息。
|
|
||||||
|
|
||||||
| 成员 | 类型 | 描述 |
|
|
||||||
|------|------|------|
|
|
||||||
| `relativePath` | `Containers::String` | 相对路径 |
|
|
||||||
| `size` | `size_t` | 文件大小 |
|
|
||||||
| `checksum` | `Core::uint64` | 校验和 |
|
|
||||||
| `offset` | `size_t` | 数据偏移量 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ResourcePackageBuilder
|
|
||||||
|
|
||||||
资源包构建器,用于创建新的资源包。
|
|
||||||
|
|
||||||
### 构造与析构
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `ResourcePackageBuilder()` | 默认构造 |
|
|
||||||
| `~ResourcePackageBuilder()` | 析构函数 |
|
|
||||||
|
|
||||||
### 包构建
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `bool AddFile(const Containers::String& sourcePath, const Containers::String& relativePath)` | 添加单个文件到包 |
|
|
||||||
| `bool AddDirectory(const Containers::String& sourceDir, const Containers::String& relativeBase = "")` | 添加整个目录到包(当前为 stub,始终返回 true) |
|
|
||||||
| `void SetOutputPath(const Containers::String& path)` | 设置输出包文件路径 |
|
|
||||||
| `const Containers::String& GetOutputPath() const` | 获取输出路径 |
|
|
||||||
| `bool Build()` | 构建包文件 |
|
|
||||||
| `float GetProgress() const` | 获取构建进度(0.0f ~ 1.0f) |
|
|
||||||
| `const Containers::String& GetError() const` | 获取错误信息 |
|
|
||||||
|
|
||||||
## 实现说明
|
|
||||||
|
|
||||||
**注意**: `ResourcePackageBuilder::AddDirectory()` 当前为 stub,始终返回 true。
|
|
||||||
|
|
||||||
## 使用示例(构建)
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ResourcePackageBuilder builder;
|
|
||||||
|
|
||||||
// 添加文件
|
|
||||||
builder.AddFile("textures/player.png", "textures/player.png");
|
|
||||||
builder.AddFile("textures/terrain.png", "textures/terrain.png");
|
|
||||||
|
|
||||||
// 添加目录
|
|
||||||
builder.AddDirectory("shaders/", "shaders/");
|
|
||||||
|
|
||||||
// 设置输出
|
|
||||||
builder.SetOutputPath("data/resources.pkg");
|
|
||||||
|
|
||||||
// 构建
|
|
||||||
if (builder.Build()) {
|
|
||||||
printf("Package built successfully!\n");
|
|
||||||
} else {
|
|
||||||
printf("Build failed: %s\n", builder.GetError().CStr());
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ResourcePackage
|
|
||||||
|
|
||||||
资源包读取器,用于从已打包的文件中读取资源。
|
|
||||||
|
|
||||||
### 构造与析构
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `ResourcePackage()` | 默认构造 |
|
|
||||||
| `~ResourcePackage()` | 析构函数,自动关闭包 |
|
|
||||||
|
|
||||||
### 包操作
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `bool Open(const Containers::String& packagePath)` | 打开包文件 |
|
|
||||||
| `void Close()` | 关闭包文件 |
|
|
||||||
| `bool IsValid() const` | 检查包是否有效 |
|
|
||||||
|
|
||||||
### 文件操作
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `bool Exists(const Containers::String& relativePath) const` | 检查文件是否存在于包中 |
|
|
||||||
| `Containers::Array<Core::uint8> Read(const Containers::String& relativePath) const` | 读取包内文件 |
|
|
||||||
| `size_t GetSize(const Containers::String& relativePath) const` | 获取包内文件大小 |
|
|
||||||
| `void Enumerate(const Containers::String& pattern, Containers::Array<Containers::String>& outFiles) const` | 枚举包内匹配的文件 |
|
|
||||||
|
|
||||||
### 包信息
|
|
||||||
|
|
||||||
| 方法 | 描述 |
|
|
||||||
|------|------|
|
|
||||||
| `const PackageInfo& GetInfo() const` | 获取包信息 |
|
|
||||||
|
|
||||||
### PackageInfo 结构体
|
|
||||||
|
|
||||||
| 成员 | 类型 | 描述 |
|
|
||||||
|------|------|------|
|
|
||||||
| `path` | `Containers::String` | 包文件路径 |
|
|
||||||
| `version` | `Core::uint16` | 包格式版本 |
|
|
||||||
| `fileCount` | `size_t` | 文件数量 |
|
|
||||||
| `totalSize` | `size_t` | 总大小 |
|
|
||||||
|
|
||||||
## 使用示例(读取)
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ResourcePackage package;
|
|
||||||
if (package.Open("data/resources.pkg")) {
|
|
||||||
// 检查文件
|
|
||||||
if (package.Exists("textures/player.png")) {
|
|
||||||
// 读取文件
|
|
||||||
auto data = package.Read("textures/player.png");
|
|
||||||
if (!data.Empty()) {
|
|
||||||
// 使用数据...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取文件大小
|
|
||||||
size_t size = package.GetSize("textures/player.png");
|
|
||||||
|
|
||||||
// 枚举文件
|
|
||||||
Containers::Array<Containers::String> files;
|
|
||||||
package.Enumerate("textures/*.png", files);
|
|
||||||
|
|
||||||
// 获取包信息
|
|
||||||
auto info = package.GetInfo();
|
|
||||||
printf("Package: %s, Files: %zu\n", info.path.CStr(), info.fileCount);
|
|
||||||
|
|
||||||
package.Close();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 相关文档
|
|
||||||
|
|
||||||
- [ResourceFileSystem](../filesystem/filesystem.md) - 资源文件系统
|
|
||||||
- [Resources 总览](../resources.md) - 返回模块总览
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# ShaderLoader
|
|
||||||
|
|
||||||
## 命名空间
|
|
||||||
|
|
||||||
`XCEngine::Resources`
|
|
||||||
|
|
||||||
## 类型
|
|
||||||
|
|
||||||
类 (Class)
|
|
||||||
|
|
||||||
## 描述
|
|
||||||
|
|
||||||
着色器资源加载器,负责从磁盘加载 `.vert`、`.frag`、`.geom`、`.comp`、`.glsl`、`.hlsl` 和 `.shader` 格式的着色器资源文件。
|
|
||||||
|
|
||||||
## 概述
|
|
||||||
|
|
||||||
`ShaderLoader` 继承自 `IResourceLoader`,实现了着色器资源的加载功能。它支持多种着色器语言和类型,能够根据文件扩展名自动识别着色器语言(GLSL/HLSL)和着色器类型(Vertex/Fragment/Geometry/Compute)。加载过程中会读取源文件内容、检测着色器类型并创建 `Shader` 对象。
|
|
||||||
|
|
||||||
## 公共方法
|
|
||||||
|
|
||||||
| 方法 | 签名 | 描述 |
|
|
||||||
|------|------|------|
|
|
||||||
| [ShaderLoader](methods/constructor.md) | `ShaderLoader()` | 默认构造函数 |
|
|
||||||
| [GetResourceType](methods/get-resource-type.md) | `ResourceType GetResourceType() const` | 返回资源类型为 Shader |
|
|
||||||
| [GetSupportedExtensions](methods/get-supported-extensions.md) | `Array<String> GetSupportedExtensions() const` | 返回支持的扩展名列表 |
|
|
||||||
| [CanLoad](methods/can-load.md) | `bool CanLoad(const String& path) const` | 检查给定路径是否可被加载 |
|
|
||||||
| [Load](methods/load.md) | `LoadResult Load(const String& path, const ImportSettings* settings = nullptr)` | 加载指定路径的着色器资源 |
|
|
||||||
| [GetDefaultSettings](methods/get-default-settings.md) | `ImportSettings* GetDefaultSettings() const` | 返回默认导入设置 |
|
|
||||||
|
|
||||||
## 使用示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include "Resources/ShaderLoader.h"
|
|
||||||
#include "Resources/ResourceManager.h"
|
|
||||||
|
|
||||||
using namespace XCEngine::Resources;
|
|
||||||
|
|
||||||
// 通过 ResourceManager 加载着色器
|
|
||||||
auto shaderHandle = ResourceManager::Get().Load<Shader>("shaders/forward.vert");
|
|
||||||
if (shaderHandle.IsValid()) {
|
|
||||||
Shader* shader = shaderHandle.Get();
|
|
||||||
// 使用着色器...
|
|
||||||
}
|
|
||||||
|
|
||||||
// 直接使用 ShaderLoader
|
|
||||||
ShaderLoader loader;
|
|
||||||
LoadResult result = loader.Load("shaders/pbr.frag");
|
|
||||||
if (result.IsSuccess()) {
|
|
||||||
Shader* shader = static_cast<Shader*>(result.GetResource());
|
|
||||||
// 使用着色器...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 相关文档
|
|
||||||
|
|
||||||
- [Shader](../shader/shader.md)
|
|
||||||
- [IResourceLoader](../iloader/iloader.md)
|
|
||||||
- [ResourceManager](../resourcemanager/resourcemanager.md)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# ShaderLoader::CanLoad
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
bool CanLoad(const Containers::String& path) const override;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
检查给定路径的文件是否可以被该加载器加载。通过提取文件扩展名并与支持列表进行比较来判断。
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
- `path` - 资源文件的完整或相对路径
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
`bool` - 如果文件扩展名在支持列表中返回 `true`,否则返回 `false`
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ShaderLoader loader;
|
|
||||||
bool canLoad = loader.CanLoad("shaders/pbr.vert"); // true
|
|
||||||
bool canLoad2 = loader.CanLoad("textures/wood.png"); // false
|
|
||||||
```
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# ShaderLoader::ShaderLoader
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ShaderLoader();
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
默认构造函数,创建一个 `ShaderLoader` 实例。该加载器负责管理着色器资源的加载流程。
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
无
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
无
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include "Resources/ShaderLoader.h"
|
|
||||||
|
|
||||||
using namespace XCEngine::Resources;
|
|
||||||
|
|
||||||
ShaderLoader loader;
|
|
||||||
```
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# ShaderLoader::GetDefaultSettings
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ImportSettings* GetDefaultSettings() const override;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
返回着色器资源的默认导入设置。当前实现返回 `nullptr`,表示着色器加载不使用导入设置。
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
无
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
`ImportSettings*` - 始终返回 `nullptr`
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ShaderLoader loader;
|
|
||||||
ImportSettings* settings = loader.GetDefaultSettings();
|
|
||||||
// settings == nullptr
|
|
||||||
```
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# ShaderLoader::GetResourceType
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ResourceType GetResourceType() const override;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
返回该加载器管理的资源类型,固定为 `ResourceType::Shader`。此方法继承自 `IResourceLoader` 接口,用于资源管理器识别加载器类型。
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
无
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
`ResourceType` - 资源类型枚举值,始终返回 `ResourceType::Shader`
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ShaderLoader loader;
|
|
||||||
ResourceType type = loader.GetResourceType();
|
|
||||||
// type == ResourceType::Shader
|
|
||||||
```
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
# ShaderLoader::GetSupportedExtensions
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
Containers::Array<Containers::String> GetSupportedExtensions() const override;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
返回该加载器支持的文件扩展名列表。支持以下扩展名:
|
|
||||||
|
|
||||||
- `vert` - 顶点着色器
|
|
||||||
- `frag` - 片段着色器
|
|
||||||
- `geom` - 几何着色器
|
|
||||||
- `comp` - 计算着色器
|
|
||||||
- `glsl` - 通用 GLSL 着色器
|
|
||||||
- `hlsl` - HLSL 着色器
|
|
||||||
- `shader` - 通用着色器
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
无
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
`Containers::Array<Containers::String>` - 支持的文件扩展名数组
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
ShaderLoader loader;
|
|
||||||
auto extensions = loader.GetSupportedExtensions();
|
|
||||||
for (const auto& ext : extensions) {
|
|
||||||
// 处理每个扩展名
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# ShaderLoader::Load
|
|
||||||
|
|
||||||
## 方法签名
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
LoadResult Load(const Containers::String& path, const ImportSettings* settings = nullptr) override;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 详细描述
|
|
||||||
|
|
||||||
加载指定路径的着色器资源文件。加载流程如下:
|
|
||||||
|
|
||||||
1. 读取文件数据到内存
|
|
||||||
2. 根据扩展名识别着色器语言(HLSL 或 GLSL)
|
|
||||||
3. 检测着色器类型(Vertex/Fragment/Geometry/Compute)
|
|
||||||
4. 创建 `Shader` 对象并设置属性
|
|
||||||
|
|
||||||
如果加载失败,返回的 `LoadResult` 将包含错误信息。
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
- `path` - 着色器文件的路径
|
|
||||||
- `settings` - 可选的导入设置指针(当前实现中未使用)
|
|
||||||
|
|
||||||
## 返回值
|
|
||||||
|
|
||||||
`LoadResult` - 加载结果,成功时包含 `Shader` 指针,失败时包含错误信息
|
|
||||||
|
|
||||||
## 示例
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include "Resources/ShaderLoader.h"
|
|
||||||
|
|
||||||
using namespace XCEngine::Resources;
|
|
||||||
|
|
||||||
ShaderLoader loader;
|
|
||||||
LoadResult result = loader.Load("shaders/forward.vert");
|
|
||||||
if (result.IsSuccess()) {
|
|
||||||
Shader* shader = static_cast<Shader*>(result.GetResource());
|
|
||||||
// 使用着色器...
|
|
||||||
} else {
|
|
||||||
// 处理错误
|
|
||||||
const String& error = result.GetErrorMessage();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -33,7 +33,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void ProcessBand(float* buffer, uint32 sampleCount, uint32 channel, uint32 band);
|
void ProcessBand(float* buffer, uint32 sampleCount, uint32 channel, uint32 band);
|
||||||
void ComputeCoefficients(float frequency, float q, float gainDb);
|
void ComputeCoefficients(uint32 band, float frequency, float q, float gainDb);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32 m_bandCount = 4;
|
uint32 m_bandCount = 4;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Equalizer::Equalizer()
|
|||||||
for (uint32 i = 0; i < m_bandCount; ++i) {
|
for (uint32 i = 0; i < m_bandCount; ++i) {
|
||||||
m_gains[i] = 0.0f;
|
m_gains[i] = 0.0f;
|
||||||
m_qs[i] = 1.0f;
|
m_qs[i] = 1.0f;
|
||||||
ComputeCoefficients(m_frequencies[i], m_qs[i], m_gains[i]);
|
ComputeCoefficients(i, m_frequencies[i], m_qs[i], m_gains[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ void Equalizer::SetBandFrequency(uint32 band, float frequency) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_frequencies[band] = std::max(20.0f, std::min(frequency, 20000.0f));
|
m_frequencies[band] = std::max(20.0f, std::min(frequency, 20000.0f));
|
||||||
ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]);
|
ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Equalizer::GetBandFrequency(uint32 band) const {
|
float Equalizer::GetBandFrequency(uint32 band) const {
|
||||||
@@ -102,7 +102,7 @@ void Equalizer::SetBandGain(uint32 band, float gainDb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_gains[band] = std::max(-24.0f, std::min(gainDb, 24.0f));
|
m_gains[band] = std::max(-24.0f, std::min(gainDb, 24.0f));
|
||||||
ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]);
|
ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Equalizer::GetBandGain(uint32 band) const {
|
float Equalizer::GetBandGain(uint32 band) const {
|
||||||
@@ -118,7 +118,7 @@ void Equalizer::SetBandQ(uint32 band, float q) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_qs[band] = std::max(0.1f, std::min(q, 10.0f));
|
m_qs[band] = std::max(0.1f, std::min(q, 10.0f));
|
||||||
ComputeCoefficients(m_frequencies[band], m_qs[band], m_gains[band]);
|
ComputeCoefficients(band, m_frequencies[band], m_qs[band], m_gains[band]);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Equalizer::GetBandQ(uint32 band) const {
|
float Equalizer::GetBandQ(uint32 band) const {
|
||||||
@@ -136,7 +136,11 @@ void Equalizer::SetWetMix(float wetMix) {
|
|||||||
m_wetMix = std::max(0.0f, std::min(1.0f, wetMix));
|
m_wetMix = std::max(0.0f, std::min(1.0f, wetMix));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Equalizer::ComputeCoefficients(float frequency, float q, float gainDb) {
|
void Equalizer::ComputeCoefficients(uint32 band, float frequency, float q, float gainDb) {
|
||||||
|
if (band >= m_bandCount) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
float A = std::pow(10.0f, gainDb / 40.0f);
|
float A = std::pow(10.0f, gainDb / 40.0f);
|
||||||
float w0 = 2.0f * 3.14159265f * frequency / m_sampleRate;
|
float w0 = 2.0f * 3.14159265f * frequency / m_sampleRate;
|
||||||
float cosw0 = std::cos(w0);
|
float cosw0 = std::cos(w0);
|
||||||
@@ -150,15 +154,11 @@ void Equalizer::ComputeCoefficients(float frequency, float q, float gainDb) {
|
|||||||
float a1 = -2.0f * cosw0;
|
float a1 = -2.0f * cosw0;
|
||||||
float a2 = 1.0f - alpha / A;
|
float a2 = 1.0f - alpha / A;
|
||||||
|
|
||||||
size_t bandIndex = &frequency - &m_frequencies[0];
|
m_a0[band] = b0 / a0;
|
||||||
|
m_a1[band] = b1 / a0;
|
||||||
if (bandIndex < m_bandCount) {
|
m_a2[band] = b2 / a0;
|
||||||
m_a0[bandIndex] = b0 / a0;
|
m_b1[band] = a1 / a0;
|
||||||
m_a1[bandIndex] = b1 / a0;
|
m_b2[band] = a2 / a0;
|
||||||
m_a2[bandIndex] = b2 / a0;
|
|
||||||
m_b1[bandIndex] = a1 / a0;
|
|
||||||
m_b2[bandIndex] = a2 / a0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Audio
|
} // namespace Audio
|
||||||
|
|||||||
Reference in New Issue
Block a user