1

バーコードのスキャンを担当するCompactFramework3.5アプリケーションがあります。状況に応じて再生するサウンドは3つあるので、SoundPlayerオブジェクトの周りにラッパークラスを作成し、その上でPlayメソッドを呼び出しました。

public static class SoundEffectsPlayer
{
    private static readonly SoundEffect _alert;

    static SoundEffectsPlayer()
    {
        // This will cause the SoundEffect class to throw an error that the Uri 
        // Format is not supported, when new SoundPlayer(location) is called.
        _alert = new SoundEffect("SoundEffects/alert.wav");
    }

    public static SoundEffect Alert
    {
        get { return _alert; }
    }
}

public class SoundEffect
{
    private readonly SoundPlayer _sound;

    public SoundEffect(string location)
    {
        _sound = new SoundPlayer(location);
        _sound.Load();
    }

    public bool IsLoaded
    {
        get { return _sound.IsLoadCompleted; }
    }

    public void Play()
    {
        _sound.Play();
    }
}

バーコードをスキャンする必要があるたびに(1時間に数百回)SoundPlayerを作成しないというアイデアでした。したがって、すでにロードされているファイルに対してPlayを呼び出すことができます。

alert.wavファイルは、アプリケーションが参照するライブラリプロジェクトのルートにあるSoundEffectsフォルダーにあり、埋め込みリソースとして設定されています。wavファイルをロードするには、SoundEffectsクラスに何を渡す必要がありますか?wavファイルをライブラリプロジェクトに埋め込む必要がありますか?

また、wavファイルの再生を処理する方法に何か問題があることに気付いた人はいますか?このようなことを試みるのはこれが初めてなので、改善のための提案を受け付けています。

4

1 に答える 1

3

うーん。私はこれまでSoundPlayerを使用したことがありません。これは、coredll関数PlaySoundの単なるラッパーだと思います。しかしとにかく、引数としてファイルパスが必要になると思います。

したがって、埋め込みリソースで機能させるには、ファイルをディスクに保存してから再生する必要があります。埋め込まれたリソースのアイデアを破棄して、別のアイテムとしてデプロイする方がおそらく簡単でしょう。メインプロジェクトに.wavを含め、「コンテンツ」と「新しい場合はコピー」に設定してから、サウンドプレーヤーの呼び出しでファイルとして参照します。

WindowsCEでは、常にフルパスも必要であることを忘れないでください。現在実行中の.exeからの相対パスは、CEでは機能しません。

リソースへのパスを作成するために「現在地」を見つける必要がある場合は、この質問への回答を参照してください。

于 2009-11-30T19:16:22.203 に答える