Release 4.0.0-preview1-00051
[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 using System;
17 using System.Diagnostics;
18 using Native = Interop.AudioEffect;
19
20 namespace Tizen.Multimedia
21 {
22
23     /// <summary>
24     /// Represents a equalizer band of <see cref="AudioEffect"/>.
25     /// </summary>
26     public class EqualizerBand
27     {
28         private readonly AudioEffect _owner;
29         private readonly int _index;
30
31         internal EqualizerBand(AudioEffect owner, int index)
32         {
33             Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
34             Debug.Assert(owner != null);
35
36             _owner = owner;
37             _index = index;
38
39             int frequency = 0;
40             int range = 0;
41
42             Native.GetEqualizerBandFrequency(_owner.Player.Handle, _index, out frequency).
43                 ThrowIfFailed("Failed to initialize equalizer band");
44
45             Native.GetEqualizerBandFrequencyRange(_owner.Player.Handle, _index, out range).
46                 ThrowIfFailed("Failed to initialize equalizer band");
47
48             Frequency = frequency;
49             FrequencyRange = range;
50             Log.Debug(PlayerLog.Tag, "frequency : " + frequency + ", range : " + range);
51         }
52
53         /// <summary>
54         /// Sets or gets the gain for the equalizer band.
55         /// </summary>
56         /// <param name="value">The value indicating new gain in decibel(dB).</param>
57         /// <exception cref="ObjectDisposedException">The player that this EqualizerBand belongs to has already been disposed of.</exception>
58         /// <exception cref="ArgumentOutOfRangeException">
59         ///     <paramref name="value"/> is less than <see cref="AudioEffect.MinBandLevel"/>.\n
60         ///     -or-\n
61         ///     <paramref name="value"/> is greater than <see cref="AudioEffect.MaxBandLevel"/>.
62         /// </exception>
63         public int Level
64         {
65             get
66             {
67                 Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
68                 _owner.Player.ValidateNotDisposed();
69
70                 int value = 0;
71                 Native.GetEqualizerBandLevel(_owner.Player.Handle, _index, out value).
72                     ThrowIfFailed("Failed to get the level of the equalizer band");
73                 Log.Info(PlayerLog.Tag, "get level : " + value);
74                 return value;
75             }
76             set
77             {
78                 Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
79                 _owner.Player.ValidateNotDisposed();
80
81                 if (value < _owner.BandLevelRange.Min || _owner.BandLevelRange.Max < value)
82                 {
83                     Log.Error(PlayerLog.Tag, "invalid level : " + value);
84                     throw new ArgumentOutOfRangeException(nameof(value), value,
85                         $"valid value range is { nameof(AudioEffect.BandLevelRange) }." +
86                         $"but got {value}.");
87                 }
88
89                 Native.SetEqualizerBandLevel(_owner.Player.Handle, _index, value).
90                     ThrowIfFailed("Failed to set the level of the equalizer band");
91             }
92         }
93
94
95         /// <summary>
96         /// Gets the frequency in dB.
97         /// </summary>
98         public int Frequency { get; }
99
100         /// <summary>
101         /// Gets the frequency range in dB.
102         /// </summary>
103         public int FrequencyRange { get; }
104
105     }
106 }