見出し画像

WPFとNAudioで音楽プレイヤーを作る~第2回:NAudioで音楽ファイルを再生する~

第2回:NAudioで音楽ファイルを再生する


今回のポイント


  • WaveOutEventとAudioFileReaderを使用して音楽ファイルを再生する


音楽を再生する


早速mp3ファイルを再生してみましょう。

まずは画面上にボタンを一つ用意します。

ボタンが押されたときに OnPlayButtonClick が呼ばれるようにしています。

MainWindow.xaml 

<Window x:Class="MusicPlayer.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:MusicPlayer"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
		<Button Content="Play" Click="OnPlayButtonClick"/>
    </Grid>
</Window>

次にコードビハインドにボタンが押されたときに呼び出す処理を記述します。


MainWindow.xaml.cs 

using NAudio.Wave;
using System.Windows;
using System.Windows.Forms;

namespace MusicPlayer
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OnPlayButtonClick(object sender, RoutedEventArgs e)

        {
            var dialog = new OpenFileDialog();
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                WaveOutEvent outputDevice = new WaveOutEvent();
                AudioFileReader afr = new AudioFileReader(dialog.FileName);
                outputDevice.Init(afr);
                outputDevice.Play();
            }
        }
    }
}


記述できたら実行してみましょう。

一つだけボタンがある画面が出てきます。

ボタンを押すとダイアログが開きます。

再生したいmp3ファイルを選択して`開く`ボタンを押します。


音楽が再生されました。停止したい場合はウィンドウを閉じてください。


解説


音楽再生に必要な箇所のみ解説します。


WaveOutEvent outputDevice = new WaveOutEvent(); // --1
AudioFileReader afr = new AudioFileReader(dialog.FileName); // --2
outputDevice.Init(afr); // --3
outputDevice.Play(); // --4


①出力デバイスのオブジェクトです。

②音楽ファイルを読み込むためのオブジェクトです。

 コンストラクタの第一引数に音楽ファイルのパスを渡します。

③WaveOutEventの Init() メソッドを呼び出して出力デバイスにAudioFileReaderを設定します。

 第一引数に②のAudioFileReaderを渡します。

④WaveOutEventの Play() メソッドを呼び出して音楽ファイルを再生します。

 他にも Pause() で一時停止、 Stop() で停止ができます。


次回は開発を進める前にプロジェクトをMVVMに沿ったものに修正します。


参考

https://so-zou.jp/software/tech/programming/c-sharp/media/audio/naudio

https://www.ipentec.com/document/csharp-play-sound-using-naudio

この記事が気に入ったらサポートをしてみませんか?