2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 using Native = Interop.AudioEffect;
20 namespace Tizen.Multimedia
23 /// Provides the ability to control the audio effects for <see cref="Multimedia.Player"/>.
25 /// <since_tizen> 3 </since_tizen>
26 public class AudioEffect
28 private readonly EqualizerBand[] _bands;
30 internal AudioEffect(Player owner)
34 bool available = false;
36 Native.EqualizerIsAvailable(Player.Handle, out available).
37 ThrowIfFailed(Player, "Failed to initialize the AudioEffect");
39 IsAvailable = available;
41 if (IsAvailable == false)
47 Native.GetEqualizerBandsCount(Player.Handle, out count).
48 ThrowIfFailed(Player, "Failed to initialize the AudioEffect");
52 Native.GetEqualizerLevelRange(Player.Handle, out min, out max).
53 ThrowIfFailed(Player, "Failed to initialize the AudioEffect");
56 BandLevelRange = new Range(min, max);
58 _bands = new EqualizerBand[count];
62 /// Gets a <see cref="EqualizerBand"/> at the specified index.
64 /// <param name="index">The index of the band to get.</param>
65 /// <exception cref="ObjectDisposedException">The <see cref="Player"/> has already been disposed of.</exception>
66 /// <exception cref="ArgumentOutOfRangeException">
67 /// <pramref name="index"/> is less than zero.<br/>
69 /// <paramref name="index"/> is equal to or greater than <see cref="Count"/>.
71 /// <since_tizen> 3 </since_tizen>
72 public EqualizerBand this[int index]
76 Player.ValidateNotDisposed();
78 if (index < 0 || Count <= index)
80 throw new ArgumentOutOfRangeException(nameof(index), index,
81 $"Valid index is 0 <= x < { nameof(Count) } ");
84 if (_bands[index] == null)
86 _bands[index] = new EqualizerBand(this, index);
88 Log.Info(PlayerLog.Tag, "get equalizer band : " + _bands[index]);
94 /// Clears the equalizer effect.
96 /// <exception cref="ObjectDisposedException">The <see cref="Player"/> has already been disposed of.</exception>
97 /// <since_tizen> 3 </since_tizen>
100 Player.ValidateNotDisposed();
102 Native.EqualizerClear(Player.Handle).
103 ThrowIfFailed(Player, "Failed to clear equalizer effect");
107 /// Gets the number of items.
109 /// <since_tizen> 3 </since_tizen>
110 public int Count { get; }
113 /// Gets the band level range of the bands in the dB.
115 /// <since_tizen> 3 </since_tizen>
116 public Range BandLevelRange { get; }
119 /// Gets the value whether the AudioEffect is available or not.
121 /// <since_tizen> 3 </since_tizen>
122 public bool IsAvailable { get; }
125 /// Gets the player that this AudioEffect belongs to.
127 /// <since_tizen> 3 </since_tizen>
128 public Player Player { get; }