Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Opus. Kompresja dzwięku z SFML

Ostatnio zmodyfikowano 2015-12-01 21:56
Autor Wiadomość
Niki-Nick
Temat założony przez niniejszego użytkownika
Opus. Kompresja dzwięku z SFML
» 2015-11-30 19:37:54
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ć.

C/C++
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?
P-141188
maly
» 2015-12-01 07:08:24
W opus_encode bufor wyniku powinien być wcześniej zaalokowany i mieć wielkość równą max_data_bytes czyli w Twoim przypadku 4000000.
P-141219
Niki-Nick
Temat założony przez niniejszego użytkownika
» 2015-12-01 16:52:04
C/C++
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
P-141229
jankowalski25
» 2015-12-01 21:56:01
Jakie są wartości
SAMPLE_RATE
,
CHANNELS
 oraz
APPLICATION
?

Sampling rate of input signal (Hz) This must be one of 8000, 12000, 16000, 24000, or 48000.
Pamiętaj, że jeśli używasz wyrażenia typu
const opus_int32 SAMPLE_RATE = buffer.getSampleRate();
, to wtedy
SAMPLE_RATE
 może mieć inną wartość, niż dopuszczalna przez bibliotekę Opus, czyli na przykład
44100
.

//edit: Sprawdź, czy nie pomyliłeś przypadkiem metody
getSampleCount()
 z metodą
getSampleRate()
.
P-141251
« 1 »
  Strona 1 z 1