Tag: avaudioengine

使用AVAudioEngine将AVAudioInputNode连接到AVAudioUnitEffect

我想通过audio单元效果( AVAudioUnitEffect )处理来自设备内置麦克风( AVAudioInputNode )的audio。 对于我的例子,我正在使用AVAudioUnitReverb 。 连接AVAudioUnitReverb导致应用程序崩溃。 import UIKit import AVFoundation class ViewController: UIViewController { let audioEngine = AVAudioEngine() let unitReverb = AVAudioUnitReverb() var inputNode: AVAudioInputNode! override func viewDidLoad() { super.viewDidLoad() inputNode = audioEngine.inputNode audioEngine.attachNode(unitReverb) let inputFormat = inputNode.inputFormatForBus(0) audioEngine.connect(inputNode, to: unitReverb, format: inputFormat) // This line is crashing the application! // With this […]

iOS 9检测静默模式

我一直在寻找很长一段时间,我很确定我现在不能达到我想要做的。 放弃之前,我在这里张贴作为最后的尝试。 我试图实现的是检测我目前是否处于静音模式或不在我的应用程序。 事情是,我find了一个解决方法(玩假声和检查完成),工作正常,但不是当我在AVAudioSessionCategoryPlayAndRecord模式。 这正是我可以录制audio和video的屏幕,我想要知道我是否应该播放UI声音。 综上所述,我试图在AVAudioSessionCategoryPlayAndRecord模式下find一种检测静音模式的方法。 感谢您的时间! 萨科

AVAudioEngine寻找歌曲的时间

我正在使用AVAudioPlayerNode播放歌曲,我试图用UISlider来控制它的时间,但我无法弄清楚如何使用AVAUdioEngine寻找时间。

我如何指定AVAudioEngine Mic-Input的格式?

我想用AVAudioEngine和用户麦克风录制一些audio。 我已经有一个工作示例,但只是无法弄清楚如何指定我想要的输出格式… 我的要求是,我需要AVAudioPCMBuffer因为我现在正在说话… 我需要添加一个单独的节点,做一些转码? 我找不到有关这个问题的很多文档/样本。 而Audio-Stuff也是一个小菜鸟。 我知道我希望NSData包含PCM-16bit最高采样率16000(8000会更好) 这是我的工作示例: private var audioEngine = AVAudioEngine() func startRecording() { let format = audioEngine.inputNode!.inputFormatForBus(bus) audioEngine.inputNode!.installTapOnBus(bus, bufferSize: 1024, format: format) { (buffer: AVAudioPCMBuffer, time:AVAudioTime) -> Void in let audioFormat = PCMBuffer.format print("\(audioFormat)") } audioEngine.prepare() do { try audioEngine.start() } catch { /* Imagine some super awesome error handling here */ […]

用AVAudioEngine从AVAudioPCMBuffer播放audio

我有两个类, MicrophoneHandler和AudioPlayer 。 我设法使用AVCaptureSession在这里使用批准的答案来挖掘麦克风数据,并使用此函数将CMSampleBuffer转换为NSData : func sendDataToDelegate(buffer: CMSampleBuffer!) { let block = CMSampleBufferGetDataBuffer(buffer) var length = 0 var data: UnsafeMutablePointer<Int8> = nil var status = CMBlockBufferGetDataPointer(block!, 0, nil, &length, &data) // TODO: check for errors let result = NSData(bytesNoCopy: data, length: length, freeWhenDone: false) self.delegate.handleBuffer(result) } 现在,我想通过将上面生成的NSData转换为AVAudioPCMBuffer并使用AVAudioEngine来播放audio。 我的AudioPlayer类如下所示: var engine: AVAudioEngine! var playerNode: AVAudioPlayerNode! var […]

从AVAudioEngine的networkingstream数据,这有可能吗?

我有一个应用程序,我使用AVAudioEngine从本地文件系统通过使用AVAudioPlayerNodes和AVAudioFiles播放文件。 这工作得很好。 现在我想让我的设置也支持来自互联网上的服务器的MP3文件的stream式传输。 到目前为止,我已经尝试过 我的希望是,我可以从NSURL对象创build一些指向networking地址的缓冲区,然后我可以使用我的AVAudioPlayerNode 。 我一般search堆栈溢出和互联网 ,但没有发现如何实现这一点的好build议。 我知道AVAudioEngine阵容包括: AVAudioPlayerNode ,它可以播放来自AVAudioFile或AVAudioBufferaudio。 我已经使用AVAudioFile作为我的“本地文件设置”了。 AVAudioFile ,这是用于本地文件。 'AVAudioFile'是用'NSURL'创build的,所以我尝试了一个指向服务器上的MP3文件的URL,就像在Playground中一样: var fileError: NSError? = nil let file = AVAudioFile(forReading: someURL, error: &fileError) if fileError != nil { fileError } 这奖励我这个错误: Error Domain=com.apple.coreaudio.avfaudio Code=2003334207 "The operation couldn't be completed. (com.apple.coreaudio.avfaudio error 2003334207.)" UserInfo=0x7fbfab424480 {failed call=ExtAudioFileOpenURL((CFURLRef)fileURL, &_extAudioFile)} AVAudioPCMBuffer ,这是我希望使用的类,但我找不到任何方式来实例化它的数据。 我的问题(只是为了说清楚:-)) 你们有没有人知道如何使用AVAudioEngine从互联网上的服务器stream式传输MP3文件? 还是应该放弃使用AVPlayer呢? […]

来自AVAudioPCMBuffer的Spectrogram在Swift中使用Accelerate框架

我试图在Swift中从AVAudioPCMBuffer生成一个光谱图。 我在AVAudioMixerNode上安装一个tap,并用audio缓冲区接收一个callback。 我想将缓冲区中的信号转换为[Float:Float]字典,其中键表示频率,值表示相应频率上的audio大小。 我尝试使用苹果的加速框架,但我得到的结果似乎可疑。 我相信这只是我转换信号的方式。 我看了这篇博客文章以供参考。 这是我有什么: self.audioEngine.mainMixerNode.installTapOnBus(0, bufferSize: 1024, format: nil, block: { buffer, when in let bufferSize: Int = Int(buffer.frameLength) // Set up the transform let log2n = UInt(round(log2(Double(bufferSize)))) let fftSetup = vDSP_create_fftsetup(log2n, Int32(kFFTRadix2)) // Create the complex split value to hold the output of the transform var realp = [Float](count: bufferSize/2, repeatedValue: […]

我可以使用AVAudioEngine从文件中读取,处理audio单元并写入文件,比实时更快吗?

我正在使用一个iOS应用程序,使用AVAudioEngine来处理各种事情,包括将audiologging到文件,使用audio单元对该audio应用效果以及播放应用了效果的audio。 我使用一个水龙头也写输出到一个文件。 当这完成后,它会在audio播放时实时写入文件。 是否可以设置一个AVAudioEnginegraphics来读取文件,用audio单元处理声音,然后输出到文件,但比实时更快(即,硬件可以像处理它一样快)? 这个用例应该是输出几分钟的音效,而且我肯定不会等待几分钟才能处理。 编辑:这里是我用来设置AVAudioEngine的graphics,并播放声音文件的代码: AVAudioEngine* engine = [[AVAudioEngine alloc] init]; AVAudioPlayerNode* player = [[AVAudioPlayerNode alloc] init]; [engine attachNode:player]; self.player = player; self.engine = engine; if (!self.distortionEffect) { self.distortionEffect = [[AVAudioUnitDistortion alloc] init]; [self.engine attachNode:self.distortionEffect]; [self.engine connect:self.player to:self.distortionEffect format:[self.distortionEffect outputFormatForBus:0]]; AVAudioMixerNode* mixer = [self.engine mainMixerNode]; [self.engine connect:self.distortionEffect to:mixer format:[mixer outputFormatForBus:0]]; } [self.distortionEffect loadFactoryPreset:AVAudioUnitDistortionPresetDrumsBitBrush]; NSError* […]