Помощь с функцией Audio Services - PullRequest
1 голос
/ 11 апреля 2009

Это объявление, сопровождающее функцию Audio Services AudioServicesSetProperty. Это немного над моей головой. Может кто-нибудь дать мне пример того, как на самом деле использовать это. Спасибо.

AudioServicesSetProperty Устанавливает значение для указанного звука системы Услуги собственности.

OSStatus AudioServicesSetProperty (
AudioServicesPropertyID inPropertyID, UInt32 inSpecifierSize, const void * inSpecifier, UInt32 inPropertyDataSize, const void * inPropertyData);

Параметры:

inPropertyID: свойство, значение которого Вы хотите установить.

inSpecifierSize: размер буфера на который указывает inSpecifier параметр. Передайте 0, если нет спецификатора требуется буфер.

inSpecifier: указатель на спецификатор буфер, если такой буфер требуется на имущество, о котором вы хотите Информация. Передайте NULL, если нет спецификатора требуется.

inPropertyDataSize: размер в байтах, буфера, на который указывает Параметр outPropertyData.

inPropertyData: значение свойства, которое вы хочу установить.

1 Ответ

6 голосов
/ 11 апреля 2009

Если вы воспроизводите короткий системный звук (короче 30 секунд) с использованием механизма системных звуковых служб (код будет выглядеть примерно так)

#include <AudioToolbox/AudioToolbox.h>

    SystemSoundID aSoundID;

/* Setup */
    SystemSoundID aSoundID;
    OSStatus error = 
             AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &aSoundID);
    if (error == kAudioServicesNoError) { // success
        _soundID = aSoundID;
    }

/* Play */
    AudioServicesPlaySystemSound(aSoundID);

/* Dispose */
    AudioServicesDisposeSystemSoundID(aSoundID);

Вы можете использовать AudioServicesSetProperty , чтобы установить два свойства с помощью этой функции.

Это: kAudioServicesPropertyIsUISound = 'isui', kAudioServicesPropertyCompletePlaybackIfAppDies = 'ifdi'

kAudioServicesPropertyIsUISound , если для него установлено значение 1, это означает, что для аудиофайла, указанного системным звуком, переданным в параметре inSpecifier, сервер системных звуковых сигналов учитывает пользовательские настройки в предпочтении «Звуковые эффекты» и является беззвучный, когда пользователь отключает звуковые эффекты.

Это свойство по умолчанию установлено в 1. Установите значение 0, чтобы системный звук всегда воспроизводился при передаче в AudioServicesPlaySystemSound, независимо от настроек пользователя в настройках звука.

kAudioServicesPropertyCompletePlaybackIfAppDies , если установлено значение 1, означает, что аудиофайл, указанный системным звуком, переданным в параметре inSpecifier, должен завершить воспроизведение, даже если клиентское приложение завершается. Это может произойти, например, если пользователь выходит или приложение неожиданно завершает работу во время воспроизведения звука. Значение по умолчанию - 0. То есть вы должны явно установить значение этого свойства в 1, если хотите, чтобы звук завершался, даже если приложение завершает работу.

РЕДАКТИРОВАТЬ: После перечитывания вашего вопроса, может показаться, что это может быть больше "Как установить свойство", чем "Что делает эта вещь" В этом случае, следующее будет более полезным :

Предполагая, что вы настроили звук, как я указал выше, вы можете настроить этот конкретный объект SystemSoundID так, чтобы он игнорировал настройку «без звука» на боковой панели телефона, выполнив следующие действия:

UInt32 flag = 0;
err = AudioServicesSetProperty(kAudioServicesPropertyIsUISound,
                               sizeof(UInt32),
                               &aSoundID,
                               sizeof(UInt32),
                               &flag);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...