- PR -

メモリ上のWaveデータの再生

1
投稿者投稿内容
ねこねこ
会議室デビュー日: 2007/08/30
投稿数: 7
投稿日時: 2008-09-18 15:32
OS:WindowsXP
言語:C#2005

はじめまして。みなさん知恵を貸してください。

現在、メモリ上(byte[])のWavデータが存在しますが
これを再生しようとして困っています。

元々はフォルダ内あるデータを指定して再生を行っていたのですが、
フォルダには作成したくないとのことで、メモリ上に持つことになりました。

元のソースでは再生も途中再生も出来ていたのですが、
今回メモリ上のデータを再生するとなると、困ってしまって・・・

現在は

private System.Runtime.InteropServices.GCHandle gcHandle;

[DllImport("winmm.dll", EntryPoint = "PlaySound" )]
private static extern bool PlaySound(
   IntPtr pszSound,
   IntPtr hModule,
   int dwFlags);

public void OpenSound(byte[] file)
{
   this.gcHandle = System.Runtime.InteropServices.GCHandle.Alloc(
      file, System.Runtime.InteropServices.GCHandleType.Pinned);
   PlaySound(this.gcHandle.AddrOfPinnedObject(),
      IntPtr.Zero, 0x0004 | 0x0001);
}

このような形で再生をしようしています。

しかし、何度やっても音が一瞬しか出ない・・・
また、調べてみても途中再生等が無い・・・

と困っています。

どなたか、参考になるサイトかソースをお願いします。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-09-18 17:26
VC#2005とのことですので、.NET Framework2.0ですから、
System.Media.SoundPlayerクラスとSystem.IO.MemoryStreamクラスを
使って簡単に実現できます。

byte[]を元にMemoryStreamのインスタンスを生成し、
これをSoundPlayerのStreamを引数に取るコンストラクタに渡して、
SoundPlayerのインスタンスを生成します。

後は、Play/PlayAsyncメソッドで音声を再生します。
1

スキルアップ/キャリアアップ(JOB@IT)