Wave aufnehmen klappt, aber..



  • Hallo liebe Community!

    Ich wollte in meinem Programm eine Funktion einbauen, die das Mikro/die Stimme vom dem Anwender aufnimmt.

    Zurzeit habe ich es wie folgt:

    DWORD Aufnehmen(DWORD Millisekunden)
    {
        UINT wDeviceID;
        DWORD dwReturn;
        MCI_OPEN_PARMS OeffneParameter; //Stream öffnen
        MCI_RECORD_PARMS RecordeParameter; //Aufnehmen
        MCI_SAVE_PARMS SichereParameter; //Nach der Aufnahme speichern
    
        OeffneParameter.lpstrDeviceType = "waveaudio";
        OeffneParameter.lpstrElementName = "";
    
        if (dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) &OeffneParameter))
        {
            return (dwReturn);
        }
    
        wDeviceID = OeffneParameter.wDeviceID;
    
        RecordeParameter.dwTo = Millisekunden; // Wieviele Sekunden lang aufgenommen werden sollen
        if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &RecordeParameter))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (dwReturn);
        }
    
        SichereParameter.lpfilename = "Sounddatei.wav"; // Name der Datei
        if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE, MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &SichereParameter))
        {
            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
            return (dwReturn);
        }
    
        return 0;
    
    }
    
    int main()
    {
    Aufnehmen(10000); //10 Sekunden lang wird aufgenommen
    return 0;
    }
    

    Ich würde das aber nun gerne OHNE Zeitangabe haben. Das heisst, wenn der Anwender bei meinem Programm auf "Stopp" drückt, soll die Aufnahme aufhören und dann noch speichern.
    Ich weiß nicht wie ich das am besten machen soll?
    Habe es schon mit "bool aufnahme=false" probiert (und bei Millisekunden stattdessen aufnahme hingeschrieben), klappt allerdings nicht wie gewünscht.

    ---

    Ein anderes -eher nebensächliches- Problem wäre noch die Qualität, das Rauschen im Hintergrund ist etwas 'zu' stark, kann man das abschwächen bzw. klarer machen?

    Danke schonmal für eure Hilfe!

    Mit frendlichen Grüße
    seren1ty :p



  • Weiß keiner rat dazu? 😮



  • Wahrscheinlich solltest du dann MCI_WAIT und MCI_TO weglassen und stattdessen beim Button-Event die Aufnahme stoppen und speichern.



  • Funktioniert leider nicht, weil es immer 2 Parameter sein müssen.



  • seren1ty schrieb:

    Funktioniert leider nicht, weil es immer 2 Parameter sein müssen.

    Was müssen 2 Parameter sein?

    Lass doch einfach beim Aufnehmen MCI_TO weg und übergib MCI_NOTIFY statt MCI_WAIT, dazu setz in MCI_RECORD_PARMS das Callback-Handle. Evtl gehts auch, wenn du für die Flags 0 übergibst. Dann einfach zum Testen ein Sleep(3000) und anschließend den Save-Krams.



  • also, für ne aufnahme ohne zeitlimit würd ich ganz klar direkt in ein file reinstreamen. den header kannte dann hinterher anpassen, so hab ich das gemacht.
    mfg


Anmelden zum Antworten