Tag: audio

在RemoteIOaudio单元回放callback中的AudioBufferList内容

我想在截取iOS设备的扬声器的过程中“截取”audio数据。 我相信这可以使用remoteIOaudio单元和callback来完成。 在下面的playbackCallback中,ioData实际上是否包含任何audio数据? static OSStatus playbackCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { … } 我很困惑,因为有关ioData的日志信息似乎意味着它包含audio数据… // if (ioData->mNumberBuffers > 0) AudioBuffer buffer = ioData->mBuffers[0]; NSLog(@"buffer.mNumberChannels: %ld", buffer.mNumberChannels); // prints 2 NSLog(@"buffer.mDataByteSize : %ld", buffer.mDataByteSize); // prints 4096 但是,从ioData的内容创build一个CMSampleBufferRef并使用AVAssetWriter将其写入CoreAudioFile会生成一个静默文件。 输出文件的长度似乎很好(几秒钟),但在Audacity中打开文件显示了一个扁平线。 在阅读大量的SOpost并试验了很多remoteIOaudio单元示例代码之后,我开始怀疑上面的ioData是否包含应该在playbackCallback中填充的预大小但空的缓冲区。

什么是AudioStreamBasicDescription为m4a文件格式

我已经尝试用更多的AudioStreamBasicDescription为m4a文件格式。 我仍然遇到一些问题。 请任何人告诉我确切的AudioStreamBasicDescription为m4a文件格式。

任何方式来控制AVSpeechSynthesizer输出到哪个audio通道?

我想使用AVSpeechSynthesizer只在一个多声道环绕声设置的一个audio通道上输出声音。 例如,在5.1系统中,我希望它只在右环绕声道上输出。 现在我有: let synthesizer = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: "This is the right channel") synthesizer.speakUtterance(utterance) …然而它在左右声道都输出。

将AudioBufferList转换为CMSampleBuffer会产生意外的结果

