418 I'm a teapot

元ニートのIT新参がなんかする

WPFで音楽再生しようと試行錯誤

SmallBasicのSound.Play(filePath)でつまづく

C# 音を鳴らす とかでググると、一番簡単なサウンド(mp3含む)の再生方法としてSmallBasicのSound.Play(filePath)がよく紹介されている
C#で音楽を再生する一番簡単な方法 - Null and void
しかし開発中のアプリで使ってみたけど音がならない……
参照の追加はやったしこんな簡単なメソッドで間違える要素あるのか?なんておもいながら格闘してたけど
なんのことはないフルパスでの指定が必要なようだった

WPFで実行フォルダのパスの取得

じゃあフルパス指定しよねとなったけどWPFには実行フォルダを取得するApplication.StartupPathがないらしい
そのあたりをググってると

string exePath = Environment.GetCommandLineArgs()[0];
string exeFullPath = System.IO.Path.GetFullPath(exePath);
string startupPath = System.IO.Path.GetDirectoryName(exeFullPath);

これで大体は同じような結果が得られるようだった
[WPF]アプリケーションのStartupPathをちゃんと取得する | OITA: Oika's Information Technological Activities

WPFでループ再生

でもやっぱり音楽のループ再生をしたいなということになり、Sound.Playではできないようなので別の方法を探す
WindowsMediaPlayerを利用したものが楽そう
COMコンポーネントを追加する方法も紹介されていたけど、今回はMediaPlayerのフォームへの配置は必要なかったし
そもそも互換性的にアウトと警告がでたので参照の追加に切り替え
"C\Windows\System32\wmp.dll"を参照に追加すると、WMPLibが参照に追加される

var player = new WMPLib.WindowsMediaPlayer();
// ループ再生を指定
player.settings.setMode("loop", true);
// 通常は自動再生にファイルを指定すればループ再生がはじまる
player.URL = @"C:\test.mp3";

// その他の基本操作
player.settings.setMode("loop", false); // ループ再生解除
player.controls.play(); // 再生
player.controls.stop(); // 停止(再生中停止すればplay()で頭から再生)
player.controls.pause();// ポーズ(play()で再開)
player.settings.volume = 10; // 0から100

参考
C#で、BGMとしてmp3の音楽をループで再生するにはどうしたらいいですか... - Yahoo!知恵袋

いい感じにループ再生してくれて満足
書き方も簡単だし基本的な機能は揃ってるし今度からこれを使うことにしよう
音はここからもらいました
クレジットの明記とかは必要ないっぽいけど良さげだったのでメモ
www.kurage-kosho.info