2009-03-05 7 views
25

((Antwort ausgewählt - siehe Edit 5 unten.))Wie kann ich einen Pink Noise Generator machen?

Ich muss einen einfachen Pink-Noise-Generator in C# schreiben. Das Problem ist, dass ich noch nie zuvor Audio-Arbeit geleistet habe, also weiß ich nicht, wie ich mit der Soundkarte usw. umgehen soll. Ich weiß, dass ich von der Verwendung von DirectX abraten möchte, hauptsächlich weil ich nicht will um ein riesiges SDK nur für dieses kleine Projekt herunterzuladen.

So habe ich zwei Probleme:

  1. Wie generiere ich Pink Noise?
  2. Wie streame ich es auf die Soundkarte?

bearbeiten: Ich wirklich wollen ein Generator für rosa Rauschen machen ... Ich bin mir bewusst, es gibt auch andere Möglichkeiten, um die Root-Problem zu lösen. =)

Edit 2: Unsere Firewall blockiert das Streaming von Audio und Video - ansonsten würde ich einfach auf gehen, wie in den Kommentaren vorgeschlagen. :(

Edit 3: Ich habe die Erzeugung von weißem Rauschen und Senden der Ausgabe an die Soundkarte - jetzt alles, was ich wissen muss, ist, wie das weiße Rauschen in rosa Rauschen zu verwandeln Oh - und ich möchte keine WAV-Datei loopen, weil jede Anwendung, die ich für das Looping verwenden möchte, mit einem winzigen Bruch zwischen den Loops endet, was ziemlich erschütternd ist, um mich in dieser Richtung in die erste Richtung gebracht zu haben Ort ...

bearbeiten 4: ... ich bin überrascht, so viele Menschen in sehr explizit gesprungen nicht Antwort eine Frage, die ich wahrscheinlich bekommen eine bessere Antwort wäre, wenn ich darüber, warum ich log. nee d pink noise ... Bei dieser Frage geht es mehr darum, wie man Daten auf der Soundkarte erzeugt und streamt, als darum, welche Art von Kopfhörern ich verwenden soll. Zu diesem Zweck habe ich die Hintergrunddetails bearbeitet - Sie können darüber in den Bearbeitungen ...

lesen

Bearbeiten 5: Ich habe die Antwort von Paul unten ausgewählt, weil der Link, den er zur Verfügung gestellt hat, mir die Formel zu konvertieren gab weißes Rauschen (das leicht über den Zufallszahlengenerator erzeugt wird) in rosa Rauschen. Außerdem habe ich Ianier Munoz's CodeProject entry "Programming Audio Effects in C#" verwendet, um zu lernen, wie Sounddaten auf der Soundkarte erzeugt, geändert und ausgegeben werden. Vielen Dank für Ihre Hilfe. =)

+0

Ansonsten können Sie auf SimplyNoise.com gehen und stattdessen auf Ihre Arbeit konzentrieren :) –

+0

würde ich, außer unsere Firewall blockiert Streaming Audio und Video. –

+0

Von Noise Cancelling Headphones gehört? –

Antwort

15

Vielleicht können Sie die C/C++ konvertieren Code 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 (ausspucken einige hartcodierte Header und dann Probe Daten). Dann können Sie die .wav-Datei abspielen.

+0

Ich kann keine Schleife für die Gründe verwenden, die ich in Edit 3 –

+1

hinzugefügt habe. Ich werde dies als meine Antwort akzeptieren , weil es die Formeln enthält, die benötigt werden, um weißes Rauschen in rosa Rauschen zu konvertieren - danke für die Referenz. =) –

4

Nicht wirklich eine Antwort auf Ihre Frage, aber können Sie nicht einfach Musik hören, im Idealfall mit einigen Noise Cancelling-Kopfhörer?

+0

Musik lenkt mich ab - rosa Rauschen funktioniert perfekt, außer dass ich aus den Gründen, die ich in Edit 3 hinzugefügt habe, keine Schleife verwenden kann. –

1

Ich kann nicht über C# sprechen, aber Sie könnten mit einigen guten Noise Cancelling-Kopfhörern und Ihren Lieblings-MP3s besser dran sein.

+0

Musik ist zu ablenkend. –

+1

Nun, mit hochwertigen Noise-Cancelling-Kopfhörern, die zwischen $ 250 und $ 400 kosten, und mit der Tatsache, dass sie * Lärm *, keine Konversation abbrechen, dachte ich, eine Hausbraulösung wäre passender. –

+0

Geeignet für mein Budget, das ist. –

2

Wie wäre es mit einer schnellen und dreckigen Methode? Wie wäre es, wenn Sie in Ihrem Audioplayer einfach ein pinkfarbenes Rauschen waven? (Ja, ich weiß, ein Teil des Spaßes ist, es selbst zu machen ....)

2

Wie wäre es mit einem .mp3-Beispiel von Pink Noise bei Wiederholung?

8

Rosa Rauschen ist nur weißes Rauschen durch ein -3dB/Oktave LPF. Sie können weißes Rauschen mit rand() (oder einer Funktion, die gleichförmige Zufallszahlen erzeugt) erzeugen.

Streaming-Zeug auf die Soundkarte ist einigermaßen trivial, solange Sie Google handlich haben. Wenn Sie DirectX vermeiden möchten, sollten Sie PortAudio oder ASIO für die Verbindung mit der Soundkarte verwenden ... obwohl ich denke, dass Sie C++ oder C verwenden müssen. Loop eine verdammte WAV-Datei!

+0

Ok, ich kann weißes Rauschen erzeugen - wie führe ich die Filterung durch? –

+0

Edit 3 hinzugefügt, um deine letzte Frage zu beantworten. –

+2

Bitte beheben Sie Ihre Antwort. Rosa Rauschen fällt bei 3 dB pro Oktave ab: http://en.wikipedia.org/wiki/Pink_noise –

2

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

Oder Sie könnten in den Quellcode eintauchen und sehen, wie Audacity die Erzeugung von Rosa Rauschen ausführt.

2

Hier ist ein Beispiel dafür, wie der Wiedergabe-Thread aussieht. Ich verwende DirectSound, um einen SecondaryBuffer zu erstellen, in den die Samples geschrieben werden. Wie Sie sehen, es ist ziemlich einfach:

/// <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.

6

bisschen spät zu diesem ich realisiere, aber jeder, der es für Antworten findet, sollte wissen, dass rosa Rauschen weißes Rauschen mit -3dB/Oktave ist, nicht -6 wie oben erwähnt, was eigentlich braunes Rauschen ist.

0

Wenn Sie Linux verwenden, können Sie SOX verwenden (Sie haben es möglicherweise schon, probieren Sie den Befehl play).

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

Verwandte Themen