Bass.NET.dll Проигрывание интернет радио. Узнать, что сменились теги в потоке - C#
Формулировка задачи:
DOWNLOADPROC _downloadProc_; //Делегат int numberStream; public void Play(Uri address) { Bass.BASS_StreamFree(numberStream); //освобождаем поток. numberStream = Bass.BASS_StreamCreateURL(address.OriginalString, 0, BASSFlag.BASS_STREAM_STATUS, _downloadProc_, IntPtr.Zero); //Bass.dll создаёт поток и возвращает его номер, для дальнейшего управления потоком, по его номеру if (numberStream != 0) //если 0, то произошла ошибка { GetTagsFromCurrentURLStream(); //получить теги Bass.BASS_ChannelPlay(numberStream, true); //играем полученный поток начав сначала (второй параметр за это отвечает) Bass.BASS_ChannelSetAttribute(numberStream, BASSAttribute.BASS_ATTRIB_VOL, this.volume); } else MessageBox.Show("А-а-а, всё пропало!!!"); } private void GetTagsFromCurrentURLStream() { TAG_INFO tagInfo = new TAG_INFO(); IntPtr tagsIntPtr = Bass.BASS_ChannelGetTags(numberStream, BASSTag.BASS_TAG_META); BassTags.BASS_TAG_GetFromURL(numberStream, tagInfo); this.TagInfo = new TagInfo(tagInfo); //TagInfo это обёртка над TAG_INFO, ничего важного для темы. Вообще код используется в dll. То есть из приложения TAG_INFO не доступен. }
Решение задачи: «Bass.NET.dll Проигрывание интернет радио. Узнать, что сменились теги в потоке»
textual
Листинг программы
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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д