Программное обеспечение для создания аудио или библиотека .NET - PullRequest
4 голосов
/ 31 августа 2009

Мне нужно иметь возможность проигрывать определенные тоны в приложении на c #. Мне все равно, генерирует ли он их на лету или воспроизводит их из файла, но мне просто нужен НЕКОТОРЫЙ способ генерировать тоны, которые имеют не только переменную громкость и частоту, но и переменный тембр. Было бы особенно полезно, если бы все, что я использовал для генерации этих тонов, имело бы много предустановок тембра, и было бы еще более удивительно, если бы все эти тембры не звучали как миди-иш (то есть некоторые из них звучали так, как если бы записи реальных инструментов).

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 31 августа 2009

Вы могли бы взглянуть на мой вопрос Создание синусоидальной или прямоугольной волны в C #

Использование NAudio в частности было отличным выбором

2 голосов
/ 03 октября 2013

Эта статья помогла мне с чем-то похожим: http://social.msdn.microsoft.com/Forums/vstudio/en-US/18fe83f0-5658-4bcf-bafc-2e02e187eb80/beep-beep

В частности, это звуковой класс:

public class Beep
{
  public static void BeepBeep(int Amplitude, int Frequency, int Duration)
  {
    double A = ((Amplitude * (System.Math.Pow(2, 15))) / 1000) - 1;
    double DeltaFT = 2 * Math.PI * Frequency / 44100.0;

    int Samples = 441 * Duration / 10;
    int Bytes = Samples * 4;
    int[] Hdr = {0X46464952, 36 + Bytes, 0X45564157, 0X20746D66, 16, 0X20001, 44100, 176400, 0X100004, 0X61746164, Bytes};
    using (MemoryStream MS = new MemoryStream(44 + Bytes))
    {
      using (BinaryWriter BW = new BinaryWriter(MS))
      {
        for (int I = 0; I < Hdr.Length; I++)
        {
          BW.Write(Hdr[I]);
        }
        for (int T = 0; T < Samples; T++)
        {
          short Sample = System.Convert.ToInt16(A * Math.Sin(DeltaFT * T));
          BW.Write(Sample);
          BW.Write(Sample);
        }
        BW.Flush();
        MS.Seek(0, SeekOrigin.Begin);
        using (SoundPlayer SP = new SoundPlayer(MS))
        {
          SP.PlaySync();
        }
      }
    }
  }
}

Может использоваться следующим образом

Beep.BeepBeep(100, 1000, 1000); /* 10% volume */
0 голосов
/ 01 сентября 2009

Чтобы ваши сгенерированные тоны не звучали как «midi-ish», вам придется использовать реальные сэмплы и воспроизводить их. Попробуйте найти хороший банк образцов реальных инструментов, например, http://www.sampleswap.org/filebrowser-new.php?d=INSTRUMENTS+single+samples%2F

Затем, когда вы хотите сочинить мелодию из них, просто чередуйте частоту воспроизведения относительно исходной частоты сэмпла.

Пожалуйста, напишите мне, если вы нашли этот ответ полезным.

0 голосов
/ 31 августа 2009

Существует популярная статья о CodeProject по следующим направлениям: http://www.codeproject.com/KB/audio-video/CS_ToneGenerator.aspx

Вы также можете проверить эту тему: http://episteme.arstechnica.com/eve/forums/a/tpc/f/6330927813/m/197000149731

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...