public class BassPlayer
{
private int _handleSynchronization;
//В методе Play() будет использоваться: _handleSynchronization = Bass.BASS_ChannelSetSync(_numberStream, BASSSync.BASS_SYNC_META, 0, _syncProcChangeTags, IntPtr.Zero);
SYNCPROC _syncProcChangeTags;
SYNCPROC _syncProcEndStream;
private int _numberStream;
public BassPlayer()
{
_syncProcChangeTags = new SYNCPROC(SyncMethodTagsChanged);
_syncProcEndStream = new SYNCPROC(SyncMethodEndStream);
}
/// <summary>Происходит, когда меняются теги, при смене музыки на радиостанции</summary>
public event EventHandler<RPTagsChangedEventArgs> TagsChanged;
/// <summary>Происходит, когда кончается воспроизведение потока (музыкального файла). При воспроизведении радио, не срабатывает</summary>
public event EventHandler EndStream;
public TAG_INFO TagInfo { get; private set; }
private void SyncMethodTagsChanged(int handle, int channel, int data, IntPtr user)
{
OnTagsChanged(handle, channel, data, user);
}
private void SyncMethodEndStream(int handle, int channel, int data, IntPtr user)
{
OnEndStream();
}
public void OnTagsChanged(int handle, int channel, int data, IntPtr user)
{
EventHandler<RPTagsChangedEventArgs> handler = TagsChanged;
if (handler != null)
{
GetTagsFromURLStream();
handler(this, new RPTagsChangedEventArgs(TagInfo, handle, channel, data, user));
}
}
private void OnEndStream()
{
EventHandler handler = EndStream;
if (handler != null)
handler(this, new EventArgs());
}
/// <summary>
/// Получить теги с текущего URL потока
/// </summary>
void GetTagsFromURLStream()
{
TAG_INFO tagInfo = new TAG_INFO();
Bass.BASS_ChannelGetTags(_numberStream, BASSTag.BASS_TAG_META);
BassTags.BASS_TAG_GetFromURL(_numberStream, tagInfo);
TagInfo = tagInfo;
}
}