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

plupiseo  于 2022-12-30  发布在  .NET
关注(0)|答案(2)|浏览(153)

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

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();    
             }           
         }
    };
}
dauxcl2d

dauxcl2d1#

我能想出来。
我找到了这个网站:
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
btxsgosb

btxsgosb2#

通过右键单击项目名称〉〉属性〉〉资源〉〉选择音频〉〉拖动.wav文件,将文件包含在项目的资源文件夹中。
然后,您可以从内存流播放文件:

public void Play()
{
    SoundPlayer player = new SoundPlayer();
    player.Stream = YOUR_PROJECT_NAME.Properties.Resources.YOUR_FILE_NAME;
    player.Play();
}

溶液取自:Please be sure a sound file exists at the specified location

相关问题