1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using DirectShowLib;
namespace lecteur_radios
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private int hr = 0;
private IPin GetPin(IBaseFilter filter, string pinname)
{
IEnumPins epins;
hr = filter.EnumPins(out epins);
IntPtr fetched = Marshal.AllocCoTaskMem(4);
IPin[] pins = new IPin[1];
while (epins.Next(1, pins, fetched) == 0)
{
PinInfo pinfo;
pins[0].QueryPinInfo(out pinfo);
bool found = (pinfo.name == pinname);
DsUtils.FreePinInfo(pinfo);
if (found)
{
return pins[0];
}
}
return null;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
mediaElement1.Source = new Uri("mms://vipnrj.yacast.net/encodernostalgie");
image1.Source = new BitmapImage(new Uri("pack://application:,,,/bin/Debug/Nostalgie.png"));
}
private void button2_Click(object sender, RoutedEventArgs e)
{
// création du ficher destinataire
string repertoire = "C:\\Documents and Settings\\michel\\Mes documents\\Ma musique\\EnregistrementsWebRadios";
DateTime date = DateTime.Now;
string dateString = String.Format("{0:yyyy_MM_dd_hhmms}", date);
string fichier = repertoire + "\\" + dateString + "_Nostalgie" + ".mp3";
LancerEnregistrement("mms://vipnrj.yacast.net/encodernostalgie", fichier);
}
private void LancerEnregistrement(string urlStation, string pathFichier)
{
IGraphBuilder pGraph = (IGraphBuilder)new FilterGraph();
BuildGraph(pGraph, urlStation, pathFichier);
IMediaControl mediaControl = (IMediaControl)pGraph;
IMediaEvent mediaEvent = (IMediaEvent)pGraph;
hr = mediaControl.Run();
}
private void BuildGraph(IGraphBuilder pGraph, string urlStation, string fichierSortie)
{
Guid CLSID_WindowsMediaSourceFilter = new Guid("{6B6D0800-9ADA-11d0-A520-00A0D10129C0}");
Guid CLSID_LameAudioEncoder = new Guid("{B8D27088-FF5F-4B7C-98DC-0E91A1696286}");
Guid CLSID_WMAudiodecoderDMO = new Guid("{94297043-BD82-4DFD-B0DE-8177739C6D20}");
IBaseFilter pWindowsMediaSourceFilter = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_WindowsMediaSourceFilter));
IBaseFilter pLameAudioEncoder = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_LameAudioEncoder));
IBaseFilter pFilterwrite = (IBaseFilter)new FileWriter();
// création du graph et de son interface
//Ajout des filtres au graph
hr = pGraph.AddFilter(pWindowsMediaSourceFilter, "Windows Media Source Filter");
hr = pGraph.AddFilter(pLameAudioEncoder, "Lame Audio Encoder");
hr = pGraph.AddFilter(pFilterwrite, "Filter Write");
IFileSinkFilter pFilterWrite_sink = pFilterwrite as IFileSinkFilter;
hr = pFilterWrite_sink.SetFileName(fichierSortie, null);
// paramétrage de l'entée url vie l'interface IFileSourceFilter
IFileSourceFilter pWindowsMediaSourceFilter_src = (IFileSourceFilter)pWindowsMediaSourceFilter;
hr = pWindowsMediaSourceFilter_src.Load(urlStation, null);
//contruction du graph en automatique
hr = pGraph.Render(GetPin(pWindowsMediaSourceFilter, "Stream 1"));
IMediaControl control = (IMediaControl)pGraph;
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
// mettre les actions de contrôles et de création des répertoires et copie des dataform
}
}
public class PersonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Double p = System.Convert.ToDouble(value);
if (p == double.NaN) return null;
return p/10;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ throw new NotImplementedException(); }
}
} |
Partager