gpt4 book ai didi

c++ - Windows 窗体声音文件不存在以及如何检索嵌入的声音 (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 13:35:09 25 4
gpt4 key购买 nike

声音文件位于我的项目文件夹中,我将声音文件添加到我的资源文件中。
当我在 visual studio 2012 中运行调试器时,我没有收到任何错误。
当我运行位于 Debug 文件夹中的应用程序时出现错误。

但是,当我包含文件位置目录路径时,我没有收到任何错误。

Sound file not located

namespace FORMv2 {

//omitted code

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
player = gcnew SoundPlayer;
//no error
//player->SoundLocation = "c/<path goes here>/soundBit.wav";
// error
player->SoundLocation = "soundBit.wav";
player->PlayLooping();
}
private: System::Void checkBoxEnable_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if (checkBoxEnable->Checked)
{
player->Stop();
}
else
{
player->Play();
}
}
};
}

最佳答案

我想通了。
我找到了这个网站:
https://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath%28v=vs.110%29.aspx
这给了我应用程序所在的路径。我将 .wav 文件移动到该路径并添加了以下语句:

player->SoundLocation = String::Concat(Application::StartupPath+"/soundBit.wav");

编辑:
找到了一个更好的方法,那就是将声音嵌入到 Form1.resX 和
检索嵌入的声音。
我不得不将文件名更改为“$this.soundBit”并添加以下代码:

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
ComponentResourceManager^ resources = (gcnew ComponentResourceManager(Form1::typeid));
SoundPlayer^ player;
Stream^ s = (cli::safe_cast<MemoryStream^ >(resources->GetObject(L"$this.soundBit")));
player = gcnew SoundPlayer(s);
player->Play();
}

和这个命名空间:

using namespace System::ComponentModel; // For ComponentResourceManager
using namespace System::Media; // For SoundPlayer
using namespace System::IO; // For MemoryStream

关于c++ - Windows 窗体声音文件不存在以及如何检索嵌入的声音 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com