0

単純な MP3/WAV メディア プレーヤー領域を含むプログラムを作成しています。

NAudio サンプル プログラムに含まれるコードに従いました。これは、再生可能なオーディオ ファイルをカプセル化するために作成したクラスです。

public sealed class PlaybackContext : IDisposable {

    private String         _fileName;
    private DirectSoundOut _dsoundOut;
    private WaveStream     _waveStream;

    public PlaybackContext(String fileName) {

        _fileName  = fileName;
        _dsoundOut = new DirectSoundOut( DirectSoundOut.DSDEVID_DefaultPlayback );

        String ext = Path.GetExtension( fileName );
        if( ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase) ) {

            _waveStream = new Mp3FileReader( fileName );

        } else if( ext.Equals(".wav", StringComparison.OrdinalIgnoreCase) ) {

            _waveStream = new WaveFileReader( fileName );
            switch( _waveStream.WaveFormat.Encoding ) {
                case WaveFormatEncoding.Pcm:
                case WaveFormatEncoding.IeeeFloat:
                    break;
                default:
                    _waveStream = new BlockAlignReductionStream( WaveFormatConversionStream.CreatePcmStream( _waveStream ) );
                    break;
            }
        }

        _dsoundOut.Init( _waveStream );
    }

    public void Play() {

        _dsoundOut.Play();
    }
            // hidden are the Pause/Stop/Dispose methods

MP3 ファイルでは問題なく動作しますが、Wave ファイルを再生しようとすると、次の例外が発生します。

Object contains non-primitive or non-blittable data.
   System.ArgumentException
   at System.Runtime.InteropServices.GCHandle.InternalAlloc(Object value, GCHandleType type)
   at System.Runtime.InteropServices.GCHandle.Alloc(Object value, GCHandleType type)
   at NAudio.Wave.DirectSoundOut.InitializeDirectSound()
   at NAudio.Wave.DirectSoundOut.PlaybackThreadFunc()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Google で何も見つけられず、私のコードは x86 用にコンパイルされています (したがって、これは 64 ビットの問題ではありません)。そうでなければ私は立ち往生しています。

何か案は?

4

0 に答える 0