Sound

디바이스의 음원 파일 재생을 위한 규격

Version

최신 버전은 1.0 입니다.

Version Date Description
1.0 2020.04.01 규격 추가

SDK Interface

SoundAgent 사용

Sound interface 규격에 따른 디바이스의 동작 제어는 SoundAgent 가 처리합니다.

  • Android
  • iOS
  • Linux

NuguAndroidClient instance 를 통해 SoundAgent instance 에 접근할 수 있습니다.

복사성공!
1
val soundAgent = nuguAndroidClient.getAgent(DefaultSoundAgent.NAMESPACE)

NuguAndroidClient 생성시 SoundProvider 를 추가합니다.

복사성공!
1
2
3
4
5
class MySoundProvider: SoundProvider {
    ...
}
NuguAndroidClient.Builder(...)
    .enableSound(MySoundProvider())

NuguClient instance 를 통해 SoundAgent instance 에 접근할 수 있습니다.

복사성공!
1
let soundAgent = nuguClient.soundAgent

CapabilityFactory::makeCapability 함수로 SoundAgent 를 생성하고 NuguClient 에 추가해 주어야합니다.

복사성공!
1
2
3
4
5
6
auto sound_handler(std::shared_ptr<ISoundHandler>(
        CapabilityFactory::makeCapability<SoundAgent, ISoundHandler>()));

nugu_client->getCapabilityBuilder()
    ->add(sound_handler.get())
    ->construct();

재생

디바이스 음원 재생이 Beep directive 로 요청될 수 있습니다.

  • Android
  • iOS
  • Linux

SoundProvider 를 구현합니다.

복사성공!
1
2
3
4
5
6
7
8
class MySoundProvider: SoundProvider {
    override fun getContentUri(name: SoundProvider.BeepName): URI {
        return URI.create(
            Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.packageName + "/" + R.raw.responsefa
                .toString()
        );
    }
}

SoundAgentDelegate 를 추가합니다.

복사성공!
1
2
3
4
5
6
class MySoundAgentDelegate: SoundAgentDelegate {
    func soundAgentDidChange(state: SoundState, dialogRequestId: String) {
        ...
    }
}
soundAgent.delegate = MySoundAgentDelegate()

ISoundListener 를 추가합니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
class MySoundListener : public ISoundListener {
public:
    ...

    void handleBeep(BeepType beep_type) override
    {
        ...
    }
};
auto sound_listener(std::make_shared<MySoundListener>());
CapabilityFactory::makeCapability<SoundAgent, ISoundHandler>(sound_listener.get());

Context

복사성공!
1
2
3
4
5
{
  "Sound": {
    "version": "1.0"
  }
}

Directives

Beep

Beep 유형의 음원 재생 요청입니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "header": {
    "namespace": "Sound",
    "name": "Beep",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.0"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "beepName": "{{STRING}}"
  }
}
parameter type mandatory description
beepName string Y RESPONSE_FAIL: Play 응답 실패

Event

BeepSucceeded

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
{
  "header": {
    "namespace": "Sound",
    "name": "BeepSucceeded",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.0"
  },
  "payload": {
    "playServiceId": "{{STRING}}"
  }
}

BeepFailed

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
{
  "header": {
    "namespace": "Sound",
    "name": "BeepFailed",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.0"
  },
  "payload": {
    "playServiceId": "{{STRING}}"
  }
}