@@ -645,6 +645,10 @@ public final class MediaChannel {
645645 }
646646
647647 /// MediaChannel の接続中にマイクをハードミュート有効化/無効化します
648+ /// 前提条件として、
649+ /// - 接続時設定で音声が有効になっている
650+ /// - 接続時設定でロールが sendonly または sendrecv である
651+ ///
648652 /// - Parameter mute: `true` で有効化、`false` で無効化
649653 /// - Returns: 成功した場合は `nil`、失敗した場合は `Error` を返します
650654 public func setAudioHardMute( _ mute: Bool ) -> Error ? {
@@ -657,6 +661,10 @@ public final class MediaChannel {
657661 return SoraError . mediaChannelError ( reason: " audioEnabled is false " )
658662 }
659663
664+ guard configuration. isSender else {
665+ return SoraError . mediaChannelError ( reason: " role is not sender " )
666+ }
667+
660668 if !NativePeerChannelFactory. default. audioDeviceModuleWrapper. setAudioHardMute ( mute) {
661669 return SoraError . mediaChannelError (
662670 reason: " AudioDeviceModuleWrapper::setAudioHardMute failed " )
@@ -666,6 +674,11 @@ public final class MediaChannel {
666674 }
667675
668676 /// MediaChannel の接続中にマイクをソフトミュート有効化 / 無効化します
677+ /// 前提条件として、
678+ /// - 接続時設定で音声が有効になっている
679+ /// - 接続時設定でロールが sendonly または sendrecv である
680+ /// - 配信ストリームが存在するかつローカル音声トラックが存在する
681+ ///
669682 /// - Parameter mute: `true` で有効化、`false` で無効化
670683 /// - Returns: 成功した場合は `nil`、失敗した場合は `Error` を返します
671684 public func setAudioSoftMute( _ mute: Bool ) -> Error ? {
@@ -678,6 +691,10 @@ public final class MediaChannel {
678691 return SoraError . mediaChannelError ( reason: " audioEnabled is false " )
679692 }
680693
694+ guard configuration. isSender else {
695+ return SoraError . mediaChannelError ( reason: " role is not sender " )
696+ }
697+
681698 guard let senderStream else {
682699 return SoraError . mediaChannelError ( reason: " senderStream is unavailable " )
683700 }
0 commit comments