Click here to Skip to main content
15,880,608 members
Articles / Programming Languages / C#

LyricsFetcher - The Easiest Way to Find Lyrics for your Songs

Rate me:
Please Sign up or sign in to vote.
4.93/5 (82 votes)
29 Oct 2009GPL325 min read 201.1K   2.4K   184  
An article describing the development of a non-trivial C#/.NET application to fetch lyrics for songs.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{34940714-A3A8-489E-9354-3AAF3E53DD6E}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>LyricsFetcher</RootNamespace>
    <AssemblyName>LyricsFetcher</AssemblyName>
    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkSubset>
    </TargetFrameworkSubset>
    <SourceAnalysisOverrideSettingsFile>C:\jpp\code\cs\LyricsExplorer3\trunk\LyricsFetcher\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
    <ApplicationIcon>LyricsFetcher.ico</ApplicationIcon>
    <StartupObject>LyricsFetcher.Program</StartupObject>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="ObjectListView, Version=2.1.0.1344, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>.\ObjectListView.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Web" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="MetaDataFetching\MetaData.cs" />
    <Compile Include="MetaDataFetching\MetaDataLookup.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="UserInterface\Form1.LyricsTab.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UserInterface\Form1.MetaDataTab.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="MetaDataFetching\Decoder.cs" />
    <Compile Include="MetaDataFetching\MetaDataFetchManager.cs" />
    <Compile Include="SongManagement\ITunesLibrary.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="SongManagement\ITunesSong.cs" />
    <Compile Include="SongManagement\MetaDataEditor.cs" />
    <Compile Include="SongManagement\WMFSDKFunctions.cs" />
    <Compile Include="SongManagement\WmpLibrary.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="SongManagement\WmpSong.cs" />
    <Compile Include="UserInterface\AnimationHelper.cs">
    </Compile>
    <Compile Include="UserInterface\AboutBox1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UserInterface\AboutBox1.Designer.cs">
      <DependentUpon>AboutBox1.cs</DependentUpon>
    </Compile>
    <Compile Include="UserInterface\ChooseLibraryForm.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UserInterface\ChooseLibraryForm.Designer.cs">
      <DependentUpon>ChooseLibraryForm.cs</DependentUpon>
    </Compile>
    <Compile Include="UserInterface\SplashScreen.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UserInterface\UserPreferences.cs" />
    <Compile Include="Utility\AbstractFetchManager.cs" />
    <Compile Include="Utility\BackgroundWorkerWithProgress.cs">
    </Compile>
    <Compile Include="UserInterface\Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="UserInterface\Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="SongManagement\ITunes.cs" />
    <Compile Include="SongManagement\LyricsCache.cs" />
    <Compile Include="LyricsFetching\LyricsFetcher.cs" />
    <Compile Include="LyricsFetching\LyricsFetchManager.cs" />
    <Compile Include="LyricsFetching\LyricsSource.cs" />
    <Compile Include="UserInterface\Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="UserInterface\AboutBox1.resx">
      <DependentUpon>AboutBox1.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="UserInterface\ChooseLibraryForm.resx">
      <DependentUpon>ChooseLibraryForm.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="UserInterface\Form1.resx">
      <DependentUpon>Form1.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="UserInterface\SplashScreen.resx">
      <DependentUpon>SplashScreen.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
      <DesignTime>True</DesignTime>
    </Compile>
    <None Include="app.config" />
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <None Include="Web References\org.lyricwiki\LyricsResult.datasource">
      <DependentUpon>Reference.map</DependentUpon>
    </None>
    <None Include="Web References\org.lyricwiki\Reference.map">
      <Generator>MSDiscoCodeGenerator</Generator>
      <LastGenOutput>Reference.cs</LastGenOutput>
    </None>
    <None Include="Web References\org.lyricwiki\server.wsdl" />
    <None Include="Web References\org.lyricwiki\SongResult.datasource">
      <DependentUpon>Reference.map</DependentUpon>
    </None>
    <None Include="Web References\org.lyricwiki\SOTDResult.datasource">
      <DependentUpon>Reference.map</DependentUpon>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
    <Compile Include="SongManagement\Song.cs" />
    <Compile Include="SongManagement\SongLibrary.cs" />
    <Compile Include="Utility\WaitCursor.cs" />
    <Compile Include="Web References\org.lyricwiki\Reference.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Reference.map</DependentUpon>
    </Compile>
    <Compile Include="SongManagement\Wmp.cs" />
  </ItemGroup>
  <ItemGroup>
    <COMReference Include="ITDETECTORLib">
      <Guid>{D6995525-B33A-4980-A106-9DF58570CC66}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
    </COMReference>
    <COMReference Include="iTunesLib">
      <Guid>{9E93C96F-CF0D-43F6-8BA8-B807A3370712}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>11</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
    </COMReference>
    <COMReference Include="WMPLib">
      <Guid>{6BF52A50-394A-11D3-B153-00C04F79FAA6}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
    </COMReference>
  </ItemGroup>
  <ItemGroup>
    <WebReferences Include="Web References\" />
  </ItemGroup>
  <ItemGroup>
    <WebReferenceUrl Include="http://lyricwiki.org/server.php%3fwsdl">
      <UrlBehavior>Static</UrlBehavior>
      <RelPath>Web References\org.lyricwiki\</RelPath>
      <UpdateFromURL>http://lyricwiki.org/server.php%3fwsdl</UpdateFromURL>
      <ServiceLocationURL>
      </ServiceLocationURL>
      <CachedDynamicPropName>
      </CachedDynamicPropName>
      <CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
      <CachedSettingsPropName>LyricsFetcher_org_lyricwiki_LyricWiki</CachedSettingsPropName>
    </WebReferenceUrl>
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\network-offline.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\trebleclef48.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\trebleclef32.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\stop24.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\process-stop.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\trebleclef128.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\process-working.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\burn16.png" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Resources\logo.png" />
    <Content Include="AACTagReader.exe">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="genpuid.exe">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="libexpat.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="LyricsFetcher.ico" />
    <Content Include="mipcore.exe">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <None Include="Resources\splashscreen.png" />
    <None Include="Resources\splashscreen3.png" />
    <None Include="Resources\splashscreen2.png" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Team Leader
Australia Australia
Phillip has been playing with computers since the Apple II was the hottest home computer available. He learned the fine art of C programming and Guru meditation on the Amiga.

C# and Python are his languages of choice. Smalltalk is his mentor for simplicity and beauty. C++ is to programming what drills are to visits to the dentist.

He worked for longer than he cares to remember as Lead Programmer and System Architect of the Objective document management system. (www.objective.com)

He has lived for 10 years in northern Mozambique, teaching in villages.

He has developed high volume trading software, low volume FX trading software, and is currently working for Atlassian on HipChat.

Comments and Discussions