[MediaPlayer] add APIs for controlling an audio pitch (#783)
authornam <36914158+aferin@users.noreply.github.com>
Tue, 16 Apr 2019 06:57:36 +0000 (15:57 +0900)
committerGitHub <noreply@github.com>
Tue, 16 Apr 2019 06:57:36 +0000 (15:57 +0900)
* [MediaPlayer] add APIs for controlling an audio pitch

src/Tizen.Multimedia.MediaPlayer/Interop/Interop.Player.cs
src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs
src/Tizen.Multimedia.MediaPlayer/Player/SphericalVideo.cs

index 500fb79..f40b77d 100644 (file)
@@ -337,6 +337,18 @@ internal static partial class Interop
 
         [DllImport(Libraries.Player, EntryPoint = "player_get_video_roi_area")]
         internal static extern PlayerErrorCode GetVideoRoi(IntPtr player, out double scaleX, out double scaleY, out double scaleWidth, out double scaleHeight);
+
+        [DllImport(Libraries.Player, EntryPoint = "player_audio_pitch_set_enabled")]
+        internal static extern PlayerErrorCode SetAudioPitchEnabled(IntPtr player, bool enabled);
+
+        [DllImport(Libraries.Player, EntryPoint = "player_audio_pitch_is_enabled")]
+        internal static extern PlayerErrorCode IsAudioPitchEnabled(IntPtr player, out bool enabled);
+
+        [DllImport(Libraries.Player, EntryPoint = "player_audio_pitch_set_value")]
+        internal static extern PlayerErrorCode SetAudioPitch(IntPtr player, float level);
+
+        [DllImport(Libraries.Player, EntryPoint = "player_audio_pitch_get_value")]
+        internal static extern PlayerErrorCode GetAudioPitch(IntPtr player, out float level);
     }
 
     internal class PlayerHandle : SafeHandle
index 058f56a..1e91387 100644 (file)
@@ -560,6 +560,86 @@ namespace Tizen.Multimedia
             }
         }
 
+        /// <summary>
+        /// Gets or sets the audio pitch.
+        /// </summary>
+        /// <value>The value indicating whether or not AudioPitch is enabled. The default is false.</value>
+        /// <remarks>This function is used for audio content only.
+        /// To set, the player must be in the <see cref="PlayerState.Idle"/> state.</remarks>
+        /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
+        /// <seealso cref="AudioPitch"/>
+        /// <since_tizen> 6 </since_tizen>
+        public bool AudioPitchEnabled
+        {
+            get
+            {
+                ValidateNotDisposed();
+                NativePlayer.IsAudioPitchEnabled(Handle, out var value).
+                    ThrowIfFailed(this, "Failed to get whether the audio pitch is enabled or not");
+                return value;
+            }
+
+            set
+            {
+                ValidateNotDisposed();
+                ValidatePlayerState(PlayerState.Idle);
+
+                NativePlayer.SetAudioPitchEnabled(Handle, value).
+                    ThrowIfFailed(this, "Failed to enable the audio pitch of the player");
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the audio pitch value.
+        /// </summary>
+        /// <value>The audio stream pitch value. The default is 1.</value>
+        /// <remarks>Enabling pitch control could increase the CPU usage on some devices.
+        /// This function is used for audio content only.</remarks>
+        /// <exception cref="InvalidOperationException">A pitch is not enabled.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     value is less than 0.5.
+        ///     -or-<br/>
+        ///     value is greater than 2.0.<br/>
+        /// </exception>
+        /// <seealso cref="AudioPitchEnabled"/>
+        /// <since_tizen> 6 </since_tizen>
+        public float AudioPitch
+        {
+            get
+            {
+                ValidateNotDisposed();
+
+                if (AudioPitchEnabled == false)
+                {
+                    throw new InvalidOperationException("An audio pitch is not enabled.");
+                }
+
+                NativePlayer.GetAudioPitch(Handle, out var value).
+                    ThrowIfFailed(this, "Failed to get the audio pitch");
+
+                return value;
+            }
+
+            set
+            {
+                ValidateNotDisposed();
+
+                if (AudioPitchEnabled == false)
+                {
+                    throw new InvalidOperationException("An audio pitch is not enabled.");
+                }
+
+                if (value < 0.5F || 2.0F < value)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value, "Valid value is 0.5 to 2.0");
+                }
+
+                NativePlayer.SetAudioPitch(Handle, value).ThrowIfFailed(this, "Failed to set the audio pitch");
+            }
+        }
+
         private SphericalVideo _sphericalVideo;
 
         /// <summary>
index fccd0cc..a0e53d5 100644 (file)
@@ -181,7 +181,6 @@ namespace Tizen.Multimedia
         /// Gets the level of the zoom of spherical video.
         /// </summary>
         /// <returns>The current zoom level of spherical video.</returns>
-        /// <remarks>Remark.</remarks>
         /// <feature>http://tizen.org/feature/opengles.version.2_0</feature>
         /// <feature>http://tizen.org/feature/multimedia.player.spherical_video</feature>
         /// <exception cref="NotSupportedException">The required feature is not supported.</exception>