2011-01-08 5 views
4

Я создаю приложение Windows Phone 7, которое воспроизводит музыкальные ноты. Я хотел бы найти хорошие файлы .wav, .mp3 или .midi, которые я могу использовать. Я огляделся, но ничего не нашел. Любые предложения о том, где искать?Найти мелодии для нескольких октав музыкальных нот?

Я также посмотрел на .NET frameworks, такие как NAudio и Midi.NET, чтобы узнать, могу ли я генерировать тоны программно, но я не мог понять, как это сделать.

ответ

1

MIDI-файлы не содержат звуков, они просто описывают последовательность заметок (и другие музыкальные элементы управления). MIDI-драйвер компьютера должен позаботиться о том, чтобы на самом деле производить звук. Если на вашем телефоне Windows есть драйвер, вы должны использовать Midi.NET, чтобы сказать «играть C на x секунд», и это произойдет.

Если нет, вы можете синтезировать чистые тона, используя простую синусоидальную функцию для генерации осциллограмм. Для реальных инструментов я не знаю каких-либо репозиториев - их хорошо записывать требует дорогостоящего оборудования и усилий, поэтому они редко доступны свободно.

3

Вы можете создать WAV файлы самостоятельно, используя NAudio с помощью методов, описанных в этих статьях:

и здесь немного пример программы, чтобы вы начали, что вычисляет частоту на основе октавы и полутона с 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

Google для «бесплатных SoundFonts», чтобы найти индивидуально записанные ноты инструмента для фортепиано, флейты, скрипки, барабанов и т.д.

Soundfont является общим форматом для обмена бесплатно аудио файлов, предназначенные для использования в samplers. Как правило, качество всего, что вы найдете в свободном доступе, будет варьироваться от непригодного к разумному с несколькими замечательными исключениями высокого качества.

Большинство саундфонов не будут содержать отдельные аудиофайлы для каждой заметки. Чаще всего soundfonts будет содержать один образец для каждой октавы. В этом случае ваше приложение должно будет иметь возможность сдвигать ноты заметок на правильную частоту. (Это не так сложно сделать и является нормальным подходом для samplers.)

Синтез (генерирование тонов программно) - я не знаю, что делает ваше приложение, но ... синус-сигналы - это простые звуки и но скоро станет скучно слышать. Более интересные звуки могут быть созданы, но код синтеза звука быстро усложняется. Я бы не рекомендовал писать собственный код синтеза, если он не является основной частью вашего приложения. IMHO было бы гораздо лучше использовать воспроизведение образца или использовать MIDI (если Windows Phone 7 имеет хорошую библиотеку воспроизведения MIDI).

Soundfont Archive