Skip to content

Commit

Permalink
Added audio playback end message buffering
Browse files Browse the repository at this point in the history
audio playback, messaggio di buffering
  • Loading branch information
Abba90 committed Feb 13, 2015
1 parent 87f338c commit f506d40
Show file tree
Hide file tree
Showing 243 changed files with 447 additions and 19,954 deletions.
214 changes: 214 additions & 0 deletions MyAudioPlaybackAgent/AudioPlayer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
using System;
using System.Diagnostics;
using System.Windows;
using Microsoft.Phone.BackgroundAudio;

namespace MyAudioPlaybackAgent
{
public class AudioPlayer : AudioPlayerAgent
{
/// <remarks>
/// Le istanze di AudioPlayer possono condividere lo stesso processo.
/// I campi statici possono essere utilizzati per condividere lo stato tra le istanze di AudioPlayer
/// o per comunicare con l'agente di flusso audio.
/// </remarks>
static AudioPlayer()
{
// La sottoscrizione del gestore eccezioni gestite
Deployment.Current.Dispatcher.BeginInvoke(delegate
{
Application.Current.UnhandledException += UnhandledException;
});
}

/// Codice da eseguire in caso di eccezioni non gestite
private static void UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
if (Debugger.IsAttached)
{
// Si è verificata un'eccezione non gestita; inserire un'interruzione nel debugger
Debugger.Break();
}
}

/// <summary>
/// Chiamata eseguita quando cambia lo stato della riproduzione, eccetto che per lo stato di errore (vedere OnError)
/// </summary>
/// <param name="player">BackgroundAudioPlayer</param>
/// <param name="track">La traccia riprodotta in corrispondenza del cambiamento di stato della riproduzione</param>
/// <param name="playState">Il nuovo stato della riproduzione del lettore</param>
/// <remarks>
/// Impossibile annullare i cambiamenti di stato della riproduzione. I cambiamenti vengono generati anche se l'applicazione
/// ha causato il cambiamento dello stato stesso, presupponendo che l'applicazione abbia acconsentito esplicitamente al callback.
///
/// Eventi rilevanti dello stato della riproduzione:
/// (a) TrackEnded: richiamato quando il lettore non contiene una traccia corrente. L'agente può impostare la traccia successiva.
/// (b) TrackReady: è stata impostata una traccia audio, la quale è pronta per la riproduzione.
///
/// Chiamare NotifyComplete() solo una volta, dopo il completamento della richiesta dell'agente, inclusi i callback asincroni.
/// </remarks>
protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
{
switch (playState)
{
case PlayState.TrackEnded:
player.Track = GetPreviousTrack();
break;
case PlayState.TrackReady:
player.Play();
break;
case PlayState.Shutdown:
// TODO: Gestire qui lo stato di arresto (ad esempio, salvare lo stato)
break;
case PlayState.Unknown:
break;
case PlayState.Stopped:
break;
case PlayState.Paused:
break;
case PlayState.Playing:
break;
case PlayState.BufferingStarted:
break;
case PlayState.BufferingStopped:
break;
case PlayState.Rewinding:
break;
case PlayState.FastForwarding:
break;
}

NotifyComplete();
}

/// <summary>
/// Chiamata eseguita quando l'utente richiede un'azione tramite l'interfaccia utente fornita dall'applicazione o dal sistema
/// </summary>
/// <param name="player">BackgroundAudioPlayer</param>
/// <param name="track">La traccia riprodotta in corrispondenza del cambiamento di stato della riproduzione</param>
/// <param name="action">L'azione richiesta dall'utente</param>
/// <param name="param">I dati associati all'azione richiesta.
/// Nella versione corrente questo parametro può essere utilizzato solo con l'azione Seek,
/// per indicare la posizione richiesta di una traccia audio</param>
/// <remarks>
/// Le azioni dell'utente non apportano automaticamente cambiamenti nello stato del sistema. L'agente è responsabile
/// dell'esecuzione delle azioni dell'utente, se supportate.
///
/// Chiamare NotifyComplete() solo una volta, dopo il completamento della richiesta dell'agente, inclusi i callback asincroni.
/// </remarks>
protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
{
switch (action)
{
case UserAction.Play:
if (player.PlayerState != PlayState.Playing)
{
try
{
player.Play();
}
catch
{

}
}
break;
case UserAction.Stop:
try
{
player.Stop();
}
catch
{

}
break;
case UserAction.Pause:
player.Pause();
break;

}

NotifyComplete();
}

/// <summary>
/// Implementa la logica necessaria per ottenere l'istanza di AudioTrack successiva.
/// In una playlist l'origine può essere un file, una richiesta Web, ecc.
/// </summary>
/// <remarks>
/// L'URI di AudioTrack determina l'origine, che può essere:
/// (a) File di spazio di memorizzazione isolato (URI relativo, rappresenta il percorso nello spazio di memorizzazione isolato)
/// (b) URL HTTP (URI assoluto)
/// (c) MediaStreamSource (null)
/// </remarks>
/// <returns>istanza di AudioTrack o null se la riproduzione è stata completata</returns>
private AudioTrack GetNextTrack()
{
// TODO: aggiungere la logica per ottenere la traccia audio successiva

AudioTrack track = null;

// specificare la traccia

return track;
}

/// <summary>
/// Implementa la logica necessaria per ottenere l'istanza di AudioTrack precedente.
/// </summary>
/// <remarks>
/// L'URI di AudioTrack determina l'origine, che può essere:
/// (a) File di spazio di memorizzazione isolato (URI relativo, rappresenta il percorso nello spazio di memorizzazione isolato)
/// (b) URL HTTP (URI assoluto)
/// (c) MediaStreamSource (null)
/// </remarks>
/// <returns>istanza di AudioTrack o null se la traccia precedente non è consentita</returns>
private AudioTrack GetPreviousTrack()
{
// TODO: aggiungere la logica per ottenere la traccia audio precedente

AudioTrack track = null;

// specificare la traccia

return track;
}

/// <summary>
/// Chiamata eseguita quando si verifica un errore relativo alla riproduzione, ad esempio quando il download di AudioTrack non viene eseguito correttamente
/// </summary>
/// <param name="player">BackgroundAudioPlayer</param>
/// <param name="track">La traccia che ha restituito l'errore</param>
/// <param name="error">L'errore che si è verificato</param>
/// <param name="isFatal">Se true, la riproduzione non può continuare e la riproduzione della traccia verrà interrotta</param>
/// <remarks>
/// Questo metodo non viene chiamato in tutti i casi. Ad esempio, se l'agente in background
/// stesso rileva un'eccezione non gestita, non verrà richiamato per gestire i propri errori.
/// </remarks>
protected override void OnError(BackgroundAudioPlayer player, AudioTrack track, Exception error, bool isFatal)
{
if (isFatal)
{
Abort();
}
else
{
NotifyComplete();
}

}

/// <summary>
/// Chiamata eseguita quando la richiesta dell'agente viene annullata
/// </summary>
/// <remarks>
/// Dopo l'annullamento della richiesta, l'agente impiega 5 secondi per completare l'operazione,
/// chiamando NotifyComplete()/Abort().
/// </remarks>
protected override void OnCancel()
{

}
}
}
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,40 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{12F8E56D-728C-4073-BDA5-058E6222DE51}</ProjectGuid>
<ProjectGuid>{408FDA62-9BCB-4BE0-9F74-D82B4A902468}</ProjectGuid>
<ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Shoutcast.Sample.Phone.Background.PlaybackAgent</RootNamespace>
<AssemblyName>Shoutcast.Sample.Phone.Background.PlaybackAgent</AssemblyName>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<SilverlightVersion>
</SilverlightVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<RootNamespace>MyAudioPlaybackAgent</RootNamespace>
<AssemblyName>MyAudioPlaybackAgent</AssemblyName>
<TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
<SilverlightApplication>false</SilverlightApplication>
<ValidateXaml>true</ValidateXaml>
<ThrowErrorsInValidation>true</ThrowErrorsInValidation>
<BackgroundAgentType>AgentLibrary</BackgroundAgentType>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>4.0</OldToolsVersion>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<BackgroundAgentType>AgentLibrary</BackgroundAgentType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand All @@ -57,43 +41,52 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget />
<OutputPath>Bin\x86\Debug</OutputPath>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\x86\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<PlatformTarget />
<OutputPath>Bin\x86\Release</OutputPath>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\x86\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<PlatformTarget />
<OutputPath>Bin\ARM\Debug</OutputPath>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Bin\ARM\Debug</OutputPath>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<PlatformTarget />
<OutputPath>Bin\ARM\Release</OutputPath>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\ARM\Release</OutputPath>
<DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="AudioPlayer.cs" />
<Compile Include="AudioTrackStreamer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Silverlight.Media.Shoutcast\Silverlight.Media.Shoutcast.Phone.csproj">
<Project>{05CC4102-451C-4EB5-8FEA-614F5B49AB2D}</Project>
<Name>Silverlight.Media.Shoutcast.Phone</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
<ProjectExtensions />
Expand Down
37 changes: 37 additions & 0 deletions MyAudioPlaybackAgent/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Resources;

