我正在构建一个播放音符的Windows Phone 7应用程序。我想找一些我可以使用的好的.wav,.mp3或.midi文件。我环顾四周,但没找到任何东西。有关于在哪里寻找的建议吗?
我还看过像NAudio和Midi.NET这样的.NET框架,看看我是否能够以编程方式生成音调,但我一直无法弄清楚如何去做。
答案 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播放库)。