找几个八度音符的音调?

时间:2011-01-08 21:02:36

标签: windows-phone-7

我正在构建一个播放音符的Windows Phone 7应用程序。我想找一些我可以使用的好的.wav,.mp3或.midi文件。我环顾四周,但没找到任何东西。有关于在哪里寻找的建议吗?

我还看过像NAudio和Midi.NET这样的.NET框架,看看我是否能够以编程方式生成音调,但我一直无法弄清楚如何去做。

3 个答案:

答案 0 :(得分:3)

您可以使用NAudio使用这些文章中描述的技术自行创建WAV文件:

这里有一个小样本程序可以让你开始计算基于八度音的频率和带有12音音阶的半音:

private WaveOut waveOut;
private WaveRecorder waveRecorder;

private void Button_Click(object sender, RoutedEventArgs e)
{
    StartStopSineWave();
}

private void StartStopSineWave()
{
    if (waveOut == null)
    {
        int octave = 1;
        int note = 0;
        var sineWaveProvider = new SineWaveProvider32();
        sineWaveProvider.SetWaveFormat(16000, 1); // 16kHz mono
        sineWaveProvider.Frequency = (float)(440 * Math.Pow(2, octave + note / 12.0));
        sineWaveProvider.Amplitude = 0.25f;
        waveRecorder = new WaveRecorder(sineWaveProvider, "sample.wav");
        waveOut = new WaveOut();
        waveOut.Init(waveRecorder);
        waveOut.Play();
    }
    else
    {
        waveOut.Stop();
        waveOut.Dispose();
        waveOut = null;
        waveRecorder.Dispose();
        waveRecorder = null;
    }
}

答案 1 :(得分:1)

MIDI文件不包含声音,它们只描述一系列音符(以及其他音乐控件)。计算机的MIDI驱动程序应该负责实际产生声音。如果您的Windows手机有驱动程序,那么您应该可以使用Midi.NET说“播放C表示x秒”,它会。

如果没有,您可以使用简单的正弦函数合成纯音,以生成波形。对于实际的仪器,我不知道任何存储库 - 记录它们需要昂贵的设备和努力,因此它们很少可以免费获得。

答案 2 :(得分:1)

谷歌为“免费声音字体”找到钢琴,长笛,小提琴,鼓等单独录制的乐器音符。

Soundfont是用于共享专为samplers设计的免费音频文件的常用格式。通常情况下,您可以免费获得的任何物品的质量都会从无法使用到合理,并且会有一些非常高质量的例外情况。

大多数声音字体不会包含每个音符的单独音频文件。更常见的是,声音字体将包含每个八度音程的一个样本。在这种情况下,您的应用程序需要能够将班次音符调整到正确的频率。 (这不是那么难做,而且是samplers的正常方法。)

综合(以编程方式生成音调) - 我不知道你的应用程序做了什么但是...正弦音是简单的声音,很容易创建,但很快就会变得无聊听到。可以创建更有趣的声音,但声音合成代码很快就会变得复杂。除非它是您的应用程序的核心部分,否则我不建议您编写自己的合成代码。恕我直言,使用样本播放或使用MIDI会更好(如果Windows Phone 7有一个好的MIDI播放库)。

Soundfont Archive