今回はmciSendStringについての質問なのですが、
再生スピードを変更をすると再生位置が狂ってしまいます。
というのは、mciSendString("set my_sound speed 500",null, 0, 0) ;
のようにしてスピードを変えてから再生し、再生中に
mciSendString("status my_sound position", sb, sb.Capacity, 0);
として再生位置を取得しても間違った値(遅すぎる)が返ってきてしまうのです。
分かりづらいと思うのでソース張らせていただきます。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace test
{
public partial class Form1 : Form
{
[DllImport("winmm.dll")]
extern static int mciSendString(string s1, StringBuilder s2, int i1, int i2);
StringBuilder sb = new StringBuilder(32);
float ms = 0.0f;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
mciSendString("open \"" + "xxx.mp3" + "\" alias my_sound", null, 0, 0);
mciSendString("set my_sound speed 500",null, 0, 0) ;
// 再生を開始
mciSendString("play my_sound", null, 0, 0);
}
private void timer1_Tick(object sender, EventArgs e)
{
// play 中のファイルの位置を ms単位 で返す
mciSendString("status my_sound position", sb, sb.Capacity, 0);
ms = int.Parse(sb.ToString());
label1.Text = ms.ToString();
}
}
}
(スピードを変えずに再生すると正確に出来るのですが、スローや早送りでは狂いました)
再生時間を正確に表示したいのですが、どなたか教えていただけますでしょうか?
環境はVisual C# 2010で、OSはWin7 Homeです。
よろしくお願いします。