рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦрд┐рд▓рд╛рдбрд╝реА рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдпрд╣ рдЖрд▓реЗрдЦ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдЧреАрдд рдкреНрд▓реЗрдпрд░ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред

рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: рдЦрд┐рд▓рд╛рдбрд╝реА рдПрдХ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рд╕рдВрдЧреАрдд (рд╕реНрд╡рд┐рдЪ рдзреБрди) рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдЦрдХ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рдердорд┐рдХ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓реЗрдЦрди рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг




рд╣рдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рд▓реЗрддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдЗрд╕реЗ SimplePlayer рдХрд╣рддреЗ рд╣реИрдВред



рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рд╣рдо Windows Phone рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рдПрдЬреЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдЗрд╕реЗ AudioPlaybackAgent рдХрд╣рддреЗ рд╣реИрдВред



SimplePlayer рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ , AudioPlaybackAgent рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред


SimplePlayer рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЪрд┐рддреНрд░рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ AudioPlaybackAgent рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкреНрд▓реЗрдпрд░ рдХреЗ рдКрдкрд░ рд╢реЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЯреНрд░реИрдХ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХрд╛рдлреА рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╛рдЗрди


рдЪрд▓реЛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВ: рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MainPage.xaml рдЦреЛрд▓реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред
1. рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде TitlePanel рдирд╛рдордХ StackPanel рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="SIMPLE PLAYER" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="playlist" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> 

2. рдХреЛрдб рдХреЗ рд╕рд╛рде ContentPanel рдирд╛рдордХ рдЧреНрд░рд┐рдб рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel Orientation="Vertical"> <ListBox x:Name="PlayListBox" SelectionChanged="PlayListBox_SelectionChanged"/> <StackPanel Orientation="Horizontal"> <Button x:Name="PrevButton" Content="prev" Height="140" Width="140" Click="PrevButton_Click"/> <Button x:Name="PlayButton" Content="play" Height="140" Width="140" Click="PlayButton_Click"/> <Button x:Name="NextButton" Content="next" Height="140" Width="140" Click="NextButton_Click"/> </StackPanel> </StackPanel> </Grid> 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


рд╣рдо рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдПред

рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ


рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╣рдо рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдореЗрдВ рдпреЗ рдЯреНрд░реИрдХ рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗред

SipmlePlayer рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП MP3 рдпрд╛ wma рдкреНрд░рд╛рд░реВрдк рдХреЗ рдХреБрдЫ рдЯреНрд░реИрдХ рдЬреЛрдбрд╝реЗрдВред (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ: 1.mp3, 2.mp3, 3.mp3)



рдЕрдм MainPage.xaml.cs рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ, рдЬрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрдирдкреЗрдЬ рд╢реНрд░реЗрдгреА рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:
 private List<string> playlist; 

рдСрдбрд┐рдпреЛрдкреНрд▓реЗрдпрд░ рд╡рд░реНрдЧ рдореЗрдВ AudioPlaybackAgent рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рджрдЧреА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣рдо рддреБрд░рдВрдд рдкрдЯрд░рд┐рдпреЛрдВ, рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдФрд░ рдПрд▓реНрдмрдореЛрдВ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдХреЛрдб рдореЗрдВ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЬрд┐рд╕реЗ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ deserialized рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ playlist.xml рдХрд╣реЗрдВред рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:
 <?xml version="1.0" encoding="utf-8"?> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>1.mp3</string> <string>2.mp3</string> <string>3.mp3</string> </ArrayOfString> 

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдФрд░ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЯреИрдЧ рдЬреЛрдбрд╝рдиреЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ, рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдиреЛрдЯ: рдХрдВрдЯреЗрдВрдЯ рдореЗрдВ рдмрд┐рд▓реНрдб рдПрдХреНрд╢рди , рдХреЙрдкреА рдЯреВ рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╣рдореЗрд╢рд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрдЧреАрдд рдФрд░ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рди рднреВрд▓реЗрдВред

рдпрд╣ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ.рдПрдХреНрд╕рдПрдордПрд▓ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрдЗрд╕реЛрд▓реЗрдЯреЗрдбрд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рднрдВрдбрд╛рд░рдг, рдлрд┐рд▓рд╣рд╛рд▓, рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдПрдЬреЗрдВрдЯ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп:
 private void CopyToIsolatedStorage(string fullFilePath, string storeFileName) { using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) { if (!storage.FileExists(storeFileName)) { StreamResourceInfo resource = Application.GetResourceStream(new Uri(fullFilePath, UriKind.Relative)); using (IsolatedStorageFileStream file = storage.CreateFile(storeFileName)) { const int chunkSize = 4096; byte[] bytes = new byte[chunkSize]; int byteCount; while ((byteCount = resource.Stream.Read(bytes, 0, chunkSize)) > 0) { file.Write(bytes, 0, byteCount); } } } } } 

рдЗрд╕реЗ рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рддрдм рд╣рдо рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:
 CopyToIsolatedStorage("playlist.xml", "playlist.xml"); 

рдФрд░ рдЕрдм рд╣рдо рдЗрд╕реЗ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рднреА рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
 private void LoadPlaylist() { using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("playlist.xml", FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(List<string>)); playlist = (List<string>)serializer.Deserialize(stream); } } } 

рдЖрдкрдХреЛ AudioPlaybackAgent рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ AudioPlayer рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЗрд╕рдХреА рдХреЙрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред


рдиреЛрдЯ: рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ System.Xml.Serialization рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдХрд░ рд╕рдВрдЧреАрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдбрдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ () рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
 private void LoadMusicFiles() { foreach (var filepath in playlist) { CopyToIsolatedStorage(filepath, filepath); } } 

рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдбрд░ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рддрд╛рдХрд┐ рд╣рдорд╛рд░реА рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдореЗрдВ, InitializeComponent () рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж , рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
 PlayListBox.ItemsSource = playlist; 


рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░


рдЬрдм рд╣рдордиреЗ XAML рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 private void PlayListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { string filepath = (string)e.AddedItems[0]; BackgroundAudioPlayer.Instance.Track = new AudioTrack(new Uri(filepath,UriKind.Relative),null,null,null,null); BackgroundAudioPlayer.Instance.Play(); } private void PrevButton_Click(object sender, RoutedEventArgs e) { BackgroundAudioPlayer.Instance.SkipPrevious(); } private void PlayButton_Click(object sender, RoutedEventArgs e) { if (BackgroundAudioPlayer.Instance.PlayerState == PlayState.Playing) BackgroundAudioPlayer.Instance.Pause(); else BackgroundAudioPlayer.Instance.Play(); } private void NextButton_Click(object sender, RoutedEventArgs e) { BackgroundAudioPlayer.Instance.SkipNext(); } 

рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ, BackgroundAudioPlayer рдХреНрдпрд╛ рд╣реИ?

рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреГрд╖реНрдарднреВрдорд┐ рдПрдЬреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдПрдХрдорд╛рддреНрд░ рд╕реАрдзрд╛ рд╕рдВрдмрдВрдз рд╣реИред
рдЗрди рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреНрд░реИрдХ рдХреЛ рд░реЛрдХрдирд╛, рдкреНрд▓реЗрдмреИрдХ рд╢реБрд░реВ рдХрд░рдирд╛, рдЖрджрд┐), рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 void Instance_PlayStateChanged(object sender, EventArgs e) { switch (BackgroundAudioPlayer.Instance.PlayerState) { case PlayState.Playing: PlayButton.Content = "pause"; //  ,    PlayListBox.SelectedItem = BackgroundAudioPlayer.Instance.Track.Source.OriginalString; break; case PlayState.Paused: case PlayState.Stopped: PlayButton.Content = "play"; break; } } 


рдФрд░ рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдмрд╛рдБрдзреЗрдВ :
 BackgroundAudioPlayer.Instance.PlayStateChanged += Instance_PlayStateChanged; 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ BackgroundAudioPlayer.Instance.PlayerState рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдПрдЬреЗрдВрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕рдВрдЧреАрдд рдЪрд▓рддрд╛ рд╣реИ, рдард╣рд░рд╛рд╡ рдкрд░, рдЗрддреНрдпрд╛рджрд┐ред рдПрдХ BackgroundAudioPlayer.Instance.Position рдлрд╝реАрд▓реНрдб рднреА рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд▓реЗрдмреИрдХ рд╕реНрдерд╛рди рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ, рдЬреЛ рдХрд╛рдо рдореЗрдВ рднреА рдЖ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЯреНрд░реИрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдореМрдЬреВрджрд╛ рдПрдХ рдЦреЗрд▓ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рднреА рдЕрдЧрд▓реЗ рдЯреНрд░реИрдХ рдкрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

AuidioPlayer рд╡рд░реНрдЧ рдореЗрдВ, рдЖрдк рджреЛ рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рдВрдХреНрд╢рди, OnPlayStateChanged рдФрд░ OnUserAction рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдЬреЗрдВрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ - рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреЛрдиреЛрдВ рдореЗрдВ, рд╕реНрдЯрдм рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЯреНрд░реИрдХ рдХреЛ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ:
 private AudioTrack GetNextTrack() { int next = (playlist.IndexOf(BackgroundAudioPlayer.Instance.Track.Source.OriginalString) + 1) % (playlist.Count); return new AudioTrack(new Uri(playlist[next], UriKind.Relative), null, null, null, null); ; } private AudioTrack GetPreviousTrack() { int prev = (playlist.IndexOf(BackgroundAudioPlayer.Instance.Track.Source.OriginalString) -1 + playlist.Count) % (playlist.Count); return new AudioTrack(new Uri(playlist[prev], UriKind.Relative), null, null, null, null); ; } 

рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЯреНрд░реИрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ ( PlayState.TrackEnded ), рдЗрд╕ рдЧрд▓рддрдлрд╣рдореА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд▓рд╛ рдЯреНрд░реИрдХ рдЦреЗрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдмрджрд▓реЗрдВред рдХреНрд░реИрдХ = OnPlayStateChanged рд╣реИрдВрдбрд▓рд░ рдореЗрдВ GetPrepretrack (); on player.Track = GetNextTrack (); ред

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдХ рдЯреНрд░реИрдХ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдПрдХ рдмрдЯрди (рдкреНрд▓реЗ / рдЕрдЧрд▓рд╛ / рдкреНрд░рдЪрд▓рд┐рдд) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рднреА AuidioPlayer рд╡рд░реНрдЧ рдореЗрдВ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рд▓реА рдШрдЯрдирд╛ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХреЛ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрдпрдирд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ OnUserAction рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдирд╛ :
 if (player.Track == null) player.Track = new AudioTrack(new Uri(playlist[0], UriKind.Relative), null, null, null, null); 


рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рднреА рдШреЛрд╖рд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдиреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦрд┐рд▓рд╛рдбрд╝реА рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рд╕реНрд░реЛрдд рдХреЛрдб: рдбрд╛рдЙрдирд▓реЛрдб / рджреЗрдЦреЗрдВ
рдЙрджрд╛рд╣рд░рдг рдЖрд╡реЗрджрди рд▓реЗрдЦ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдирдП рд╕рд╛рд▓ рдХрд╛ рд╕рдВрдЧреАрдд

Source: https://habr.com/ru/post/In139113/


All Articles