我正在使用 Aran Mulhollan 的 RemoteIOPlayer,在 SDK iphone 中使用音频队列。我可以毫无问题: - 添加两个信号来混合声音 - 通过乘以我从 wav 文件中获得的 UInt32 来增加音量
但是其他所有操作都会给我带来扭曲和失真的声音,尤其是我无法分割信号。我似乎无法弄清楚我做错了什么,除法的实际结果似乎很好;声音/信号处理的某些方面显然必须躲避我:)
任何帮助表示赞赏!
我正在使用 Aran Mulhollan 的 RemoteIOPlayer,在 SDK iphone 中使用音频队列。我可以毫无问题: - 添加两个信号来混合声音 - 通过乘以我从 wav 文件中获得的 UInt32 来增加音量
但是其他所有操作都会给我带来扭曲和失真的声音,尤其是我无法分割信号。我似乎无法弄清楚我做错了什么,除法的实际结果似乎很好;声音/信号处理的某些方面显然必须躲避我:)
任何帮助表示赞赏!
你有没有尝试过这样的事情?
- (void)setQueue:(AudioQueueRef)ref toVolume:(float)newValue {
OSStatus rc = AudioQueueSetParameter(ref, kAudioQueueParam_Volume, newValue);
if (rc) {
NSLog(@"AudioQueueSetParameter returned %d when setting the volume.\n", rc);
}
}
首先你提到的代码没有使用AudioQueues,它使用了AudioUnits。在 iphone 中混合音频的最佳方式是使用内置的混音器单元,您从此处下载原始示例的网站上有一些代码。除此之外,我会在您的代码操作系统中检查您是否拥有正确的数据类型。当您应该使用有符号整数时,您是否正在尝试对无符号整数进行操作?通常会产生扭曲的结果(可以理解)
iPhone 将音频处理为 16 位整数。大多数音频文件已经标准化,因此峰值样本值是适合 16 位有符号整数的最大值。这意味着如果将两个这样的样本加在一起,就会出现溢出,或者在这种情况下,会出现音频剪辑。如果要将两个音频源混合在一起并确保没有削波,则必须对样本进行平均:将它们加在一起并除以 2。或者您将音量设置为一半。如果您使用分贝,那将是大约 -6 dB 的变化。