代码之家  ›  专栏  ›  技术社区  ›  Gilad Novik

音频队列和iOS4?

  •  0
  • Gilad Novik  · 技术社区  · 14 年前

    下面的代码过去曾为我工作。我现在用iOS4试试,运气不好。它在模拟器中工作,但我没有听到设备本身的任何声音。我首先试着把一些样本记录到 NSMutableData

    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; 
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    AudioSessionSetActive(true);
    
    AudioQueueNewOutput(&m_format,&OutputCallback,self,CFRunLoopGetCurrent(), kCFRunLoopCommonModes,0,&m_device);   
    AudioQueueBufferRef nBuffer=NULL;
    AudioQueueAllocateBuffer(m_device,[data length],&nBuffer);
    nBuffer->mAudioDataByteSize=[data length];
    [data getBytes:(nBuffer->mAudioData) length:(nBuffer->mAudioDataByteSize)];
    AudioQueueEnqueueBuffer(m_device,nBuffer,0,NULL);
    AudioQueueStart(m_device,NULL);
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   Daniel    12 年前

    我可以提出的主要建议是:

    (1) 确保设备未静音且音量已调高

    (2) 检查结果代码。例如:

    OSStatus errorCode = AudioQueueNewOutput (...) ;
    
    if ( errorCode ) NSLog ( @"Error: %u" , errorCode ) ;
    

    当它应该运行时,试着调整音量。如果它调整了振铃器音量,说明AudioQueue未正确播放和/或设置。如果它调整了播放音量,那么AudioQueue在请求数据时可能无法获取数据。

    作为记录,我有一个应用程序在所有设备上使用ios4上的AudioQueue,所以我知道它可以工作,而且不是bug。

    坚持下去:音频队列有时会非常非常烦人。