【问题标题】:How to play a sound effect along a morse code letter如何沿着莫尔斯电码字母播放音效
【发布时间】:2020-09-07 21:01:06
【问题描述】:

所以我在 C# Visual Studio 中编写了一个莫尔斯电码翻译器,它接受输入文本,然后将其作为莫尔斯电码保存到一个文本文件中。但是,我正在尝试编写代码来播放每个字母的声音,通过我的 Visual Studio 项目中的每个字母的 .wav 文件来实现这一点。在这段代码中,我有一个将英文字母单词与其各自的摩尔斯电码字母相匹配的翻译器,我正在尝试让各自的 .wav 文件与翻译后的字母一起播放。

代码如下:

private static void InitializeDictionary()
{
    _morseAlphabetDictionary = new Dictionary<char, string>()
                               {
                                   {'a', ".-"},
                                   SoundPlayer snd = new SoundPlayer(@"C:\Users\keife\source\repos\MorseCodeTranslator\MorseCodeTranslator\AnyConv.com__A_morse_code.wav");
    snd.Play();
    { 'b', "-..."},
                                   {'c', "-.-."},
                                   {'d', "-.."},
                                   {'e', "."},
                                   {'f', "..-."},
                                   {'g', "--."},
                                   {'h', "...."},
                                   {'i', ".."},
                                   {'j', ".---"},
                                   {'k', "-.-"},
                                   {'l', ".-.."},
                                   {'m', "--"},
                                   {'n', "-."},
                                   {'o', "---"},
                                   {'p', ".--."},
                                   {'q', "--.-"},
                                   {'r', ".-."},
                                   {'s', "..."},
                                   {'t', "-"},
                                   {'u', "..-"},
                                   {'v', "...-"},
                                   {'w', ".--"},
                                   {'x', "-..-"},
                                   {'y', "-.--"},
                                   {'z', "--.."},
                                   {'0', "-----"},
                                   {'1', ".----"},
                                   {'2', "..---"},
                                   {'3', "...--"},
                                   {'4', "....-"},
                                   {'5', "....."},
                                   {'6', "-...."},
                                   {'7', "--..."},
                                   {'8', "---.."},
                                   {'9', "----."}
                               };
}

但是,代码会产生这个错误:

'SoundPlayer' 是一种类型,在给定的上下文中无效

任何建议如何正确格式化?非常感谢。

修改后的代码

     {'a', new MorseMapping(".-", 
      
     @"C:\Users\keife\source\repos\MorseCodeTranslator\MorseCodeTranslator\AnyConv.com__A_morse_code.wav")},
_morseAlphabetDictionary['a'].Player.Play();

   

【问题讨论】:

  • 您将该代码放入集合初始化程序中。那不是那些工作的方式。您需要拥有另一个将字符与声音相关联的字典,或者在该字典中具有将字符与莫尔斯电码 声音相关联的数据结构。 播放声音完全在另一个页面上。
  • 您的声音播放器只能播放 1 个文件吗?一个实例一个文件?
  • 欢迎来到 Stack Overflow。您可以考虑将帮助您解决问题的答案标记为已接受。我也在谈论您在 StackOverflow 上发布的其他问题。 Here is shown how to do it。快乐编码

标签: c# visual-studio morse-code


【解决方案1】:

您正在尝试创建 SoundPlayer 并将其插入到字典的初始化块中。这就是您收到错误的原因,因为字典需要一个字符字符串对。放在字典声明之前:

SoundPlayer snd = new SoundPlayer(@"C:\Users\keife\source\repos\MorseCodeTranslator\MorseCodeTranslator\AnyConv.com__A_morse_code.wav");
_morseAlphabetDictionary = new Dictionary<char, string>()
                           {
                               {'a', ".-"},
                               

第二件事是,我建议您不仅映射莫尔斯字母,而且已经映射到相应的 wav 文件或整个 soudnplayer 的路径。您可以为其使用自定义类

public class MorseMapping
{
    public string MorseLetter {get; set;}
    public SoundPlayer Player {get; set;}

    public MorseMapping(string letter, string filePath)
    {
         this.MorseLetter = letter;
         this.Player = new SoundPlayer(filePath):
    }
}

现在你可以在字典中使用这个类了:

_morseAlphabetDictionary = new Dictionary<char, MorseMapping>()
                           {
                               {'a', new MorseMapping(".-", @"C:\myPath\fileForA.wav")},
                               //.. here goes  the rest
                           }; // end of initialization block!!!

现在,如果您想为a 播放声音,请提取您的映射并使用声音播放器:

_morseAlphabetDictionary['a'].Player.Play();

编辑:非常重要!:在字典的初始化块之外调用播放器。不要将除字典项 init 之外的任何其他代码放在初始化块中!

【讨论】:

  • 我刚刚在“已编辑代码”下插入了它,但它现在返回此错误:“字符串”不包含“播放器”的定义,并且没有可访问的扩展方法“播放器”接受类型的第一个参数可以找到“字符串”(您是否缺少 using 指令或程序集引用?非常感谢。这是为什么?
  • @KeiferBly,梦珠的解决方案很好。根据我的测试,没有错误。你能分享你的错误图片吗?
  • @KeiferBly 你把字典的类型改成= new Dictionary&lt;char, MorseMapping&gt;()了吗?还是还是原来版本的new Dictionary&lt;char, string&gt;()
  • 是的。根据要求,这是照片。 drive.google.com/file/d/1CXH-ck24_YZ63tZG2OnFhyLRaBZNd_7U/… 抱歉不允许我附加到 cmets。 “player.play”是出现此错误的地方。非常感谢。
  • @KeiferBly 显然您没有阅读我回答的第一部分。你不能把这行放到{....}里面,它是字典的初始化块!
【解决方案2】:

根据您在评论中显示的错误,您可以尝试以下代码来解决问题。

请不要在字典中调用方法Player.Play()

代码:

 class Program
    {
        static void Main(string[] args)
        {
            IntializeDictionary();
        }

        private static void IntializeDictionary()
        {
            Dictionary<char, MorseMapping> _morseAlphabetDictionary = new Dictionary<char, MorseMapping>()
            { {'a',new  MorseMapping(".-", @"C:\myPath\fileForA.wav") }
               //.. here goes  the rest
            };

            _morseAlphabetDictionary['a'].Player.Play();
        }

        public class MorseMapping
        {
            public string MorseLetter { get; set; }
            public SoundPlayer Player { get; set; }

            public MorseMapping(string letter, string filePath)
            {
                this.MorseLetter = letter;
                this.Player = new SoundPlayer(filePath);
        }
        }
    }

【讨论】:

  • 谢谢,这似乎奏效了!如果还有问题会通知。谢谢
  • @KeiferBly,我没有任何其他问题。如果您的问题已经解决,您可以点击“✔”将相应的回复标记为答案。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多