Как я могу воспроизвести музыкальную ноту с помощью NAudio (или иначе) на C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу воспроизвести музыкальную ноту с помощью NAudio (или иначе) на C#?

Сообщение Anonymous »

Я нашел NAudio для Winforms. Есть ли у кого-нибудь пример того, как воспроизвести ноту с помощью NAudio (или каким-либо другим способом)? Я надеюсь, что это будет что-то вроде:

Код: Выделить всё

NAudio.PlayNote(28, 100); // 28 == 41.203 == Open E String on a bass
...первый аргумент — это MIDI-номер ноты, а второй — количество миллисекунд для ее воспроизведения.
Я понимаю, что это хотя, вероятно, не все так просто; может ли кто-нибудь указать мне правильное направление?
ОБНОВЛЕНИЕ
Когда я пытаюсь использовать NAudio.Midi, как предложено ниже, я получите это в предложении using:
Изображение
< /p>
...и это при попытке вызвать этот метод в коде:
Изображение

ОБНОВЛЕНИЕ 2
Вот ошибка, которую я получаю, когда пытаюсь добавьте использование:
Изображение

...а вот пакет в моем решении (это Winforms); я пропустил свой шаг или что-то еще?
Изображение

ОБНОВЛЕНИЕ 3
Нужно ли мне устанавливать дополнительные пакеты? Когда я открываю «Управление пакетами NuGet», он показывает, что NAudio.WinForms установлен, но есть также несколько «переходных пакетов» (6). Нужно ли мне также устанавливать эти пакеты (MS и NAudio)?
ОБНОВЛЕНИЕ 4
В консоли диспетчера пакетов я ввел Install-Package NAudio и, похоже, это сработало. Завтра я выложу код в ответ...
ОБНОВЛЕНИЕ 5
Я получаю сообщения об ошибках "Тип или имя пространства имен «NoteOffEvent» не найдено (вам не хватает директивы using или ссылки на сборку?)"
Это мой соответствующий код:

Код: Выделить всё

using System.Windows.Forms;
using System.Collections;
using System.Threading.Channels;
using NAudio.Midi;
using NAudio.Wave;

namespace EarTrainingAndCreativityForBassGtr_VS2022
{
public partial class Form1 : Form
{
int NoteToPlay = 0;
int wrongGuesses = 0;

private System.Windows.Forms.Timer noteOffTimer;
private MidiOut midiOut;

public Form1()
{
InitializeComponent();
midiOut = new MidiOut(0);
noteOffTimer = new System.Windows.Forms.Timer();
noteOffTimer.Tick += NoteOffTimer_Tick;
}

private void PlayMidiNote(int note, int velocity, int duration)
{
var noteOn = new NoteOnEvent(0, 1, note, velocity, 0);
midiOut.Send(noteOn.GetAsShortMessage());

noteOffTimer.Interval = duration;
noteOffTimer.Start();
}

private void NoteOffTimer_Tick(object sender, EventArgs e)
{
noteOffTimer.Stop();
var noteOff = new NoteOffEvent(0, 1, 28, 100, 0);
midiOut.Send(noteOff.GetAsShortMessage());
}

private void btnPlayNote_Click(object sender, EventArgs e)
{
ClearPreviousVals();
btnPlayNote.Enabled = false;
int[] randomNotes = GetFourRandomNumbers(28, 67);
NoteToPlay = randomNotes[0];

// now play that note
using (var midiOut = new MidiOut(0)) // 0 is the device number, adjust as needed
{
// Send a NoteOn event to start the note
var noteOn = new NoteOnEvent(0, 1, NoteToPlay, 100, 0); // channel 1,               NoteToPlay, velocity 100, at time 0
midiOut.Send(noteOn.GetAsShortMessage());

// Wait for the duration of the note
//System.Threading.Thread.Sleep(1000); // 1000ms = 1 second
System.Windows.Forms.

// Send a NoteOff event to stop the note
var noteOff = new NoteOffEvent(0, 1, 28, 100, 0); // channel 1, note 28,            velocity 100, at time 0
midiOut.Send(noteOff.GetAsShortMessage());
}
radbtn1.Checked = false;
radBtn2.Checked = false;
radbtn3.Checked = false;
radbtn4.Checked = false;
}

private void ClearPreviousVals()
{
radbtn1.Text = "Note 1";
radbtn1.Tag = null;
//rest elided
}

private string ConvertNoteNumberToNoteName(int noteToPlay)
{
if (noteToPlay == 28) return "E1";
// .... elided
else return "Bad arg to ConvertNoteNumberToNoteName() — not within the expected bounds";
}

private int[] GetFourRandomNumbers(int LowestVal, int HighestVal)
{
// elided
}

private void radbtn1_Click(object sender, EventArgs e)
{
if (radbtn1.Tag == null) return;
bool correctChoice = NoteToPlay.ToString() == radbtn1.Tag.ToString();
if (correctChoice)
{
MessageBox.Show("Correct! You chose the correct note after " +                  wrongGuesses.ToString() + " incorrect choices!");
btnPlayNote.Enabled = true;
}
else
{
wrongGuesses = wrongGuesses + 1;
MessageBox.Show("Wrong choice.  Try again.");
};
}

private void radBtn2_Click(object sender, EventArgs e)
{
// elided
}

private void radbtn3_Click(object sender, EventArgs e)
{
// elided
}

private void radbtn4_Click(object sender, EventArgs e)
{
// elided
}
}
}
А еще для этой строки кода:

Код: Выделить всё

var noteOff = new NoteOffEvent(0, 1, 28, 100, 0);
Я получаю сообщение "Тип или имя пространства имен 'var' не существует в пространстве имен 'System.Windows.Forms' (вам не хватает ссылки на сборку?)< /em>"
ОБНОВЛЕНИЕ 6
Мое приложение ориентировано на .NET Framework 8:
Изображение

NoteOffset отсутствует в списке NAudio.Midi:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/782 ... rwise-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу воспроизвести музыкальную ноту с помощью NAudio (или иначе) на C#?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Нулевая ссылка при попытке воспроизвести звук с помощью NAudio на выходе ASIO.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать секвенированную музыкальную систему в реальном времени в C ++ (не потоковая передача)?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Получить музыкальную обложку от Telegram от WtelegramClient
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как получить частоту и ноту во флаттер iOS
    Anonymous » » в форуме IOS
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»