[MediaPlayer] Added ErrorHandler registration methods for internal use. (#33)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.MediaPlayer / Player / EqualizerBand.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Diagnostics;
19 using Native = Interop.AudioEffect;
20
21 namespace Tizen.Multimedia
22 {
23
24     /// <summary>
25     /// Represents an equalizer band of <see cref="AudioEffect"/>.
26     /// </summary>
27     /// <since_tizen> 3 </since_tizen>
28     public class EqualizerBand
29     {
30         private readonly AudioEffect _owner;
31         private readonly int _index;
32
33         internal EqualizerBand(AudioEffect owner, int index)
34         {
35             Debug.Assert(owner != null);
36
37             _owner = owner;
38             _index = index;
39
40             Native.GetEqualizerBandFrequency(_owner.Player.Handle, _index, out var frequency).
41                 ThrowIfFailed(_owner.Player, "Failed to initialize equalizer band");
42
43             Native.GetEqualizerBandFrequencyRange(_owner.Player.Handle, _index, out var range).
44                 ThrowIfFailed(_owner.Player, "Failed to initialize equalizer band");
45
46             Frequency = frequency;
47             FrequencyRange = range;
48             Log.Debug(PlayerLog.Tag, "frequency : " + frequency + ", range : " + range);
49         }
50
51         /// <summary>
52         /// Sets or gets the gain for the equalizer band.
53         /// </summary>
54         /// <param name="value">The value indicating new gain in decibel(dB).</param>
55         /// <exception cref="ObjectDisposedException">The player that this EqualizerBand belongs to has already been disposed of.</exception>
56         /// <exception cref="ArgumentOutOfRangeException">
57         ///     <paramref name="value"/> is not inside of <see cref="AudioEffect.BandLevelRange"/>.
58         /// </exception>
59         /// <since_tizen> 3 </since_tizen>
60         public int Level
61         {
62             get
63             {
64                 _owner.Player.ValidateNotDisposed();
65
66                 Native.GetEqualizerBandLevel(_owner.Player.Handle, _index, out var value).
67                     ThrowIfFailed(_owner.Player, "Failed to get the level of the equalizer band");
68
69                 Log.Info(PlayerLog.Tag, "get level : " + value);
70                 return value;
71             }
72             set
73             {
74                 _owner.Player.ValidateNotDisposed();
75
76                 if (value < _owner.BandLevelRange.Min || _owner.BandLevelRange.Max < value)
77                 {
78                     Log.Error(PlayerLog.Tag, "invalid level : " + value);
79                     throw new ArgumentOutOfRangeException(nameof(value), value,
80                         $"valid value range is { nameof(AudioEffect.BandLevelRange) }." +
81                         $"but got {value}.");
82                 }
83
84                 Native.SetEqualizerBandLevel(_owner.Player.Handle, _index, value).
85                     ThrowIfFailed(_owner.Player, "Failed to set the level of the equalizer band");
86             }
87         }
88
89
90         /// <summary>
91         /// Gets the frequency in the dB.
92         /// </summary>
93         /// <since_tizen> 3 </since_tizen>
94         public int Frequency { get; }
95
96         /// <summary>
97         /// Gets the frequency range in the dB.
98         /// </summary>
99         /// <since_tizen> 3 </since_tizen>
100         public int FrequencyRange { get; }
101
102     }
103 }