语音录制与播放

NIMAudio.AudioAPI提供了语音播放与录制功能,在使用语音功能之前必须调用InitModule进行初始化,初始化完成才可以进行录制等操作。

初始化

/// <summary>
/// NIM SDK 初始化语音模块
/// </summary>
/// <param name="userDataParentPath">缓存目录</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool InitModule(string userDataParentPath)
NIMAudio.AudioAPI.InitModule(app_data_path);

录制

网易云通信 SDK 提供了一套录制高清语音的接口,用于采集,编码,存储高清语音数据,并提供过程回调,当前支持的录制语音文件格式包括amr和aac。

开始录制

/// <summary>
/// 录制语音 android平台需在主线程调用
/// </summary>
/// <param name="audio_format">音频格式,AAC : 0, AMR : 1</param>
/// <param name="volume">音量(0 - 255, 默认180) pc有效</param>
/// <param name="loudness">默认0   pc有效</param>
/// <param name="capture_device">capture_device 录音设备 pc有效</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool StartCapture(int audio_format,int volume,int loudness,string capture_device)

开始录制结果回调

/// <summary>
/// 注册录制语音开始回调
/// </summary>
/// <param name="cb">回调函数</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool RegStartCaptureCb(StatusCallbackDelegate cb)

结束录制

/// <summary>
/// 停止录制语音
/// </summary>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool StopCapture()

结束录制回调

/// <summary>
/// 注册录制语音停止回调
/// </summary>
/// <param name="cb">回调函数</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool RegStopCaptureCb(StopCaptureCallbackDelegate cb)
NIMAudio.AudioAPI.RegStartCaptureCb(StartCaptureCallback);
NIMAudio.AudioAPI.RegStopCaptureCb(StopCaptureCallback);
NIMAudio.AudioAPI.StartCapture(1, 180, 0, "");
NIMAudio.AudioAPI.StopCapture();

public void StartCaptureCallback(int rescode)
{
    if (rescode == 200)
    {
        //接口调用成功
    }
}

public void StopCaptureCallback(int rescode, string file_path, string file_ext, int file_size, int audio_duration)
{
    //获取录制结果
    //rescode:录制结果状态码,200表示成功,其他值表示录制失败
    //file_path:语音文件存储路径
    //file_ext:语音文件后缀,amr或aac
    //file_size:语音文件大小
    //audio_duration:语音时长,单位毫秒
    string info = "StopCapture rescode:" + rescode.ToString() + "\n" +
                    "file_path:" + file_path + "\n" +
                    "file_ext:" + file_ext + "\n" +
                    "file_size:" + file_size.ToString() + "\n" +
                    "audio_duration:" + audio_duration.ToString();
    UnityEngin.Debug.Log(info);
}

取消录制

进行语音录制时可以取消录制,SDK会停止当前录制并删除已保存的临时文件,通过回调获取操作结果。

/// <summary>
/// 取消录制并删除临时文件
/// </summary>
/// <param name="filepath"></param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool CancelCapture()

/// <summary>
/// 注册录制语音取消回调
/// </summary>
/// <param name="cb">回调函数</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool RegCancelCaptureCb(StatusCallbackDelegate cb)

播放

网易云通信的语音消息格式有 aac 和 amr 两种格式可选,播放时需要传入文件路径和语音格式,通过注册回调函数获取播放状态。

/// <summary>
/// NIM SDK 播放,通过回调获取开始播放状态。android平台需在主线程调用
/// </summary>
/// <param name="filePath">播放文件绝对路径</param>
/// <param name="audioFormat">播放音频格式,AAC : 0, AMR : 1</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool PlayAudio(string filePath, NIMAudioType audioFormat)

/// <summary>
/// NIM SDK 注册播放开始事件回调
/// </summary>
/// <param name="cb">播放开始事件的回调函数</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool RegStartPlayCb(PlayCallbackDelegate cb)

/// <summary>
/// NIM SDK 注册播放结束事件回调
/// </summary>
/// <param name="cb">播放结束事件的回调函数</param>
/// <returns><c>true</c> 调用成功, <c>false</c> 调用失败</returns>
public static bool RegPlayEndCb(PlayCallbackDelegate cb)
NIMAudio.AudioAPI.RegStartPlayCb(StartPlayCallback);
NIMAudio.AudioAPI.RegPlayEndCb(EndPlayCallback);
NIMAudio.AudioAPI.PlayAudio("AUDIO PATH",NIMAudio.NIMAudioType.kNIMAudioAAC);

public void StartPlayCallback(int resCode,string filepath)
{
    if (resCode == 200)
    {
        //接口调用成功,其他值表明发生了错误
    }
}

public void EndPlayCallback(int resCode,string filepath)
{
    //播放完成,resCode == 200 表明播放成功
}

清理

在程序退出时需要调用NIMAudio.AudioAPI.UninitModule清理语音模块释放资源。