Frage

((ausgewählte Antwort - siehe Edit 5 unten).)

Ich brauche einen einfachen rosa-Rauschgenerator in C # zu schreiben. Das Problem ist, ich habe noch nie ein beliebige Audio-Arbeit geleistet, so dass ich weiß nicht, wie mit der Soundkarte zu kommunizieren, usw. Ich weiß, dass ich von der Verwendung von DirectX, meist bleiben will weg, weil ich nicht will eine massive SDK nur für dieses winzige Projekt zum Download bereit.

So habe ich zwei Probleme:

  1. Wie generiere ich Rosa Rauschen?
  2. Wie kann ich es an die Soundkarte streamen?

Bearbeiten : I wirklich einen Generator für rosa Rauschen machen will ... Ich bin mir bewusst, es gibt auch andere Möglichkeiten, um das Root-Problem zu lösen. =)

Edit 2 : Unsere Firewall blockiert Streaming Audio und Video - sonst würde ich gehen Sie einfach auf www .simplynoise.com wie in den Kommentaren vorgeschlagen. : (

Bearbeiten 3 : Ich hat die Erzeugung von weißen charmen Abwärts habe, sowie Ausgabe an die Soundkarte zu senden - jetzt alles, was ich wissen muß, ist, wie man das weiße Rauschen verwandeln sich in lila Geräusch. Oh - und ich will nicht, eine WAV-Datei in einer Schleife, weil jede Anwendung, die ich versucht hat, für Looping zu verwenden, um mit einer kleinen kleinen Pause endet in zwischen den Schleifen, die genug ist schrill in dieser Richtung in erster Linie mich dazu veranlasst zu haben ...

Bearbeiten 4 : ... Ich bin überrascht, so viele Menschen haben in gesprungen sehr explizit nicht eine Frage beantworten. Ich hätte wahrscheinlich eine bessere Antwort bekommen, wenn ich gelogen, warum ich rosa Rauschen brauchen ... Diese Frage ist mehr darüber, wie die Soundkarte zu erzeugen und Strom-Daten, als es im Begriff ist, was für Kopfhörer sollte ich verwenden. Zu diesem Zweck habe ich die Hintergrunddetails herausgeschnitten - Sie es in den Änderungen lesen können ...

Edit 5 : Ich habe Paul Antwort unten ausgewählt, weil der Link gab er gibt mir die Formel weißes Rauschen zu konvertieren in rosa Rauschen (die leicht über den Zufallszahlengenerator erzeugt wird). Zusätzlich dazu verwendete ich Ianier Munozs Codeproject Eintrag „Programmierung Audio-Effekte in C #“ zu lernen, wie zu erzeugen, modifizieren und Tonausgabe Daten an die Soundkarte. Danke Jungs für Ihre Hilfe. =)

War es hilfreich?

Lösung

Vielleicht können Sie die C / C ++ Code umwandeln hier zu C #:

http://www.firstpr.com.au/dsp/pink-noise /

Der einfachste Weg, Sound an die Soundkarte zu erhalten, ist eine wav zu erzeugen (einige hartcodierte Header auszuzuspucken und dann Beispieldaten). Dann können Sie die .wav-Datei abspielen.

Andere Tipps

Rosa Rauschen ist nur weißes Rauschen einer -3dB / Oktave LPF durchsetzen. Sie können weißes Rauschen mit rand () erzeugen (oder eine beliebige Funktion, die gleichmäßig Zufallszahlen erzeugt).

Streaming Sachen an die Soundkarte ist ziemlich trivial, so lange wie Sie Google zur Hand haben. Wenn Sie sich entscheiden DirectX zu vermeiden, sollten Sie Portaudio oder ASIO mit der Soundkarte für die Anbindung ... obwohl ich glaube, du wirst verwenden C haben ++ oder C.

Other than that, warum Zeit Abfälle CPU es Erzeugen? Loop eine verdammt WAV-Datei!

bisschen spät, um dies zu realisieren i, aber jemand über sie nach Antworten kommen, soll wissen, dass rosae Rauschen weißes Rauschen mit -3dB / Oktave, nicht -6, wie oben erwähnt, die tatsächlich braunes Rauschen ist.

Nicht wirklich eine Antwort auf Ihre Frage, aber können Sie nicht nur Musik hören, am besten mit etwas Noise Cancelling-Kopfhörer?

Hier ist ein Beispiel dafür, was die Wiedergabe Faden aussieht. Ich verwende Directsound einen SecondaryBuffer zu schaffen, wo die Proben geschrieben werden. Wie Sie es ist ziemlich einfach sehen:

    /// <summary>
    /// Thread in charge of feeding the playback buffer.
    /// </summary>
    private void playbackThreadFn()
    {
        // Begin playing the sound buffer.
        m_playbackBuffer.Play( 0, BufferPlayFlags.Looping );

        // Change playing state.
        IsPlaying = true;

        // Playback loop.
        while( IsPlaying )
        {
            // Suspend thread until the playback cursor steps into a trap...
            m_trapEvent.WaitOne();

            // ...read audio from the input stream... (In this case from your pink noise buffer)
            Input.Collect( m_target, m_target.Length );

            // ...calculate the next writing position...
            var writePosition = m_traps[ ((1 & m_pullCounter++) != 0) ? 0 : 1 ].Offset;

            // ...and copy audio to the device buffer.
            m_playbackBuffer.Write( writePosition, m_deviceBuffer, LockFlag.None );
        }

        // Stop playback.
        m_playbackBuffer.Stop();
    }

Wenn Sie mehr Details zu müssen, wie es funktioniert Ich bin froh, zu helfen.

Als schnelle und schmutzige Art und Weise, es zu tun, wie wäre es nur ein rosa Rauschen wav in Ihrem Audio-Player Looping? (Ja, ich weiß Teil des Spaßes ist es selber machen ....)

Was ist mit einer MP3-Probe von Rosa Rauschen auf Wiederholung?

könnten Sie Audacity so viel rosa Rauschen zu erzeugen, wie Sie wollen, und dann wiederholen.

Oder Sie könnten in den Quellcode graben und sehen, wie Audacity funktioniert das rosa Rauschen Generation.

Hier ist eine sehr einfache Art und Weise rosa Rauschen zu erzeugen, die zusammen logarithmisch beabstandet viele Wellen nur summiert! Es kann für Ihre Zwecke zu langsam sein, wenn Sie den Sound in Echtzeit erstellt werden soll, aber eine weitere Optimierung ist sicher möglich (zum Beispiel: eine schnellere Cosinus-Funktion).

Die Funktionen gibt ein Doppel Array mit Werten von -1 bis 1. Dies entspricht den niedrigsten und höchsten Punkte in der Wellenform sind.

Der quality Parameter stellt die Anzahl der Wellen erzeugt, um den Ton zu machen. Ich finde, 5000 Wellen (ca. 40 Intervalle pro Halbton) ist nur über die Schwelle, wo ich keine spürbare Verbesserung mit höheren Werten erkennen kann, aber auf der sicheren Seite zu sein, können Sie (optional) erhöhen diese bis etwa 10.000 Wellen oder höher . Auch nach Wikipedia, 20 Hertz ist um die untere Grenze der menschlichen Wahrnehmung in Bezug darauf, was wir hören können, aber man kann diese auch ändern, wenn Sie wollen.

Beachten Sie den Ton wird leiser mit einem höheren quality Wert aus technischen Gründen, so können Sie (optional) wollen die Lautstärke über den volumeAdjust Parameter einzustellen.

public double[] createPinkNoise(double seconds, int quality=5000, double lowestFrequency=20, double highestFrequency = 44100, double volumeAdjust=1.0)
{
    long samples = (long)(44100 * seconds);
    double[] d = new double[samples];
    double[] offsets = new double[samples];
    double lowestWavelength = highestFrequency / lowestFrequency;
    Random r = new Random();
    for (int j = 0; j < quality; j++)
    {
        double wavelength = Math.Pow(lowestWavelength, (j * 1.0) / quality)  * 44100 / highestFrequency;
        double offset = r.NextDouble() * Math.PI*2;     // Important offset is needed, as otherwise all the waves will be almost in phase, and this will ruin the effect!
        for (int i = 0; i < samples; i++)
        {
            d[i] += Math.Cos(i * Math.PI * 2 / wavelength + offset) / quality * volumeAdjust;
        }
    }
    return d;
}

Ich kann nicht über C # sprechen, aber Sie könnten mit einigen guten Lärm besser dran, Kopfhörer und Ihre Lieblings-MP3-Dateien abgebrochen wird.

Wenn Sie auf Linux sind, können Sie SOX verwenden können (Sie können es schon haben, versuchen Sie den play Befehl).

play -t sl - synth 3 pinknoise band -n 1200 200 tremolo .1 40 < /dev/zero

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top