iOS音频问题通用配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS音频问题通用配置相关的知识,希望对你有一定的参考价值。

参考技术A

**场景一

**
场景说明:
应用A正在播放音乐,应用B启动语音合成,但不中断应用A播放。
解决步骤:

**
场景说明:
应用A正在播放音乐,应用B启动语音合成,此时中断应用A播放,当合成结束后自动恢复应用A播放。
解决步骤:

**
场景说明:
应用A正在播放音乐,应用B启动语音识别,但不中断应用A播放。
解决步骤:

**
场景说明:
应用A正在播放音乐,应用B启动语音识别,此时中断应用A播放,当识别结束后自动恢复应用A播放。
解决步骤:

**
场景说明:
应用A正在播放音乐,然后在应用A启动语音识别,但不中断之前的音乐播放。
解决步骤:

|

AVAudiosessionCategoryOptionAllowBluetooth|

AVAudioSessionCategoryOptionMixWithOthers error:nil];

**
场景说明:
应用A正在播放音乐,然后在应用A启动语音识别,此时中断之前的音乐播放。当识别结束后自动恢复音乐播放。
解决步骤:

**
场景说明:

应用A正在播音或录音,然后在应用A启动语音合成,但不中断之前的播音或录音。
解决步骤:

**
场景说明:

应用A正在播音或录音,然后在应用A启动语音合成,此时中断之前的播音或录音。当合成结束后自动恢复播音或录音。
解决步骤:

**

**

问题说明:

原因分析:

(错误码为560557684)。这是因为当启动后台应用的音频服务时不能影响前台应用的音频服务,因此后台应用的AVAudioSession的Category属性必须含有***AVAudioSessionCategoryOptionMixWithOthers
*** 选项。

解决方法:

[[AVAudioSessionsharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:
AVAudioSessionCategoryOptionMixWithOthers error:nil];

或者

[[AVAudioSessionsharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:
AVAudioSessionCategoryOptionMixWithOthers error:nil];

如何找到两个不同音频样本之间的比例?

【中文标题】如何找到两个不同音频样本之间的比例?【英文标题】:How do I find a scale between two different audio samples? 【发布时间】:2017-06-01 14:43:11 【问题描述】:

我打算制作一个分析音频样本的通用应用程序。当我说“通用”时,我的意思是任何技术(Javascript、C、Java 等)都可以使用它。 基本上,我使用 Apple 的 AVFoundation 在 iOS 上制作了一个应用程序,它可以实时接收长度为 512(bufferSize = 512)的麦克风样本。 在 Python 中,我使用 PyAudio 做了同样的事情,但不幸的是我收到了非常不同的值......

查看示例:

Samples of bufferSize = 512 on iOS:

[0.0166742969, 0.0181432627, 0.0184620395, 0.0182254426, 0.0181945376, 0.0185530782, 0.0192517322, 0.0199078992, 0.0204724055, 0.0212812237, 0.022370765, 0.0230008475, 0.0225516111, 0.0213304944, 0.0200473778, 0.019841563, 0.0206818394, 0.0211550407, 0.0207783803, 0.020227218 ....

Samples of bufferSize = 512 on Python:

[ -52.  -32.  -11.   10.   24.   31.   37.   38.   33.   25.   10.   -4.
  -18.  -26.  -29.  -39. ....

更多:

https://pastebin.com/jrM2VWXR

Python 代码:

https://gist.github.com/denisb411/7c6f601175e8bb9f735d8aa43a0db340

在这两种情况下,我都使用同一台计算机。

如何找到一种方法将它们“转换”(不知道这是否正确)到相同的比例?

如果我的问题不清楚,请通知我。

【问题讨论】:

【参考方案1】:

音频样本通常以 16 或 24 位进行量化。但是对于这些样本的取值范围有不同的约定:

如果要在 8 位上量化,样本通常会存储为无符号字节,范围从 0 到 255 如果要在 16 位上量化,样本通常会存储为 2 的补码有符号整数,范围从 -32768 到 32767 如果要在 24 位上量化,样本通常会存储为无符号整数 等

基本上,当您决定存储样本时,您有两个参数:

签名或未签名 整数或浮点数

每个都有其优点和缺点。例如,将浮点数存储在 [-1, 1] 范围内的优点是,将两个样本相乘总是在 [-1, 1] 的相同范围内……

因此,要回答您的问题,您只需更改打开 PyAudio 流的格式。目前,您使用format=pyaudio.paInt16。尝试更改它pyaudio.paFloat32,您应该会获得与您的 iOS 实现相同的数据。

【讨论】:

非常感谢。这解决了我的问题。作为补充,我不得不在 wave.struct.unpack 中使用 'f' 而不是 'h'。 如果可能的话,你能再澄清一个疑问吗?要将这些 float32 值转换为 db,我只需 10*log10(sample) 每个值?这是有效的吗?我想对这些样本进行 fft,对数刻度会非常有利于我。 如果您的样品在无符号浮动刻度上,这将起作用。否则,您将不得不缩放您的样本。最大样本值应为您提供 0dB,最小样本值应为 -inf dB。只需找到 ab 以便 "a * min_sample_value + b = 0" 和 "a * max_sample_value + b = 1"

以上是关于iOS音频问题通用配置的主要内容,如果未能解决你的问题,请参考以下文章

iOS 音频会议研究

在 iOS Safari 中播放音频时如何设置缩略图?

如何找到两个不同音频样本之间的比例?

iOS:啥是音频单元? [关闭]

如何在 iOS 5 上以编程方式规范化 PCM 音频样本?

iOS HSP 关闭音频输出