Qualcuno conosce un modo ragionevole per creare un'onda sonora ARBITRARY in C# e riprodurla dagli altoparlanti?Generazione del suono di basso livello in C#?
Questo problema è tornato di tanto in tanto per anni, finisco sempre per rinunciarvi dopo un sacco di insuccessi senza trovare una soluzione.
Quello che voglio fare è come un reverse-visualizer, cioè, non voglio generare "numeri" dal suono, voglio generare il suono dai numeri.
Come ottenere una funzione che fornisco con frequenza di campionamento, dimensione del campione e dati audio (una serie di interi per esempio), e genererebbe il file wav appropriato da esso (la riproduzione del suono in tempo reale sarebbe l'ideale , ma sarei più che contento anche di questo).
So che le specifiche del file wav sono in tutto l'interweb, e ho fatto diversi tentativi di creare la funzione di cui sopra, ha avuto un certo successo per le basse frequenze, ma una volta che inizio a scherzare con bit per campione ecc ... diventa un ENORME , pasticcio incontrollabile.
Questo non è già stato fatto in alcun modo? Non mi dispiacerebbe che usi, a patto che ci sia un wrapper gestito .NET (e posso accedervi dal VS più recente al momento). XNA non supporta l'audio di basso livello in questo modo. Ho anche trovato diversi esempi che pretendono di ottenere qualcosa di simile, ma non funzionano affatto o fanno qualcosa di completamente diverso.
Grazie.
Sembra davvero fantastico, e mi vergogno davvero ma non ho ancora avuto il tempo di giocarci davvero. Solo una domanda: è facile renderlo 4 byte per campione? – jssyjrm
Puoi renderlo 4 byte per campione ma non so se Windows lo riprodurrà. Potrebbe, io proprio non lo so. Ad ogni modo, se vuoi fare questo cambia tutti i riferimenti a sizeof (breve) a sizeof (int), cambia il tipo di campione in int, cambia il fattore di scala (short.MaxValue) in int.MaxValue e fissa il ciclo che riempie l'array di byte per aggiungere quattro byte per campione. Ma sarei sorpreso se riesci a sentire una differenza. – arx
Grazie mille per questo. Come posso aggiungere qui la funzionalità stop (e forse pausa)? Presumo che avrei bisogno di un assistente in background in modo che il resto della GUI sia libero per l'input. Che tipo di codice sarebbe un 'stop sound'? –