如何使用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 上的几个问题和答案后,我想出了解决问题的方法。
- 创建一个 .config 文件并将其放在 .exe 文件所在的文件夹中。
- 将 .config 文件命名为任何 .exe 文件的名称,包括扩展名(例如 MusicPlayer.exe 和 MusicPlayer.exe.config)
将以下代码粘贴到 .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 下看到它。
我正在编写一个简单的音乐播放器,我需要能够暂停音乐,所以我尝试使用 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 上的几个问题和答案后,我想出了解决问题的方法。
- 创建一个 .config 文件并将其放在 .exe 文件所在的文件夹中。
- 将 .config 文件命名为任何 .exe 文件的名称,包括扩展名(例如 MusicPlayer.exe 和 MusicPlayer.exe.config)
将以下代码粘贴到 .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 下看到它。