Hilfe! Thread und Aufnehmen von Sound



  • Ich möchte Sound aufnehmen, dafür aber nicht meine ganze Anwendung
    blockieren. Also dachte ich an einen Thread. Den habe ich auch angelegt
    und darin dann versucht die Aufnahme zu starten.

    Aber irgendwie wird dann nicht richtig aufgenommen. Da wohl immer
    wieder die vorherige Aufnahme überschrieben wird.

    Ich bin absolut ahnungslos wie ich das noch anstellen könnte.
    Ich habe mich an diesem Code orientiert:

    DWORD CMyRecordDlg::RecordWAVEFile(DWORD dwMilliSeconds)
    {
        UINT wDeviceID;
        DWORD dwReturn;
        MCI_OPEN_PARMS mciOpenParms;
        MCI_RECORD_PARMS mciRecordParms;
        MCI_SAVE_PARMS mciSaveParms;
        MCI_PLAY_PARMS mciPlayParms;
    
        // Open a waveform-audio device with a new file for recording.
        mciOpenParms.lpstrDeviceType = "waveaudio";
        mciOpenParms.lpstrElementName = "";
        if (dwReturn = mciSendCommand(0, MCI_OPEN,
            MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, 
            (DWORD)(LPVOID) &mciOpenParms))
        {
            // Failed to open device; don't close it, just return error.
            return (dwReturn);
        }
    
        // The device opened successfully; get the device ID.
        wDeviceID = mciOpenParms.wDeviceID;
    
        // Begin recording and record for the specified number of 
        // milliseconds. Wait for recording to complete before continuing. 
        // Assume the default time format for the waveform-audio device 
        // (milliseconds).
        mciRecordParms.dwTo = dwMilliSeconds;
        if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, 
            MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (dwReturn);
        }
    
        // Play the recording and query user to save the file.
        mciPlayParms.dwFrom = 0L;
        if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
            MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (dwReturn);
        }
        if (MessageBox("Do you want to save this recording?",
            "", MB_YESNO) == IDNO)
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (0L);
        }
    
        // Save the recording to a file named TEMPFILE.WAV. Wait for
        // the operation to complete before continuing.
        mciSaveParms.lpfilename = "tempfile.wav";
        if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,
            MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (dwReturn);
        }
    
        return (0L);
    
    }
    

    Das ganze habe ich zerpflückt und in meiner vom Thread aufgerufenen Funktion
    dann dies übernommen um die Aufnahme zu starten:

    if(isnotjetstarted)
    {
     if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, 
            MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
        }
    }
    

    Die Datei ist immer 44Byte groß 🙄
    Ich bin zwar blutiger Neuling, würde mich aber freuen wenn mir jemand
    erklären könnte was ich falsch mache 😕



  • Hat denn niemand von euch eine kleine Hilfe dazu für mich?



  • Isella schrieb:

    Aber irgendwie wird dann nicht richtig aufgenommen.

    Ich deute jetzt mal daraus dass es vorher, ohne Threads funktioniert hat, oder?

    mfg.



  • Ja ohne Thread geht es. Allerdings ist dann ja die ganze Anwendung für
    die Dauer der Aufnahme blockiert. Und ich will ja auch unbegrenzt aufnehmen
    können und nicht vorab die Millisekunden angeben müssen.



  • Also ich wäre natürlich auch an einer alternativen Lösung interessiert
    um Sound aufnehmen zu können, ohne die ganze Anwendung lahmlegen zu müssen.
    Ich finde nur keine 🙂



  • Dann gehts wohl nicht weiter. *snief* =|:`-(



  • Wie genau sieht deine Thread Funktion aus?


Anmelden zum Antworten