如何使用Microsoft::DirectX::AudioVideoPlayback播放音频?

How to use Microsoft::DirectX::AudioVideoPlayback to play audio?

我正在编写一个简单的音乐播放器,我需要能够暂停音乐,所以我尝试使用 Microsoft::DirectX::AudioVideoPlayback API 来执行此操作,因为 PlaySound 不支持该功能。但是程序不断触发断点并抛出异常。

所以我创建了一个新的空 Visual C++ CLR 空项目,它的表单是空的,只添加了代码来初始化一个新的音频对象并播放一个音频文件,但我仍然遇到同样的异常。出现问题的行是创建音频对象新实例的行。

我对 Visual Studio 不是很有经验,而且我以前从未使用过这个 API。我在项目中添加了对 Microsoft::DirectX 和 Microsoft::DirectX::AudioVideoPlayback .dll 文件的引用,音频文件在目录中。我已经尝试了一些我在网上找到的东西,但没有任何效果。任何帮助将不胜感激!

这是 MyForm.h 文件:

#pragma once

namespace Project3 {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace Microsoft::DirectX::AudioVideoPlayback;

/// <summary>
/// Summary for MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
    MyForm(void)
    {
        InitializeComponent();
        //
        //TODO: Add the constructor code here
        //
    }

protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~MyForm()
    {
        if (components)
        {
            delete components;
        }
    }

private:
    /// <summary>
    /// Required designer variable.
    /// </summary>
    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    void InitializeComponent(void)
    {
        this->components = gcnew System::ComponentModel::Container();
        this->Size = System::Drawing::Size(300,300);
        this->Text = L"MyForm";
        this->Padding = System::Windows::Forms::Padding(0);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

        Audio^ myAudio;

        myAudio = gcnew Audio("Carl Grimes - Carl Poppa.wav", false);
        myAudio->Play();

    }
#pragma endregion
};
}

我收到的错误如下:

An unhandled exception of type 'System.IO.FileLoadException' occurred in 
System.Windows.Forms.dll

Additional information: Mixed mode assembly is built against version 
'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without 
additional configuration information.

在查看了 Whosebug 上的几个问题和答案后,我想出了解决问题的方法。

  1. 创建一个 .config 文件并将其放在 .exe 文件所在的文件夹中。
  2. 将 .config 文件命名为任何 .exe 文件的名称,包括扩展名(例如 MusicPlayer.exe 和 MusicPlayer.exe.config)
  3. 将以下代码粘贴到 .config 文件中

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup>
    </configuration>
    

    您可以通过右键单击解决方案资源管理器中的项目 -> 属性,然后在配置属性 -> 常规中检查您拥有的 .NETFramework 版本。你应该在 Project Defaults -> .NET Target Framework Version 下看到它。