Announcement

Collapse
No announcement yet.

DirectSound Record von mikro

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DirectSound Record von mikro

    Hallo,

    ich habe folgendes Problem.
    Ich würde gerne so eine Art Rekorder programmieren und dies mit "Directx" in "C#".
    Abspielen / Stoppen / Pause - Funktionen sind bereits vorhanden und laufen einwandfrei.

    Ich hänge bei der "Record Funktion"....

    Zwar weiß ich das es mit "DirectSound" über die "Capture / Capturebuffer" etc funktionieren sollte, aber mir fehlen dazu die nötigen Kenntnisse...

    Könnte mir jemand ein paar gute Links zu Beispielen posten? Oder eventuell einen kleinen Code Schnipsel wie man "Capture" verwendet?

    Danke schon einmal im voraus.

  • #2
    Hallo,

    bitte zuerst suchen.

    http://www.google.at/search?hl=de&q=c%23+recording+with+directx&btnG=Go ogle-Suche&meta=&aq=f&oq=

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die schnelle Hilfe.

      Nun ist aber bei meinem Versuch ein Fehler aufgetreten...

      Ich glaube zwar ich bin nah an der Lösung aber ich komme einfach nicht dahinter.

      Wäre nett wenn mir einer einen Tipp geben könnte.


      Code:
      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      
      // Für Capture und andere Funktionen
      using Microsoft.DirectX;
      using Microsoft.DirectX.DirectSound;
      using System.Threading;
      using Buffer = Microsoft.DirectX.DirectSound.Buffer;
      using System.IO;
      
      namespace CaptureSoundTest
      {
          public partial class Form1 : Form
          {
             
              private Capture m_Capture = null;
              private CaptureBuffer m_CaptureBuffer = null;
              private CaptureBufferDescription m_CaptBuffDescription;
              private CaptureDevicesCollection m_CaptDevCollection = null;
      
              private BufferDescription m_bufferDesc;
              private Device m_Device = null;
              private Buffer m_Buffer = null;
              private WaveFormat waveFormat;
      
              private byte[] m_StreamBuffer;
              private MemoryStream m_Stream;
      
              private string m_FilePath = "C:\\Temp\\Bang Bang";
      
              public Form1()
              {
                  InitializeComponent();
      
                  //Create new Device
                  m_Device = new Device();
      
                  //Set the WaveFormat
                  waveFormat = new WaveFormat();
                  waveFormat.BitsPerSample = 8;
                  waveFormat.BlockAlign = 1;
                  waveFormat.Channels = 1;
                  waveFormat.AverageBytesPerSecond = 20500;
                  waveFormat.SamplesPerSecond = 20500;
                  waveFormat.FormatTag = WaveFormatTag.Pcm;
      
                  //Create the BufferDescription
                  m_bufferDesc = new BufferDescription();
                  m_bufferDesc.Format = waveFormat;
                  m_bufferDesc.BufferBytes = 100000;
                  m_bufferDesc.ControlFrequency = true;
                  m_bufferDesc.ControlPan = true;
                  m_bufferDesc.ControlVolume = true;
      
                  //Create the CaptureBufferDescription
                  m_CaptBuffDescription = new CaptureBufferDescription();
                  m_CaptBuffDescription.Format = waveFormat;
                  m_CaptBuffDescription.BufferBytes = 100000;
      
                  //Create the Buffer
                  m_Buffer = new Buffer(m_FilePath, m_bufferDesc, m_Device);
      
                  //Set the CooperativLevel
                  m_Device.SetCooperativeLevel(this, CooperativeLevel.Priority);
      
                  // Create the Capture
                  m_Capture = new Capture();
      
                  //Create the CaptureBufferDescription
                  m_CaptBuffDescription = new CaptureBufferDescription();
                  m_CaptBuffDescription.BufferBytes = 100000;
                  m_CaptBuffDescription.Format = waveFormat;
      
                  //Create CaptureBuffer
                  m_CaptureBuffer = new CaptureBuffer(m_CaptBuffDescription, m_Capture);
      
                  // Create StreamBuffer
                  m_StreamBuffer = new byte[100000];
      
                  // Create MemoryStream
                  m_Stream = new MemoryStream(m_StreamBuffer);
              }
      
              private void button1_Click(object sender, EventArgs e)
              {
                  m_Buffer.Play(0, BufferPlayFlags.Looping);
      
                  m_CaptureBuffer.Read(0, (int)m_Stream.Length, 100000, LockFlag.None);
                  m_Buffer.Write(0, m_Stream, (int)m_Stream.Length, LockFlag.None);   
              }
      
              private void button2_Click(object sender, EventArgs e)
              {
                  m_Buffer.Stop();      
              }
      
              private void button3_Click(object sender, EventArgs e)
              {
                  m_CaptureBuffer.Start(true);
              }
      
              private void button4_Click(object sender, EventArgs e)
              {
                  m_CaptureBuffer.Stop();
              }

      Der Fehler tritt hier auf:

      Code:
       private void button1_Click(object sender, EventArgs e)
              {
                  m_Buffer.Play(0, BufferPlayFlags.Looping);
      
                m_CaptureBuffer.Read(0, (int)m_Stream.Length, 100000, LockFlag.None);
                  m_Buffer.Write(0, m_Stream, (int)m_Stream.Length, LockFlag.None);   
              }
      Ich bin für jede Hilfe dankbar.

      Comment


      • #4
        Wie lautet die Fehlermeldung? (sie kann von der MessageBox mit Strg + C kopiert werden oder ein Scrennshot, ...).


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Es sind komischerweise mehrere...

          Fehler 1 Die beste Übereinstimmung für die überladene Microsoft.DirectX.DirectSound.CaptureBuffer.Read(i nt, System.Type, Microsoft.DirectX.DirectSound.LockFlag, params int[])-Methode hat einige ungültige Argumente. C:\Users\Testprogramme\Visual Studio 2008\Projects\CaptureSoundTest\CaptureSoundTest\Fo rm1.cs 92 13 CaptureSoundTest

          Comment


          • #6
            Hallo,

            solche Probleme gibt es verhältnismäßig oft: Viele Methoden haben Überladungen, die sich durch Typ und Anzahl der Argumente (und Reihenfolge) unterscheiden. Beides muss natürlich genau beachtet werden.

            Offensichtlich gibt es keine Überladung mit solchen Argumenten: (int, int, int/long, LockFlag). Der Compiler versucht einen Vorschlag zu machen, das gelingt ihm aber selten.

            Du musst eine Überladung heraussuchen, die zu deinen Zielen passt.

            Es sind komischerweise mehrere...
            Warum zitierst du dann nur einen Fehler? (Die weiteren Fehler könnten Folgefehler sein, aber ohne Zitat kann man dabei nur raten.

            Jürgen

            Comment

            Working...
            X