Soran
Radyo Playlist Hazırlama (XML)

Genel Tartışma
-
Merhaba ben c# dilinde bir radyo programı hazırlamak istiyorum butonlarla yapıyorum ama ben örnek olarak www.ornek.com/1.xml
(1.xml) dosyasında bulunan radyo sıra numarasını ve radyo ismini listboxa çekip listboxta göstermek istiyorum ve listboxta ki radyo
ismine tıkladığımda 1.xml dosyasında bulunan radyo adresini media playerde çalıştırmasını istiyorum bu konu hakkında yardımlarınızı
bekliyorum bir örnek vererek gösterebilir misiniz.
- Değiştirilmiş Tür Kyamuran SalibryamMicrosoft contingent staff, Moderator 22 Kasım 2016 Salı 10:42
Tüm Yanıtlar
-
1.xml in yapısını görsek daha rahat yanıt verebilirdik. Onun için sallama bir xml için örnek vereyim;
<?xml version="1.0" encoding="utf-8" ?> <channels> <station id="1"> <name><![CDATA[Trance One FM]]></name> <url><![CDATA[http://www.......]]></url> <station> <station id="2"> <name><![CDATA[Astra Trance FM]]></name> <url><![CDATA[http://www.......]]></url> <station> ..... </channels>
......
listBox1.DataMember = "Name"; listBox1.ValueMember = "Url"; listBox1.DataSource = XDocument.Load("http://www.ornek.com/1.xml").Descandants("station").Select(p => new { Name = p.Element("name").Value, Url = p.Element("url").Value }).ToList();
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Önay YALÇINERModerator 8 Kasım 2016 Salı 07:23
-
Önay Bey yanıtınız için teşekkürederim haklısınız konuya bir xml örneği eklemem gerekirdi. Bu fikri düşünürken elinde xml dosyası yoktu o yüzden ekleyemedim. Yazmış olduğunuz kodlarda hangi referansları kullandınız listbox1.datamember ,XDocument.Load ve Descandants bu üçünde altı kırmızı çizili olarak referanslarda yok diye uyarıyor XDocument.Load için Using System.Xml.Linq ekledim sorun yok ama diğerlerini bulamadım. Listboxda Radyo adına tıkladığımızda media playerde nasıl çalacak. Birde vaktiniz varsa xml dosyası yerine m3u uzantılı olarak hazırlasak nasıl yapabiliriz. örnek m3u dosyası
#EXTM3U $BorpasFileFormat="1"
#EXTINF:-1,977 The 80s Channel
http://www.977music.com/tunein/web/80s3.asx
#EXTINF:-1,1001 FM
http://www.dostmedya.com/ply/1001fm.pls
#EXTINF:-1,Kral 45`lik
http://95.130.169.203:80/
#EXTINF:-1,Kral 90`lar
http://37.247.98.16:80/
#EXTINF:-1,Kral Akustik
http://37.247.98.18/ yardımlarınız için teşekkürederim belki çok soru sordum ama c# ile birşeyler yapabilmek öğrenmek hoşuma gidiyor bir soru sormadan önce iyice araştırırım ve kendim öğrenmeye çalışırım ama bu konu hakkında yaptığım araştırmalarda genelde radyolar buton olarak eklenmiş ve exe ye kod olarak ilave edilmiş ama radyo adresleri değiştiği zaman sürekli programı düzenlemek pek mantıklı değil o yüzden internetteki bir xml veya m3u formatındaki dosyadan radyo isimlerini adreslerini nasıl çekeriz ve media playerde oynatırız merak ettim ve dosyada yaptığımız düzenleme daha kolay olacağından bu konu hakkında bilgi sahibi olmak istedim. Tesekkürederim. -
Orada harf hatası yapmışım, doğrusu Descendants olacak. Forumda intellisense olmayınca oluyo böyle.
MediaPlayer olayına gelince, media playeri mi açmak istiyorsunuz yoksa uygulamanız içinde mi çalmak istiyorsunuz. Uygulmanız içinde alacaksanız view'inizi WPF ile hazırlamanızı öneririrm media element ile o url lerdeki media'yı kolayca yürütebilirsiniz. Winforms ta yapmak için ya DirectShow kullanmanız lazım ya da MEdiaPlayer componenti eklemeniz lazım.
m3u olayına gelince; önce bir class hazırlarsınız;
class PlayListItem { public string Name { get; set; } public Uri Url { get; set; } }
ardından bir ViewModel;
class PlayList { public delegate void PlayListLoadedEventHandler(); public event PlayListLoadedEventHandler Loaded; private List<string> m3uFileLines; public ObservableCollection<PlayListItem> Items { get; private set; } = new ObservableCollection<PlayListItem>(); public void Load(string Address) { m3uFileLines = Regex.Split(new WebClient().DownloadString(Address), Environment.NewLine).Skip(1).ToList(); ItemList().ToList().ForEach(p => Items.Add(p)); Loaded?.Invoke(); } private IEnumerable<PlayListItem> ItemList() { for (int i = 0, j = 1; i < m3uFileLines.Count - 1; j+=2, i+=2) yield return new PlayListItem() { Name = m3uFileLines[i].Substring(m3uFileLines[i].IndexOf(',')+1), Source = new Uri(m3uFileLines[j]) }; } }
Bir view;
public partial class MainWindow : Window { private PlayList playList = new PlayList(); public MainWindow() { InitializeComponent(); playList.Loaded += PlayList_Loaded; } private void PlayList_Loaded() { listViewItems.ItemsSource = playList.Items; } private void buttonNavigate_Click(object sender, RoutedEventArgs e) { playList.Load(textBoxPlayListUrl.Text); } private void listViewItems_SelectionChanged(object sender, SelectionChangedEventArgs e) { labelStatus.Content = "Bağlanıyor..."; mediaElementMain.Source = ((PlayListItem)listViewItems.SelectedItem).Source; mediaElementMain.Play(); } private void mediaElementMain_BufferingStarted(object sender, RoutedEventArgs e) { labelStatus.Content = $"Tampona alınıyor (%{mediaElementMain.BufferingProgress})..."; } private void mediaElementMain_BufferingEnded(object sender, RoutedEventArgs e) { labelStatus.Content = "Çalıyor..."; } }
Bu da xaml;
<Window x:Class="RadioPlayer.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:RadioPlayer" mc:Ignorable="d" xmlns:vm="clr-namespace:RadioPlayer" Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600"> <Window.DataContext> <vm:PlayListItem></vm:PlayListItem> </Window.DataContext> <Grid Style="{DynamicResource mainGridStyle}"> <Grid.RowDefinitions> <RowDefinition Height="40"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <StackPanel Grid.ColumnSpan="2" Orientation="Horizontal"> <Label Margin="5" VerticalContentAlignment="Center">Çalma Listesi</Label> <TextBox x:Name="textBoxPlayListUrl" Margin="5" VerticalContentAlignment="Center" MinWidth="300">file://C:\Users\AmonRa\Documents\sample.m3u</TextBox> <Button x:Name="buttonNavigate" Margin="5" MinWidth="40" Click="buttonNavigate_Click">...</Button> </StackPanel> <ListView x:Name="listViewItems" Grid.Row="1" Margin="5" ItemsSource="{Binding}" SelectionChanged="listViewItems_SelectionChanged"> <ListView.ItemTemplate> <DataTemplate> <Label Content="{Binding Name}"></Label> </DataTemplate> </ListView.ItemTemplate> </ListView> <StackPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Top" Margin="5"> <Label x:Name="labelStatus" Height="40" VerticalContentAlignment="Center"></Label> <Label x:Name="labelPosition" Height="40" VerticalContentAlignment="Center"></Label> </StackPanel> <MediaElement x:Name="mediaElementMain" Grid.Row="1" Grid.Column="1" LoadedBehavior="Manual" Visibility="Collapsed" MediaOpened="mediaElementMain_MediaOpened" MediaFailed="mediaElementMain_MediaFailed" BufferingStarted="mediaElementMain_BufferingStarted" BufferingEnded="mediaElementMain_BufferingEnded"></MediaElement> </Grid> </Window>
Sonuç; fiesta forever ♬♫♪♪♫♪♬
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
-
Hocam bende şöyle birşey yaptım
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace hadingari { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void ListeYukle() { string yol = Application.StartupPath; // Buraya www.örnek.com/list.m3u gelecek int say = -1; string liste = yol + "\\List.m3u"; // buradaki yol farklı olabilir ben bilgisayardan çalışacak şekilde yapabildim. StreamReader Oku = new StreamReader(liste, System.Text.Encoding.Default); while ((Oku.Peek() > -1)) { listBox1.Items.Add(Oku.ReadLine()); listBox2.Items.Add(Oku.ReadLine()); say += 1; label1.Text="Listede "+ say.ToString()+" Radyo İstasyonu var"; } Oku.Close(); } private void Form1_Load(object sender, EventArgs e) { ListeYukle(); } private void listBox1_Click(object sender, EventArgs e) { /* mp.URL = Burada listbox1 deki radyo ismine tıklayınca o radyo media playerde yada vlc playerde radyo çalacak (aynı form içindeki)*/ burada takıldım } } }
- Düzenleyen SametKaraaslan 8 Kasım 2016 Salı 23:03