我试图将我从一个audio单元获得的AudioBufferList转换成一个CMSampleBuffer ,我可以传入一个AVAssetWriter来保存麦克风的audio。 这种转换的工作原理在于,我正在进行转换的调用不会失败,但是录制最终会失败,并且我在日志中看到一些输出,这似乎是令人担忧的。 我正在使用的代码如下所示: – (void)handleAudioSamples:(AudioBufferList*)samples numSamples:(UInt32)numSamples hostTime:(UInt64)hostTime { // Create a CMSampleBufferRef from the list of samples, which we'll own AudioStreamBasicDescription monoStreamFormat; memset(&monoStreamFormat, 0, sizeof(monoStreamFormat)); monoStreamFormat.mSampleRate = 48000; monoStreamFormat.mFormatID = kAudioFormatLinearPCM; monoStreamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonInterleaved; monoStreamFormat.mBytesPerPacket = 2; monoStreamFormat.mFramesPerPacket = 1; monoStreamFormat.mBytesPerFrame = 2; monoStreamFormat.mChannelsPerFrame = 1; monoStreamFormat.mBitsPerChannel = […]

使用单声道input和立体声输出设置audio单元iOS

我正在尝试设置一个具有单声道input和立体声输出的audio单元。 打算通过左声道输出播放正弦波音,并通过右声道周期性地输出不同的符号波。 我收到错误, 'NSInternalInconsistencyException', reason: ' Error initialing unit: -50; 当我尝试在这里初始化我的audio单元时, // Initialize audio unit OSErr err = AudioUnitInitialize(self.ioUnit); NSAssert1(err == noErr, @"Error initializing unit: %hd", err); 我相信这与我如何设置audio设备有关, // Audio component description AudioComponentDescription desc; desc.componentType = kAudioUnitType_Output; desc.componentSubType = kAudioUnitSubType_RemoteIO; desc.componentManufacturer = kAudioUnitManufacturer_Apple; desc.componentFlags = 0; desc.componentFlagsMask = 0; // Get component AudioComponent inputComponent = […]

iOS版。 用USB麦克风以96kHzlogging

我正试图用我的RØDEiXY USB麦克风以全频率录制。 录制过程没有错误,当我连接麦克风启动应用程序时,我发现AVAudioSession以96kHz采样率成功运行。 但是如果我看一下这个频谱,很明显除了20kHz以上的重采样噪声外, 为了便于比较,这是使用与USB麦克风(RØDERec)捆绑在一起的应用程序logging的相同频谱: 还有什么我必须做的logging在本机96kHz? 或者,也许RØDERec应用程序通过USB与一些专有协议的麦克风进行通信,我在这里运气不好? 我包含了我使用的源代码: static AudioStreamBasicDescription AudioDescription24BitStereo96000 = (AudioStreamBasicDescription) { .mFormatID = kAudioFormatLinearPCM, .mFormatFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger, .mChannelsPerFrame = 2, .mBytesPerPacket = 6, .mFramesPerPacket = 1, .mBytesPerFrame = 6, .mBitsPerChannel = 24, .mSampleRate = 96000.0 }; – (void)setupAudioSession { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryRecord error:&error]; [session setActive:YES error:&error]; […]

检测连接的audio设备的iOS

我试图找出如何检测如果任何audio设备连接在iphone / ipad / ipod上。 我知道所有有关audio路由调用和路由更改callback,但这些都不告诉我什么附加的东西。 他们只报告audio当前路由的位置。 我需要知道,例如,如果耳机和/或蓝牙仍然连接,而audio通过扬声器路由。 或者,例如,如果用户在使用蓝牙时插入耳机,然后决定断开蓝牙,则需要知道即使audio仍然通过耳机路由,蓝牙也是断开的。

同时播放两个AVPlayeraudio文件时出现audio故障

我有一个iOS应用程序,用一个AVPlayer播放背景音轨,并用另一个AVPlayer播放其他声音片段。 (声音剪辑是从互联网stream传输的,因此需要AVPlayer。)问题是,当第二个AVPlayer开始播放时,它会导致后台AVPlayer停止几分之一秒,类似于此评论中所描述的内容: 用AVPlayer播放多个audio文件 我正在准备这个方法的audio剪辑: – (void)prepareAudio:(NSURL *)assetURL { asset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; playerItem = [AVPlayerItem playerItemWithAsset:asset]; [player replaceCurrentItemWithPlayerItem:playerItem]; [playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; [playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemFailedToReachEnd:) name:AVPlayerItemFailedToPlayToEndTimeNotification object:[player currentItem]]; } …然后调用[player play]; 当我想听到每个声音。 当我设置AVPlayer的audio会话或每个实例时,是否有需要做的事情,以便声音混合没有毛刺?

audio – 向前跳30秒

我有一个audio播放器播放从核心date检索的audio。 播放和暂停工作正常。 我试图实现一个“跳转30秒”button,并寻求任何指针,我将如何去做。 代码为我的“播放/暂停”button @IBAction func playPressed(sender: AnyObject) { let play = UIImage(named: "play") let pause = UIImage(named: "pause") if audioPlayer.playing { pauseAudioPlayer() audioPlayer.playing ? "\(playButton.setImage( pause, forState: UIControlState.Normal))" : "\(playButton.setImage(play , forState: UIControlState.Normal))" }else{ playAudio() audioPlayer.playing ? "\(playButton.setImage( pause, forState: UIControlState.Normal))" : "\(playButton.setImage(play , forState: UIControlState.Normal))" } }

MPAVController >>没有足够的缓冲跟上

我正在使用此代码播放video。 player= [[ MPMoviePlayerViewController alloc] initWithContentURL:movieURL]; player.navigationController.navigationBar.hidden = YES; player.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; player.moviePlayer.controlStyle = MPMovieControlStyleNone; player.moviePlayer.movieSourceType = MPMovieSourceTypeFile; player.moviePlayer.fullscreen = NO; [self presentModalViewController:player animated:NO]; video播放工作完美但问题是,完成后,我得到这个结果在控制台。 [MPAVController] Autoplay: Likely to keep up or full buffer: 0 [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 然后在我试图logging声音但无法录音。 任何人都可以帮我解决这个问题。