【问题标题】:Play Alert Sound (Vibrate) While AudioQueue is Recording在 AudioQueue 录制时播放警报声音(振动)
【发布时间】:2009-07-25 23:43:30
【问题描述】:

好像不能播放提示音

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

在使用 AudioQueue 录制音频时。那是对的吗?也许我做错了什么。除了暂停录制,还有其他方法吗?

TIA。

【问题讨论】:

  • 我很好奇振动是否会在录音中显示为声音。

标签: iphone objective-c cocoa-touch audio


【解决方案1】:

通过阅读 Apple 的开发者论坛,一些开发者声称这是一个已提交的错误。如果您将会话类型设置为 kAudioSessionCategory_PlayAndRecord 它应该可以工作.. 但没有。

【讨论】:

  • 如果您引用您所指的论坛帖子,我会将这个奖励给您。
【解决方案2】:

我尝试了 sehugg 的建议,但没有运气?你是这样主动的吗?

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
AudioSessionSetProperty (kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];

【讨论】:

    【解决方案3】:

    试试这个:

    UInt32 category = kAudioSessionCategory_PlayAndRecord; 
    status |= AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
    UInt32 allowMixing = true;
    status |= AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers,   // 1
                                      sizeof(allowMixing),                                   // 2
                                      &allowMixing);                                         // 3
    status |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck,    // 1
                                      sizeof(allowMixing),                                  // 2
                                      &allowMixing);                                        // 3
    

    最后两个 AudioSessionSetProperty 调用是 3.0 操作系统中的新调用。这些使我能够在录制过程中播放声音和振动。

    【讨论】:

      【解决方案4】:

      只是一个疯狂的猜测,但您的音频会话是否设置为 kAudioSessionCategory_PlayAndRecord

      【讨论】:

      • 好的。所以我在AudioQueue初始化代码中添加了这个: UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);但我仍然有同样的问题,例如playalertsound 不会导致设备在录制时振动。还有其他想法吗?谢谢。
      • 我只需要振动。不是声音
      【解决方案5】:

      声音真的很安静,因为当您激活 VAudioSessionCategoryPlayAndRecord 时,SDK 会通过听筒扬声器传送声音。这大概是为了防止录音中的反馈。在 PlayAndRecord 模式下,您必须手动覆盖音频路由才能再次将输出发送到扬声器。像这样的:

      UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
      AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, 
                                         sizeof(UInt32), &audioRouteOverride);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多