2011-11-09 12 views
15

Sto provando a costruire un pianoforte virtuale in C# e voglio un modo per creare una scala di note musicali da zero.Come creare un suono da zero C#

So che posso semplicemente trovare o creare un gruppo di file .wav, 1 per ogni nota, ma questo creerà troppo spazio sull'hard disk dell'utente e non sarà molto intuitivo per me stesso in futuro.

Quindi c'è un modo per creare un suono corretto - ad esempio B flat, in C# senza usare un file .wav, tutto in codice con C#, e se no, c'è un modo per farlo in una lingua diversa - C++.

Grazie, ho cercato di renderlo il più chiaro possibile.

+2

+1 per una domanda interessante - So che è possibile ma non ho la minima idea di come farlo :) Buona fortuna! –

+0

+1 anche se i file '.wav' non occupano molto spazio, ci deve essere un modo per fare a meno di loro – Dani

+1

[Wikipedia] (http://en.wikipedia.org/wiki/Note#Note_frequency_.28hertz.29) voce su come convertire le note musicali in una frequenza che puoi collegare ai tuoi generatori sonori. – user786653

risposta

7

penso che questo sembra che dovrebbe iniziare:

http://blogs.msdn.com/b/dawate/archive/2009/06/24/intro-to-audio-programming-part-3-synthesizing-simple-wave-audio-using-c.aspx

EDIT: Vorrei aggiungere che di generazione di suoni senza .wav campioni ed emulare un pianoforte sono in contrasto con l'altro.

Se si desidera ottenere un suono di pianoforte "reale", è meglio lavorare con i campioni (tenerli in memoria se non si desidera tenerli nel filesystem). Se vuoi semplicemente un modo semplice per emettere note accurate (che non assomigliano a un vero pianoforte), farlo in modo programmatico è la strada da percorrere!

+0

Grazie, sembra la cosa di cui ho bisogno. Ho una lunga strada da percorrere! –

+0

+1 Principalmente perché il tuo nome è un omaggio a uno dei miei brani musicali preferiti ... –

+0

@Dommer Grazie, anche uno dei miei. Supponendo che tu ti stia riferendo alla sua più famosa _Toccata_ ovviamente! – Widor

0

Si potrebbe voler dare un'occhiata al MIDI.

C'è un windows API che è possibile includere in C++, quindi esporre un'interfaccia gestita che è possibile utilizzare in C#.

0

Forse l'utilizzo di una libreria MIDI può essere d'aiuto? Non mi interessa, ma se non vuoi usare i file audio è l'unica cosa che mi viene in mente. C'è una domanda al riguardo here.

0

Here si trova un articolo che include la fonte su come creare il suono del piano da zero per almeno un ottavo di note musicali (è estensibile).

4

Se si desidera emulare un piano in modo specifico, sono disponibili solo due opzioni, una delle quali consiste nell'utilizzare i campioni e l'altra è physical modelling. La modellazione fisica richiede alcune conoscenze piuttosto avanzate di DSP (filtraggio, convoluzione, ecc.) E un pianoforte sarebbe uno strumento impegnativo da affrontare ma è stato fatto da persone del calibro Pianoteq

In materia di campioni, per creare un un piano che è ovunque vicino ad un analogo convincente, idealmente, avrai bisogno di più di un campione per nota per diverse velocità con dissolvenze incrociate tra di loro, ma probabilmente puoi usare un campione su un intervallo limitato di note per ridurre il numero totale di campioni.