【转载】空间音频科普
空间音频科普篇【持续更新】 - 削腚恶的文章 - 知乎
https://zhuanlan.zhihu.com/p/584461699
C++中的‘&’
当涉及到 C++ 中的 &
符号时,我们可以将其归结为以下几个主要用途和含义:
引用符号:
& 用于声明引用类型:你可以使用
&
来创建引用,使变量成为另一个变量的别名。引用允许你对同一数据进行多个命名引用,而不是创建副本。例如:
int x = 42;
int& ref = x; // ref 现在是 x 的别名 修改 ref 也会影响
x,因为它们引用同一个值。
const T&
用于声明常量引用:常量引用允许你引用值,但不允许修改它。这在函数参数传递中很有用,可以防止不必要的拷贝。例如:
const int& cref = x; // x 的常量引用
取地址符号:
& 用于获取变量的地址:通过使用 &
运算符,你可以获取变量的内存地址,通常与指针一起使用。例如:
int x = 42;
int* ptr = &x; // ptr 存储了 x 的地址
按位与运算符:
&
可以用于执行按位与操作:这是一个位运算操作,用于执行两个整数的位级与操作。例如:
int a = 5; // 0000 ...
关于音频流处理【未完成】
音频流与应用场景
音频流(audio
streaming)是指将音频数据以流的方式,通过网络进行实时传输,而不是一次性下载整个音频文件。这在实时通信、音乐流媒体、在线广播和游戏中非常常见。通常有以下几种常见的应用:
实时通信:音频流在语音通话、视频会议和在线游戏中发挥关键作用。它允许用户实时传输声音,以进行对话或协作。常见的音频编解码格式如Opus和WebRTC用于实时通信。
音乐流媒体:音乐流媒体服务(如Spotify、Apple
Music和Tidal)通过音频流的方式向用户提供音乐。用户可以即时播放音乐,而不需要下载整个歌曲。通常,这些服务使用高质量的音频编码格式(如AAC或FLAC)以提供出色的音质。
在线广播:许多广播电台和电台应用程序通过音频流的方式播放音乐、新闻、体育赛事和其他节目。这使得听众可以实时收听,而不必等待完整的广播文件下载。
游戏音频:音频流也用于游戏中,特别是在线多人游戏。游戏音频可以通过流媒体方式传输,以实现实时互动和更好的游戏体验。
Buffer Size
音频中的缓冲区大小(Buffer
Size)对音频处理和播放的性能和稳定性有重要影响,特别是在 ...
音频算法中常见的IIR滤波器
引言
Comb Filter
Comb
Filter是通过将信号的一部分与一个自身延迟版本相叠加进行实现的。结构如图:
差分方程为: 由于Comb Filter的形状特征,所以中文翻译为梳状滤波器。
以下是它的主要优缺点和应用场景:
优点:
简单而直观: Comb
Filter的原理非常直观和易于理解。它的工作方式类似于将原始信号与自身的延迟版本相加,因此在概念上相对简单。
产生特殊音效: Comb
Filter常用于音频特效处理,如混响、共振和相位效果。它可以产生模拟混响的声音,为声音增添空间感和自然感。
在音乐创作中有用:
音乐制作人和声音设计师经常使用Comb
Filter来创造独特的声音效果,以增强音乐作品的创意性。
相位干扰效果: Comb
Filter的频谱中的凹槽和峰值可以引发相位干扰效果,从而创造出独特的音频效果,如拖尾和位移。
缺点:
有限的应用范围: Comb
Filter主要用于特定的音频特效和信号处理任务。它并不适合所有类型的滤波需求,因此在更广泛的音频处理任务中可能不常见。
可能引入噪音: 当Comb
Filter的延迟量过大时,它可能引入明显的混响 ...
FIR滤波器和IIR滤波器的比较
引言
数字滤波在信号处理、音频处理和通信系统中扮演着至关重要的角色。两种常见的数字滤波器类型是FIR(有限脉冲响应)滤波器和IIR(无限脉冲响应)滤波器。它们在设计、特性和应用方面有着显著的区别。本文将深入探讨这两种滤波器的区别,以帮助读者更好地理解它们的工作原理和适用范围。
1.
FIR滤波器和IIR滤波器的基础
在深入讨论它们的区别之前,让我们首先了解FIR和IIR滤波器的基础。
FIR滤波器(有限脉冲响应):FIR滤波器的输出仅取决于其输入的有限历史样本。它通常以固定长度的冲激响应(滤波器系数)来实现。FIR滤波器的工作原理是将输入信号与这些系数进行卷积运算,以产生输出信号。
IIR滤波器(无限脉冲响应):与FIR不同,IIR滤波器的输出取决于其输入的历史样本和输出的历史样本。它通常以差分方程的形式来实现,这涉及递归运算,因此它具有反馈结构。
2. 频率响应和相位特性
一个主要区别在于它们的频率响应和相位特性。
FIR滤波器:FIR滤波器的频率响应通常是线性相位的,这意味着它不会引入信号中的相位变化。这使得它在需要线性相位特性的应用中很有用,如音频均衡。
IIR滤波器:II ...
十种排序算法(C++)
C++ 十种排序算法
前言
先写一个输入输出的模版,中间调用对应的函数进行排序
#include <iostream>
#include <vector>
#include <sstream>
int main() {
std::cout << "请输入要排序的数字,使用逗号隔开,然后按回车结束输入:" << std::endl;
// 读取输入并解析为向量
std::string input;
std::getline(std::cin, input);
std::vector<int> numbers;
std::stringstream ss(input);
int num;
char comma;
while (ss >> num) {
numbers.push_back(num);
ss >> comma; // 读取逗号
}
// 调用排序函数
bubbleSor ...
Git学习步骤
Git版本管理学习
1. 安装Git:
首先,你需要在计算机上安装Git。你可以从Git官方网站下载适用于你的操作系统的Git安装程序,并按照安装指南进行安装。
2. Git基础概念:
在开始使用Git之前,了解一些基本概念非常重要。以下是一些重要的概念:
a. 版本控制:理解版本控制的概念,包括分布式版本控制系统和中央化版本控制系统的区别。
b. 仓库(Repository):Git存储项目的仓库,学习如何创建和管理仓库。
c. 提交(Commit):提交是对代码库的更改的快照,了解如何创建、查看和回滚提交。
d. 分支(Branch):学习如何创建和管理分支,以支持并行开发和特性分支。
e. 合并(Merge):了解如何将一个分支的更改合并到另一个分支中。
f. 冲突(Conflict):学习如何解决合并冲突,这是当两个分支具有冲突更改时发生的情况。
3. Git基本命令:
a. `git init`:初始化一个新的Git仓库。
b. `git clone`:从远程仓库克隆一个本地副本。
c. `git add`:将更改添加到暂存区。
d. `git commit` ...
Wwise 插件开发步骤
前言
在开始建立Wwise插件之前可以通过下面两个视频对插件开发有个认识:
Distortion失真效果器开发: Wwise Up On Air -
Hands On | Creating a Plug-In for Wwise Part 1: Environment Setup &
First Plug-In - YouTube)
Metering创建和GUI设计: Wwise Up On Air Hands
On | Creating a Plug-In for Wwise Part 2: UI and Monitoring Data -
YouTube)
于此同时,需要预先知道一些相关关键词:
Wwise Authoring Tool:是指声音设计师和配乐师使用的实际应用程序
WAAPI:音频程序员使用的Wwise开发API
另外,还有一些其他有用的资源链接:
将插件打包以便用在
Audiokinetic Launcher 中
用于创建
Wwise 音频插件的简化管线
前置安装
Python 3
Wwise SDK
全文以Visual Studio 201 ...
map和unordered_map区别
Map
unordered_map
有序
根据key升序排列
无序
实现接口
内部实现机制是红黑树,所以查找、添加、删除的效率由红黑树决定
hash_table
查找时间
log(n)
最好O(1) 最差O(n)
插入时间
与查找相同
删除时间
与查找相同
《程序员面试金典》记录
面试题 01.01.
判定字符是否唯一
class Solution {
public:
bool isUnique(string astr) {
int len = astr.size();
for(int i=0; i<len; ++i)
{
for(int j=i+1; j<len; ++j)
{
if(astr[i]==astr[j])
return false;
}
}
return true;
}
};
本题非常简单,但是并没有一次通过。主要错误点在于,没有注意到第二次循环需要从i+1开始,错误的写成了i
面试题
01.02. 判定是否互为字符重排
class Solution {
public:
bool CheckPermut ...