#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, у меня нет никаких других проблем. Если ваша проблема решена, вы можете нажать «
», чтобы отметить соответствующий ответ в качестве ответа.