Как воспроизвести звуковой эффект вдоль буквы азбуки Морзе

#c# #visual-studio #morse-code

#c# #visual-studio #азбука Морзе

Вопрос:

итак, я кодирую переводчик азбуки Морзе в C # visual Studio, он принимает вводимый текст, а затем сохраняет его в виде азбуки Морзе в текстовый файл. Тем не менее, я пытаюсь закодировать воспроизведение звука для каждой буквы, добиваясь этого, у меня есть .файл wav для каждой буквы в моем проекте Visual Studio. В этом коде у меня есть переводчик, который сопоставляет английские буквенные слова с соответствующими буквами азбуки Морзе, я пытаюсь использовать соответствующие.файл wav для воспроизведения вместе с переведенной буквой.

Вот код:

 private static void InitializeDictionary()
{
    _morseAlphabetDictionary = new Dictionary<char, string>()
                               {
                                   {'a', ".-"},
                                   SoundPlayer snd = new SoundPlayer(@"C:UserskeifesourcereposMorseCodeTranslatorMorseCodeTranslatorAnyConv.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:UserskeifesourcereposMorseCodeTranslatorMorseCodeTranslatorAnyConv.com__A_morse_code.wav")},
_morseAlphabetDictionary['a'].Player.Play();

   
  

Комментарии:

1. Вы помещаете этот код в инициализатор коллекции. Это не так, как они работают. Вам нужно иметь либо другой словарь, который связывает символы со звуком, либо структуру данных в этом словаре, которая связывает символы с азбукой Морзе и звуком. Воспроизведение звука происходит на совершенно другой странице.

2. может ли ваш soudnplayer воспроизводить только 1 файл? один экземпляр одного файла?

3. добро пожаловать в stack Overflow. Вы могли бы отметить ответ, который помог вам решить вашу проблему, как принятый. Я также говорю о других ваших вопросах, которые вы опубликовали в StackOverflow. Здесь показано, как это сделать . Счастливого кодирования

Ответ №1:

вы пытаетесь создать и вставить SoundPlayer в блок инициализации словаря. Вот почему вы получаете ошибку, потому что словарь ожидает, что там будет пара символ-строка. Поместите его перед объявлением словаря:

 SoundPlayer snd = new SoundPlayer(@"C:UserskeifesourcereposMorseCodeTranslatorMorseCodeTranslatorAnyConv.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:myPathfileForA.wav")},
                               //.. here goes  the rest
                           }; // end of initialization block!!!
  

Теперь, если вы хотите воспроизвести звук для a , извлеките свое отображение и используйте soundplayer:

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

РЕДАКТИРОВАТЬ: очень важно!: вызовите проигрыватель за пределами блока инициализации словаря. Не помещайте никакой другой код, кроме инициализации элементов словаря, внутри блока инициализации!

Комментарии:

1. Я только что вставил это в раздел «отредактированный код», но теперь он возвращает эту ошибку: ‘string’ не содержит определения для ‘Player’, и не удалось найти доступный метод расширения ‘Player’, принимающий первый аргумент типа ‘string’ (вам не хватает директивы using или ссылки на сборку? Большое спасибо. Почему это?

2. @KeiferBly, решение Мончжу очень хорошее. Основываясь на моем тесте, ошибки нет. Можете ли вы поделиться своим изображением ошибки?

3. @KeiferBly вы изменили тип своего словаря на = new Dictionary<char, MorseMapping>() ? или это все еще new Dictionary<char, string>() как в вашей оригинальной версии?

4. ДА. Как и было запрошено, вот фотография. drive.google.com/file/d/1CXH-ck24_YZ63tZG2OnFhyLRaBZNd_7U/… Извините, что не позволил мне прикрепить к комментариям. Эта ошибка отображается в «player.play». Большое спасибо.

5. @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:myPathfileForA.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);
        }
        }
    }
  

Комментарии:

1. Спасибо, кажется, это сработало! Сообщит, если возникнут дополнительные проблемы. Спасибо

2. @KeiferBly, у меня нет никаких других проблем. Если ваша проблема решена, вы можете нажать «✔», чтобы отметить соответствующий ответ в качестве ответа.