音乐文件播放
adjustAudioMixingPlayoutVolume:
调节音乐文件在本地播放的音量。
- (int)adjustAudioMixingPlayoutVolume:(NSInteger)volume;
调用时机
你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。
调用限制
无。
参数
- volume
- 音乐文件音量。取值范围为 [0,100],100 (默认值)为原始音量。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
adjustAudioMixingPublishVolume:
调节音乐文件远端播放音量。
- (int)adjustAudioMixingPublishVolume:(NSInteger)volume;
该方法调节混音音乐文件在远端的播放音量大小。
调用时机
你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。
调用限制
无。
参数
- volume
- 音乐文件音量。取值范围为 [0,100],100 (默认值)为原始音量。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
adjustAudioMixingVolume:
调节音乐文件的播放音量。
- (int)adjustAudioMixingVolume:(NSInteger)volume;
该方法调节混音音乐文件在本端和远端的播放音量大小。
调用时机
该方法需要在 startAudioMixing:loopback:cycle:startPos: 后调用。
调用限制
无。
参数
- volume
- 音乐文件音量范围为 0~100。100 (默认值)为原始文件音量。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
adjustPlaybackSignalVolume:
调节本地播放的所有远端用户信号音量。
- (int)adjustPlaybackSignalVolume:(NSInteger)volume;
该方法用于调节所有远端用户混音后在本地播放的信号音量,如果你需要调节指定远端用户在本地播放的信号音量,建议你调用 adjustUserPlaybackSignalVolume:volume:。
调用时机
加入频道前后均可调用。
调用限制
无。
参数
- volume
- 音量,取值范围为 [0,400]。
- 0: 静音。
- 100: (默认)原始音量。
- 400: 原始音量的 4 倍,自带溢出保护。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getAudioMixingCurrentPosition
获取音乐文件的播放进度。
- (int)getAudioMixingCurrentPosition;
详情
该方法获取当前音乐文件播放进度,单位为毫秒。
- 你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode:
(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。 - 如需多次调用 getAudioMixingCurrentPosition,请确保调用间隔大于 500 ms。
返回值
- ≥ 0: 方法调用成功,返回当前音乐文件播放进度(ms)。0 表示当前音乐文件未开始播放。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getAudioMixingDuration
获取音乐文件总时长。
- (int)getAudioMixingDuration;
该方法获取音乐文件总时长,单位为毫秒。
调用时机
该方法需要在 startAudioMixing:loopback:cycle:startPos: 之后,并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用。
调用限制
无。
返回值
- ≥ 0: 方法调用成功则返回音乐文件时长。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getAudioMixingPlayoutVolume
获取音乐文件的本地播放音量。
- (int)getAudioMixingPlayoutVolume;
你可以调用该方法获取混音的音乐文件的本地播放音量,方便排查音量相关问题。
调用时机
该方法需要在 startAudioMixing:loopback:cycle:startPos: 之后,并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用。
调用限制
无。
返回值
- ≥ 0: 方法调用成功则返回音量值,范围为 [0,100]。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getAudioMixingPublishVolume
获取音乐文件的远端播放音量。
- (int)getAudioMixingPublishVolume;
详情
该接口可以方便开发者排查音量相关问题。
(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。返回值
- ≥ 0: 方法调用成功则返回音量值,范围为 [0,100]。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getAudioTrackCount
获取当前音乐文件的音轨索引。
- (int)getAudioTrackCount;
详情
- 你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到rtcEngine:audioMixingStateChanged:reasonCode:
(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。
返回值
- 方法调用成功时,返回当前音乐文件的音轨索引。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
pauseAudioMixing
暂停播放音乐文件。
- (int)pauseAudioMixing;
当你调用 startAudioMixing:loopback:cycle:startPos: 方法播放音乐文件后,如需暂停播放,请调用该方法。如果你需要停止播放,请调用 stopAudioMixing。
调用时机
该方法需要在加入频道后调用。
调用限制
无。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
resumeAudioMixing
恢复播放音乐文件。
- (int)resumeAudioMixing;
当你调用 pauseAudioMixing 暂停播放音乐文件后,如需恢复播放,请调用该方法。
调用时机
该方法需要在加入频道后调用。
调用限制
无。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
selectAudioTrack:
指定当前音乐文件的播放音轨。
- (int)selectAudioTrack:(NSInteger)index;
详情
获取音乐文件的音轨数量后,你可以调用该方法指定任一音轨进行播放。例如,如果一个多音轨文件的不同音轨存放了不同语言的歌曲,则你可以调用该方法设置音乐文件的播放语言。
- 该方法支持的音频文件格式见 RTC SDK 支持播放哪些格式的音频文件?。
- 你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode:
(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。
参数
- index
- 指定的播放音轨。取值范围应大于等于 0 且小于 getAudioTrackCount 的返回值。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
selectMultiAudioTrack:publishTrackIndex:
选择本地播放和发送至远端的音轨。
- (int)selectMultiAudioTrack:(NSInteger)playoutTrackIndex publishTrackIndex:(NSInteger)publishTrackIndex NS_SWIFT_NAME(selectMultiAudioTrack(_:publishTrackIndex:));
详情
你可以调用该方法分别设置本地播放和发送到远端的音轨。
在调用该方法前,你需要通过 openWithMediaSource: 来打开媒体文件,并通过 AgoraMediaSource 将 enableMultiAudioTrack 设为 YES
。
适用场景
在 K 歌场景下,主播可以根据需求选择在本地播放一路音轨(如原声),然后发送另一路音轨至远端(如伴唱)以提升听众体验。
参数
- playoutTrackIndex
- 用于本地播放的音轨索引。你可以通过 getStreamByIndex: 来获取索引值。
- publishTrackIndex
- 用于发送至远端的音轨索引。你可以通过 getStreamByIndex: 来获取索引值。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setAudioMixingDualMonoMode:
设置当前音频文件的声道模式。
- (int)setAudioMixingDualMonoMode:(AgoraAudioMixingDualMonoMode)mode;
在双声道音频文件中,左声道和右声道可以存储不同的音频数据。根据实际需要,你可以设置声道模式为原始模式、左声道模式、右声道模式或混合模式。
适用场景
- 如果你只需听伴奏,则用该方法设置音频文件的声道模式为左声道模式。
- 如果你需要同时听伴奏和原唱,则调用该方法设置声道模式为混合模式。
调用时机
该方法需要在 startAudioMixing:loopback:cycle:startPos: 之后,并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用。
调用限制
该方法仅适用于双声道的音频文件。
参数
- mode
- 声道模式。详见 AgoraAudioMixingDualMonoMode。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setAudioMixingPitch:
调整本地播放的音乐文件的音调。
- (int)setAudioMixingPitch:(NSInteger)pitch;
本地人声和播放的音乐文件混音时,调用该方法可以仅调节音乐文件的音调。
调用时机
你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用该方法。
调用限制
无。
参数
- pitch
- 按半音音阶调整本地播放的音乐文件的音调,默认值为 0,即不调整音调。取值范围为 [-12,12],每相邻两个值的音高距离相差半音。取值的绝对值越大,音调升高或降低得越多。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setAudioMixingPlaybackSpeed:
设置当前音乐文件的播放速度。
- (int)setAudioMixingPlaybackSpeed:(NSInteger)speed NS_SWIFT_NAME(setAudioMixingPlaybackSpeed(_:));
详情
你需要在调用 startAudioMixing:loopback:cycle:startPos: 并收到 rtcEngine:audioMixingStateChanged:reasonCode: 回调报告播放状态为 AgoraAudioMixingStateTypePlaying 后再调用该方法。
参数
- speed
- 音乐文件的播放速度。推荐取值范围为 [50,400],其中:
- 50: 0.5 倍速。
- 100: 原始速度。
- 400: 4 倍速。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setAudioMixingPosition:
设置音乐文件的播放位置。
- (int)setAudioMixingPosition:(NSInteger)pos;
该方法可以设置音频文件的播放位置,这样你可以根据实际情况播放文件,而非从头到尾播放整个文件。
调用时机
该方法需要在 startAudioMixing:loopback:cycle:startPos: 之后,并收到 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying)
回调后调用。
调用限制
无。
参数
- pos
- 整数。进度条位置,单位为毫秒。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startAudioMixing:loopback:cycle:
开始播放音乐文件。
- (int)startAudioMixing:(NSString * _Nonnull)filePath
loopback:(BOOL)loopback
cycle:(NSInteger)cycle NS_SWIFT_NAME(startAudioMixing(_:loopback:cycle:));
该方法支持播放的音频文件格式见 RTC SDK 支持播放哪些格式的音频文件。如果本地音乐文件不存在、文件格式不支持或无法访问在线音乐文件 URL,则 SDK 会报告 AgoraAudioMixingReasonTypeCanNotOpen。
调用时机
该方法在加入频道前后均可调用。
调用限制
- 使用该方法播放时长较短的音效文件可能会导致播放失败。如需播放音效文件,建议使用 playEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:。
- 如需多次调用该方法,请确保调用间隔大于 500 ms。
相关回调
调用该方法成功播放音乐文件后,本地会触发 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying
) 回调。播放结束后,本地会触发 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypeStopped
) 回调。
参数
- filePath
播放文件的地址,支持以
ipod-library//
开头的文件路径、在线文件的 URL 地址、文件的绝对路径,需精确到文件名及后缀。支持的音频格式包括 MP3、AAC、M4A、MP4、WAV、3GP。详见支持的媒体格式。注意- loopback
- 是否只在本地播放音乐文件:
YES
:只在本地播放音乐文件,只有本地用户能听到音乐。NO
:将本地播放的音乐文件发布至远端,本地用户和远端用户都能听到音乐。
- cycle
- 音乐文件的播放次数。
- >0: 播放次数。例如,1 表示播放 1 次。
- -1: 无限循环播放。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败:
- -1:一般性的错误(未明确归类)。
- -2:设置了无效的参数。
- -3:SDK 尚未准备好:
- 请检查是否已开启音频模块。
- 请检查程序集完整性。
- AgoraRtcEngineKit 初始化失败。请重新初始化 AgoraRtcEngineKit。
startAudioMixing:loopback:cycle:startPos:
开始播放音乐文件。
- (int)startAudioMixing:(NSString* _Nonnull)filePath loopback:(BOOL)loopback cycle:(NSInteger)cycle startPos:(NSInteger)startPos;
该方法支持播放的音频文件格式见 RTC SDK 支持播放哪些格式的音频文件。如果本地音乐文件不存在、文件格式不支持或无法访问在线音乐文件 URL,则 SDK 会报告 AgoraAudioMixingReasonTypeCanNotOpen。
调用时机
该方法在加入频道前后均可调用。
调用限制
- 使用该方法播放时长较短的音效文件可能会导致播放失败。如需播放音效文件,建议使用 playEffect:filePath:loopCount:pitch:pan:gain:publish:startPos:。
- 如需多次调用该方法,请确保调用间隔大于 500 ms。
相关回调
调用该方法成功播放音乐文件后,本地会触发 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypePlaying
) 回调。播放结束后,本地会触发 rtcEngine:audioMixingStateChanged:reasonCode:(AgoraAudioMixingStateTypeStopped
) 回调。
参数
- filePath
- 文件路径:
- iOS 或 macOS: 音频文件的绝对路径或 URL 地址,需精确到文件名及后缀。例如
/var/mobile/Containers/Data/audio.mp4
。
- iOS 或 macOS: 音频文件的绝对路径或 URL 地址,需精确到文件名及后缀。例如
- loopback
- 是否只在本地播放音乐文件:
YES
:只在本地播放音乐文件,只有本地用户能听到音乐。NO
:将本地播放的音乐文件发布至远端,本地用户和远端用户都能听到音乐。
- cycle
- 音乐文件的播放次数。
- >0: 播放次数。例如,1 表示播放 1 次。
- -1: 无限循环播放。
- startPos
- 音乐文件的播放位置,单位为毫秒。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败:
- -1:一般性的错误(未明确归类)。
- -2:设置了无效的参数。
- -3:SDK 尚未准备好:
- 请检查是否已开启音频模块。
- 请检查程序集完整性。
- AgoraRtcEngineKit 初始化失败。请重新初始化 AgoraRtcEngineKit。
stopAudioMixing
停止播放音乐文件。
- (int)stopAudioMixing;
当你调用 startAudioMixing:loopback:cycle:startPos: 方法播放音乐文件后,如需停止播放,可调用该方法。如果仅需暂停播放,请调用 pauseAudioMixing。
调用时机
该方法需要在加入频道后调用。
调用限制
无。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
rtcEngineLocalAudioMixingDidFinish:
本地音乐文件播放已结束回调。
- (void)rtcEngineLocalAudioMixingDidFinish:(AgoraRtcEngineKit * _Nonnull)engine;
详情
当调用 startAudioMixing:loopback:cycle:startPos: 播放本地音乐文件结束后,会触发该回调。如果调用 startAudioMixing:loopback:cycle:startPos: 失败,会返回错误码 WARN_AUDIO_MIXING_OPEN_ERROR。
rtcEngine:audioMixingPositionChanged:
音乐文件播放进度回调。
- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioMixingPositionChanged:(NSInteger)position NS_SWIFT_NAME(rtcEngine(_:audioMixingPositionChanged:));
详情
当你调用 startAudioMixing:loopback:cycle:startPos: 方法播放音乐文件后,SDK 会每隔一秒触发一次该回调,报告音乐文件当前的播放进度。
参数
- position
- 音乐文件当前的播放进度,单位为 ms。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
rtcEngine:audioMixingStateChanged:reasonCode:
音乐文件的播放状态已改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine audioMixingStateChanged:(AgoraAudioMixingStateType)state
reasonCode:(AgoraAudioMixingReasonCode)reasonCode;
详情
该回调在音乐文件播放状态发生改变时触发,并报告当前的播放状态和错误码。
参数
- state
- 音乐文件播放状态。详见 AgoraAudioMixingStateType。
- reasonCode
- 错误码。详见 AgoraAudioMixingReasonCode。