Tag: audio

来自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: […]

AVCaptureSession取消背景audio

每当我开始一个运行麦克风的AVCaptureSession作为input时,它将取消当前正在运行的任何背景音乐(例如iPod音乐)。 如果我将添加audioinput的行注释掉,背景audio会继续。 有谁知道用麦克风录制video剪辑的方法,同时继续播放背景audio? 我查了很多,似乎无法find任何引用此行为。 谢谢你的帮助!

ExtAudioFileWrite m4a / aac在双核设备(ipad 2,iphone 4s)上失败

我写了一个循环来编码由我的应用程序生成的PCMaudio数据使用扩展audio文件服务的AAC。 编码发生在后台线程同步,而不是实时。 这个编码在ipad 1和iphone 3gs / 4上完全适用于ios 4和5.但是,对于双核设备(iphone 4s,ipad 2),第三次调用ExtAudioFileWrite会导致编码线程崩溃,没有堆栈跟踪,也没有错误代码。 这是有问题的代码: 数据格式 AudioStreamBasicDescription AUCanonicalASBD(Float64 sampleRate, UInt32 channel){ AudioStreamBasicDescription audioFormat; audioFormat.mSampleRate = sampleRate; audioFormat.mFormatID = kAudioFormatLinearPCM; audioFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical; audioFormat.mChannelsPerFrame = channel; audioFormat.mBytesPerPacket = sizeof(AudioUnitSampleType); audioFormat.mBytesPerFrame = sizeof(AudioUnitSampleType); audioFormat.mFramesPerPacket = 1; audioFormat.mBitsPerChannel = 8 * sizeof(AudioUnitSampleType); audioFormat.mReserved = 0; return audioFormat; } AudioStreamBasicDescription MixdownAAC(void){ AudioStreamBasicDescription audioFormat; […]

将我的应用程序生成的所有声音录制在audio文件中(而不是从麦克风)

我有一个像一个乐器的屏幕。 有播放声音文件的button。 我想logging用户在单个audio文件中按下button播放的声音,以便我可以将该文件保存为mp4或其他audio格式。 你能指导我如何以简单的方式来实现这一点? 我可以用AVAudioRecorder录制麦克风 正如我所想,录音方法使用麦克风作为来源,但我希望它使用我的应用程序的“audio输出”等同于作为来源。

在后台iOS应用中播放audio

我有一个应用程序主要基于核心蓝牙。 当某些具体事情发生时,应用程序被唤醒使用核心蓝牙背景模式,它会发出警报,但是当应用程序不在前台时,我无法使警报工作。 我有一个Alarm Singleton类,它初始化AVAudioPlayer像这样: NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:soundName ofType:@"caf"]]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [self.player prepareToPlay]; self.player.numberOfLoops = -1; [self.player setVolume:1.0]; NSLog(@"%@", self.player); 这是调用我的闹钟代码时调用的方法: -(void)startAlert { NSLog(@"%s", __FUNCTION__); playing = YES; [self.player play]; NSLog(@"%i", self.player.playing); if (vibrate) { [self vibratePattern]; } […]

尽pipeprepareToPlay()在Swift中AVAudioPlayer产生滞后

播放一个非常短的声音(〜0.5s)会在Swift中编写的SpriteKit iOS游戏中产生一个呃逆(就像一个延迟)。 在其他问题中,我读了我应该prepareToPlay()声音,我做了。 我甚至用一个variables( soundReady )来检查在播放之前是否准备好声音。 每当播放完成时,我也会重新准备声音( audioPlayerDidFinishPlaying() )。 以下是代码的相关部分: class GameScene: SKScene, AVAudioPlayerDelegate { var splashSound = NSURL() var audioPlayer = AVAudioPlayer() var soundReady = false override func didMoveToView(view: SKView) { let path = NSBundle.mainBundle().pathForResource("plopSound", ofType: "m4a") splashSound = NSURL(fileURLWithPath: path) audioPlayer = AVAudioPlayer(contentsOfURL: splashSound, error: nil) audioPlayer.delegate = self soundReady = audioPlayer.prepareToPlay() } […]

Phonegap混合audio文件

我使用Phonegap为Ios构build了一个卡拉OK应用程序。 我可以使用media.play()函数播放www / assets文件夹中的audio文件 这允许用户收听背景音轨。 而媒体正在播放另一媒体实例正在录制。 一旦录音结束,我需要把录音文件放在背景音轨上,我不知道如何去做这件事。 我认为可能的一种方法是使用WEb Audio API – 我从HTML5 Rocks获取了以下代码,将两个文件加载到AudioContext中,并允许我同时播放这两个文件。 但是,我想要做的是将两个缓冲区写入一个.wav文件。 有什么办法可以将source1和source2合并成一个新的文件? var context; var bufferLoader; function init() { // Fix up prefixing window.AudioContext = window.AudioContext || window.webkitAudioContext; context = new AudioContext(); bufferLoader = new BufferLoader( context, [ 'backingTrack.wav', 'voice.wav', ], finishedLoading ); bufferLoader.load(); } function finishedLoading(bufferList) { // Create two sources […]

audio播放器在后台播放,应使用硬件静音开关

我想在前台,后台播放audio文件,并且应该使用静音开关,即静音开关打开时不应该播放,如果静音开关closures,应该播放audio。 **基本上正在开发SIP通话应用程序。 应用程序应该在用户接听电话时播放声音/铃声。 如果应用程序在后台/前台应该播放,如果硬件静音开关打开/closures,它应该静音/取消静音。 为此我用AVPlyaer用下面的代码。 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:&error]; [session setActive:YES error:nil]; NSURL * audioFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test1" ofType:@"mp3"]]; AVPlayer *player = [[AVPlayer alloc] initWithURL: audioFileUrl]; [player play]; 另外,我还在info.plist中添加了“应用程序播放audio或使用AirPlay播放audio/video”的背景模式 硬件静音开关打开时,这两种模式都是播放,但不是静音。 如果我使用“AVAudioSessionCategoryAmbient”不在背景模式下播放。 我使用AVAudioPlayer,但硬开关打开时无法find静音 请帮我解决它或任何其他方式来实现这一点。 提前致谢。

iOS:如何将audio文件读入浮动缓冲区

我有一个非常短的audio文件,比如说.PCM格式 我想要使​​用RemoteIO重复循环文件以产生连续的音乐音调。 那么我怎么把这个读入一个浮点数组呢? 编辑:虽然我可能挖出的文件格式,提取到NSData的文件,并手动处理,我猜是有一个更合理的通用方法…(即应付不同的格式)

iOS同时向多个蓝牙设备播放audio

我有一些蓝牙扬声器(类似的) ,并且真的很想能够同时播放其中的一个以上,但是我找不到一个办法。 我可以部署我自己的应用程序,所以它不一定要通过公共API来完成,但iPhone硬件是否支持它?