【问题标题】:Recording output audio with Swift使用 Swift 录制输出音频
【发布时间】:2015-03-05 20:43:02
【问题描述】:

是否可以使用 Swift 在应用程序中录制 输出 音频?因此,例如,假设我正在收听播客,并且我想在单独的应用程序中录制播客音频的一小段。有什么办法吗?

我环顾四周,但只能找到有关录制麦克风录音等的信息。

【问题讨论】:

  • 没有。你不能。出于与隐私和权利管理有关的显而易见的原因。
  • @marko 交谈时,最好了解一个人在说什么。
  • OP 似乎想截取iOS 中另一个应用程序 的输出音频以进行录制。此外,这意味着源材料不可用,因为您显然会以这种方式获得它,如果是这样的话。这个问题经常被仙女问到,答案不变,也不太可能。如果可能的话,它将允许应用程序恶意录制来自电话(或 VOIP)通话的音频,并允许付费内容的数字音频以出版商不希望的方式使用。跨度>
  • @marko 这就是为什么我的回答(您的评论反驳没有增加任何建设性)解释了我认为可能的原因。我在窃听自己的音频和劫持任意声音输出之间做出了鲜明的区分,后者是不可能的。但它的不可能性与“隐私和权限管理”无关;这与没有办法做到这一点有关。

标签: ios audio swift


【解决方案1】:

这取决于您制作音频的方式。如果音频的制作在您的控制范围内,您可以在输出上放一个 tap 并在播放时录制到文件中。最简单的方法是使用新的 AVAudioEngine 功能(还有其他方法,但 AVAudioEngine 对它们来说基本上是一个简单的前端)。

当然,如果真正的问题是复制播客,那么显然您所要做的就是下载播客,而不是收听 .同样,您可以缓冲流式音频并将其保存到文件中。有很多应用程序可以做到这一点。但这并不是因为设备的输出被劫持了;再次,因为我们可以控制声音数据本身

【讨论】:

  • 好的,所以如果我想捕获“外部”播客的音频片段(我还没有完整副本),我似乎有两个选择:1)从源头缓冲它并在某个点记录;或者 2) 完全下载它——此时我可以访问声音数据,正如你所说的——然后,由于我控制了数据,我可以记录它的一部分。听起来对吗?
  • (1) 听起来不错,因为这一定是记录无线电流的应用程序实际在做的事情。至于(2),如果你完全下载了,你就不需要录制一段了;下载录音。
  • 可能记录流的应用程序正在使用音频队列服务或类似的核心音频位。
  • 啊,对...在 (2) 中,我想我可以以某种方式从完整下载中提取剪辑。
  • 当然,就像从任何音频或视频文件中提取剪辑一样容易。
【解决方案2】:

我相信你必须编写一个内核扩展来做到这一点

https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIOKit/iokit_tutorial.html

您必须制作自己的音频驱动程序才能录制它

好像

这就是softonic制作soundflowerbed的方法。

http://features.en.softonic.com/how-to-record-internal-sound-on-a-mac

【讨论】:

  • 1st:Soundflower/SoundflowerBed 与 Softonic 无关,他们只是重新分发它。它是由 Matt Ingalls 创建的。
  • 第二:SoundflowerBed 只是一个音频重定向器,Soundflower 是内核扩展。
猜你喜欢
  • 2014-12-15
  • 2013-07-14
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多