tencent cloud

文档反馈

实时语音伴奏

最后更新时间:2024-01-18 14:26:28
    为方便开发者调试和接入腾讯云游戏多媒体引擎产品 API,本文为您介绍游戏多媒体引擎实时语音伴奏的接入技术文档。

    实时语音伴奏相关接口

    接口
    接口含义
    StartAccompany
    开始播放伴奏。
    StopAccompany
    停止播放伴奏。
    IsAccompanyPlayEnd
    伴奏是否播放完毕。
    PauseAccompany
    暂停播放伴奏。
    ResumeAccompany
    重新播放伴奏。
    SetAccompanyVolume
    设置伴奏音量。
    GetAccompanyVolume
    获取播放伴奏的音量。
    SetAccompanyFileCurrentPlayedTimeByMs
    设置播放进度。
    说明:
    如需使用实时语音伴奏,需要在接入 GME SDK 且能在进行实时语音通话的情况下,才可以使用实时语音伴奏。

    流程图

    
    
    

    如何配合 EnableAudioCaputreDevice 使用

    在进入实时语音房间成功之后,调用 EnableAudioCaputreDevice 打开采集设备,再调用 StartAccompany 播放伴奏。如果需要采集人声,可以调用 EnableAudioSend 实现开麦效果。

    开始播放伴奏

    调用 StartAccompany 接口开始播放伴奏。支持 m4a、wav、mp3 一共三种格式。调用此 API,音量会重置。

    函数原型

    ITMGAudioEffectCtrl virtual int StartAccompany(const char* filePath, bool loopBack, int loopCount, int msTime)
    参数
    类型
    意义
    filePath
    char*
    播放伴奏的路径。
    loopBack
    bool
    是否混音发送,一般都设置为 true,即其他人也能听到伴奏。
    loopCount
    int
    循环次数,数值为-1表示无限循环。填0不播放。
    msTime
    int
    延迟时间。

    示例代码

    //Windows端代码
    ITMGContextGetInstance()->GetAudioEffectCtrl()->StartAccompany(filePath,true,-1,0);
    //Android端代码
    ITMGContext.GetInstance(this).GetAudioEffectCtrl().StartAccompany(filePath,true,loopCount,0);
    //iOS端代码
    [[[ITMGContext GetInstance] GetAudioEffectCtrl] StartAccompany:path loopBack:isLoopBack loopCount:loopCount msTime:0];

    开始播放伴奏(边下边播)

    调用 StartAccompanyDownloading 接口开始边下载边播放伴奏。在代码中实现下载伴奏,未下载完时,可以先将文件路径作为参数传到 StartAccompanyDownloading 里面,可实现边下边播。fileSize 为预估的完整文件大小。调用此接口传入未下载完的文件时,先保证文件至少有10k以上。

    函数原型

    ITMGAudioEffectCtrl virtual int StartAccompany(const char* filePath, bool loopBack, int loopCount, int msTime, int fileSize)
    说明:
    iOS 端需要以下配置。
    1. 在 iOS 端使用此功能,需要将相关动态库引入工程中,单击下载 mp3 动态库
    2. 将下载好的文件引入到工程文件中。并在 Link Binary With Libraries 中添加此动态库。
    3. 将头文件 TMGEngine_adv.h 加入工程中,与其他 SDK 头文件同目录下。

    播放伴奏的回调

    开始播放伴奏完成后,回调函数调用 OnEvent,事件消息为 ITMG_MAIN_EVENT_TYPE_ACCOMPANY_FINISH,在 OnEvent 函数中对事件消息进行判断。 传递的参数 data 包含两个信息,一个是 result,另一个是 file_path。

    示例代码

    void TMGTestScene::OnEvent(ITMG_MAIN_EVENT_TYPE eventType,const char* data){
    switch (eventType) {
    case ITMG_MAIN_EVENT_TYPE_ENTER_ROOM:
    {
    //进行处理
    break;
    }
    ...
    case ITMG_MAIN_EVENT_TYPE_ACCOMPANY_FINISH:
    {
    //进行处理
    break;
    }
    }
    }

    停止播放伴奏

    调用 StopAccompany 接口停止播放伴奏。

    函数原型

    ITMGAudioEffectCtrl virtual int StopAccompany(int duckerTime)
    参数
    类型
    意义
    duckerTime
    int
    淡出时间。

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->StopAccompany(0);

    伴奏是否播放完毕

    如果播放完毕,返回值为 true,如果没播放完,返回值为 false。

    函数原型

    ITMGAudioEffectCtrl virtual bool IsAccompanyPlayEnd()

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->IsAccompanyPlayEnd();

    暂停播放伴奏

    调用 PauseAccompany 接口暂停播放伴奏。

    函数原型

    ITMGAudioEffectCtrl virtual int PauseAccompany()
    

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->PauseAccompany();
    

    恢复播放伴奏

    ResumeAccompany 接口用于恢复播放伴奏。

    函数原型

    ITMGAudioEffectCtrl virtual int ResumeAccompany()
    

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->ResumeAccompany();
    

    设置自己是否可以听到伴奏

    此接口用于设置自己是否可以听到伴奏。

    函数原型

    ITMGAudioEffectCtrl virtual int EnableAccompanyPlay(bool enable)
    
    参数
    类型
    意义
    enable
    bool
    是否能听到。

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->EnableAccompanyPlay(false);
    

    设置他人是否也可以听到伴奏

    设置他人是否也可以听到伴奏。

    函数原型

    ITMGAudioEffectCtrl virtual int EnableAccompanyLoopBack(bool enable)
    
    参数
    类型
    意义
    enable
    bool
    是否能听到。

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->EnableAccompanyLoopBack(false);
    

    设置伴奏音量

    调用 SetAccompanyVolume 接口设置伴奏音量,默认值为100,数值大于100音量增益,数值小于100音量减益,值域为0 - 200。

    函数原型

    ITMGAudioEffectCtrl virtual int SetAccompanyVolume(int vol)
    
    参数
    类型
    意义
    vol
    int
    音量数值。

    示例代码

    int vol=100;
    ITMGContextGetInstance()->GetAudioEffectCtrl()->SetAccompanyVolume(vol);
    

    获取播放伴奏的音量

    GetAccompanyVolume 接口用于获取伴奏音量。

    函数原型

    ITMGAudioEffectCtrl virtual int GetAccompanyVolume()
    

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->GetAccompanyVolume();
    

    获得伴奏播放进度

    以下两个接口用于获得伴奏播放进度。需要注意:Current / Total = 当前循环次数,Current % Total = 当前循环播放位置。

    函数原型

    ITMGAudioEffectCtrl virtual int GetAccompanyFileTotalTimeByMs()
    ITMGAudioEffectCtrl virtual int GetAccompanyFileCurrentPlayedTimeByMs()
    

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->GetAccompanyFileTotalTimeByMs();
    ITMGContextGetInstance()->GetAudioEffectCtrl()->GetAccompanyFileCurrentPlayedTimeByMs();
    

    设置播放进度

    SetAccompanyFileCurrentPlayedTimeByMs 接口用于设置播放进度。

    函数原型

    ITMGAudioEffectCtrl virtual int SetAccompanyFileCurrentPlayedTimeByMs(unsigned int time)
    
    参数
    类型
    意义
    time
    int
    播放进度,以毫秒为单位。

    示例代码

    ITMGContextGetInstance()->GetAudioEffectCtrl()->SetAccompanyFileCurrentPlayedTimeByMs(time);
    

    设置伴奏音调

    SetAccompanyKey 接口用于调整伴奏的音调,在启动伴奏之前调用。

    函数原型

    ITMGAudioEffectCtrl virtual int SetAccompanyKey(int nKey)
    
    参数
    类型
    意义
    nKey
    int
    升降 Key,推荐范围-4到4。当设置为0时为原声调。

    错误码列表

    错误码名称
    错误码值
    错误码含义
    解决方法
    QAV_ERR_ACC_OPENFILE_FAILED
    4001
    打开文件失败
    检查文件路径及文件是否存在,检查是否有访问文件的权限。
    QAV_ERR_ACC_FILE_FORAMT_NOTSUPPORT
    4002
    不支持的文件格式
    检查文件格式是否正确。
    QAV_ERR_ACC_DECODER_FAILED
    4003
    解码失败
    检查文件格式是否正确。
    QAV_ERR_ACC_BAD_PARAM
    4004
    参数错误
    检查代码中所填参数是否正确。
    QAV_ERR_ACC_MEMORY_ALLOC_FAILED
    4005
    内存分配失败
    系统资源耗尽,如果一直存在此错误码,请联系开发人员。
    QAV_ERR_ACC_CREATE_THREAD_FAILED
    4006
    创建线程失败
    系统资源耗尽,如果一直存在此错误码,请联系开发人员。
    QAV_ERR_ACC_STATE_ILLIGAL
    4007
    状态非法
    未处于某种状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持