// Le informazioni generali relative a un assembly sono controllate dal seguente
// set di attributi. Modificare i valori di questi attributi per modificare le informazioni
// associate a un assembly.
[assembly: AssemblyTitle("MyAudioPlaybackAgent")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MyAudioPlaybackAgent")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili
// ai componenti COM. Se è necessario accedere a un tipo in questo assembly da
// COM, impostare su true l'attributo ComVisible per tale tipo.
[assembly: ComVisible(false)]

// Se il progetto viene esposto a COM, il seguente GUID verrà utilizzato come ID della libreria dei tipi
[assembly: Guid("408fda62-9bcb-4be0-9f74-d82b4a902468")]

// Le informazioni sulla versione di un assembly sono costituite dai quattro valori seguenti:
//
// Versione principale
// Versione secondaria
// Numero build
// Revisione
//
// È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build
// utilizzando l'asterisco (*) come illustrato di seguito:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: NeutralResourcesLanguageAttribute("it-IT")]
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
C:\Users\Francesco\Desktop\strillone-spl-WindowsPhone-StreamingRadios\MyAudioPlaybackAgent\Bin\Debug\MyAudioPlaybackAgent.dll
C:\Users\Francesco\Desktop\strillone-spl-WindowsPhone-StreamingRadios\MyAudioPlaybackAgent\Bin\Debug\MyAudioPlaybackAgent.pdb
C:\Users\Francesco\Desktop\strillone-spl-WindowsPhone-StreamingRadios\MyAudioPlaybackAgent\obj\Debug\MyAudioPlaybackAgent.dll
C:\Users\Francesco\Desktop\strillone-spl-WindowsPhone-StreamingRadios\MyAudioPlaybackAgent\obj\Debug\MyAudioPlaybackAgent.pdb
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit f506d40

Please sign in to comment.