Opus. Kompresja dzwięku z SFML

0

Witam,

przesyłam dźwięk nagrany za pomocą SFML przez sockety.
Chciałbym go kompresować i dekompresować.
Korzystam przy tym z Opus.

Niestety, nie do końca wiem jak to zrobić.

    buffer.loadFromFile("sample.wav");
    const short int* Probko = buffer.getSamples();
    size_t liczba = buffer.getSampleCount();
    cout<<buffer.getChannelCount()<<endl; // to jest 1
    cout<<buffer.getSampleCount()<<endl;   //to jest 86818

    unsigned char* wynik2;
    int wynik;
    int blad;
    OpusEncoder *enc = opus_encoder_create(SAMPLE_RATE, CHANNELS, APPLICATION, &blad);
    cout<<blad<<endl; //to jest 0
    wynik = opus_encode(enc,Probko,2880,wynik2,4000000);


    cout<<wynik; // to jest -1

Wynik jest liczbą bajtów. Jeżeli jest ujemna, to wystąpił błąd.
Co zrobiłem źle?

0

Nie widać żebyś alokował pamięć na dane wynikowe. Zmienną wynik2 musisz zainicjować na adres zaalokowanego obszaru pamięci.

Poza tym możesz użyć funkcji opus_strerror by wypisać czytelny opis błędu: https://mf4.xiph.org/jenkins/view/opus/job/opus/ws/doc/html/group__opus__libinfo.html#gafad3bac5a05dc7c3477a5765eb5e1873

0
    wynik2 = new unsigned char[40000000];
    wynik = opus_encode(enc,Probko,1920,wynik2,4000000);
    cout<<opus_strerror(wynik);

    delete [] wynik2;

Wciąż -1.

Teraz mam informację że jest to "invalid argument"
Wydaje mi się że chodzi raczej o zmienną "Probko" oraz następny argument w funkcji opus_encode

1 użytkowników online, w tym zalogowanych: 0, gości: 1