Files

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.. _chat_music_sample:

音乐播放
######################

概述
****
该示例程序介绍如何通过闲聊会话来使用云端音乐服务

.. toctree::
   :hidden:

   ../../sample_build

.. include:: ../../sample_build.rst

调用方法
********
- 初始化lsc服务并设置设备ID、产品ID、secret ID

  .. code-block:: c

        lsc_config_t cfg = {
            .device_id = DEVICE_ID_STRING,
            .product_id = PRODUCT_ID_STRING,
            .secret_id = SECRET_ID_STRING,
        };        
        lsc_init(lsc_config_t *cfg);

- 注册lsc事件回调函数发起连接并通过回调函数获取连接结果

  .. code-block:: c

        static void lsc_event_cb(lsc_event_e evt, void *data, uint32_t size, void *usr)
        {
            //获取事件
        }

        lsc_add_callback(LSC_CONNECTED | LSC_DISCONNECTED | LSC_CLOUD_AUTH_FAILD | LSC_GOT_TOKEN, lsc_event_cb, NULL);
        lsc_connect();

- 激活云端音乐技能

  .. code-block:: c

      lsc_activate_music();

- 初始化闲聊会话

  .. code-block:: c

      session_voice_init()

- 注册回调函数,云端返回的结果会以事件的形式下发

  .. code-block:: c

      static void voice_event_cb(session_voice_event_e evt, void *data, uint32_t size, void *usr)
      {
          //获取事件
      }
      session_voice_add_evt_callback(voice_event_cb, SESSION_VOICE_TTS | SESSION_VOICE_IAT | SESSION_VOICE_REPLY_URL | SESSION_VOICE_DRAW | SESSION_VOICE_MUSIC_INSTR | SESSION_VOICE_MUSIC_INSTR, NULL);

- 设置会话参数使能云端vad功能并配置设备ID

  .. code-block:: c

      session_voice_config_t config = {
      .vad_enable = true,
      .device_id = "F97CE114C70DE8E2",
      .speex_size = 0,
      .aue = "raw",
    };
    session_voice_set_config(&config);

- 启动会话,并上传语音数据

  .. note:: play_music_inc_file[]数组中存放的是录音数据("播放一首歌")格式为16Khz, 16bit单通道PCM

  .. code-block:: c

      session_voice_start();
      mock_record_audio_stream_send((uint8_t *)play_music_inc_file, sizeof(play_music_inc_file));

- 获取音乐列表请求音乐URL

  .. note:: 获取到的音乐列表中包含有音乐id通过该id可以请求音乐的URL

  .. code-block:: c

      static void voice_event_cb(session_voice_event_e evt, void *data, uint32_t size, void *usr)
      {
          case SESSION_VOICE_MUSIC_LISTS: {
              session_voice_music_lists_t *item = (session_voice_music_lists_t *)data;
              // 获取播放列表中第一首歌的URL
              char music_url[256];
              lsc_music_request_url(item->items[0].id, music_url);
          } break;
      }

示例中所使用的API文档见 ::ref:`session_voice`