2014-11-20 28 views
5

Sto lavorando a un progetto che è necessario registrare e riprodurre con Opus Codec, cerco molto ma non riesco a trovare alcun demo/esempio utilizzando quella soluzione. Trovo una demo con encoder ma non riesco a trovare il decodificatore. Trovo solo il codice sorgente di questo codec usando C, puoi aiutarmi?Registrazione e riproduzione con Opus Codec in Android

+0

Hai trovato qualcosa? Sto cercando lo stesso ... – JVS

+0

Se hai solo bisogno di registrare, questa applicazione afferma di farlo: https://play.google.com/store/apps/details?id=dje073.android.modernrecforgepro –

+0

i realizzare questo commento è molto tardi, ma abbiamo recentemente completato questo: https://github.com/edwardsmarkf/opus-streaming-recorder – edwardsmarkf

risposta

0

Prova questo GitHub demo. L'ho compilato ma non suona il suono registrato.

+0

Ciao, l'ho provato, ma non ha funzionato.e la nota di rilascio in quel git ha menzionato "Cosa non funziona: Registrazione e riproduzione utilizzando il codec opus " –

1

Ciao, quella demo è un buon punto di partenza, era davvero vicino a risolverlo. Tuttavia ogni pacchetto deve essere inviato separatamente dall'encoder al decodificatore. Invece di salvare tutto in un file e quindi leggerli di nuovo senza alcun riguardo per l'avvio del pacchetto.
Ho modificato il codice per scrivere anche il numero di byte codificati e quando decodifico, ho letto prima il numero di byte in ogni pacchetto e poi il carico utile.

Ecco il codice modificato in OpusEncoder.java

public void write(short[] buffer) throws IOException 
    { 
     byte[] encodedBuffer = new byte[buffer.length]; 
     int lenEncodedBytes = this.nativeEncodeBytes(buffer , encodedBuffer); 
     Log.i(TAG,"encoded "+lenEncodedBytes+" bytes"); 
     if (lenEncodedBytes > 0) 
     { 
      this.out.write(lenEncodedBytes); 
      this.out.write(encodedBuffer, 0, lenEncodedBytes); 
     } 
     else 
     { 
      Log.e(TAG, "Error during Encoding. Error Code: " + lenEncodedBytes); 

      throw new IOException("Error during Encoding. Error Code: " + lenEncodedBytes); 
     } 
    } 


Ecco il codice modificato in OpusDecoder.java

 byte[] encodedBuffer; 
     int bytesEncoded=this.in.read(); 
     int bytesDecoded=0; 

     Log.d(TAG, bytesEncoded + " bytes read from input stream"); 
     if (bytesEncoded >= 0) 
     { 
      encodedBuffer=new byte[bytesEncoded]; 
      int bytesRead = this.in.read(encodedBuffer); 
      bytesDecoded = nativeDecodeBytes(encodedBuffer , buffer); 
      Log.d(TAG, bytesEncoded + " bytes decoded"); 
     } 
+0

di" pacchetto "intendi" pacchetto "? Ho provato la tua patch ma ancora non ho ottenuto il record e la riproduzione per funzionare. un sacco di soli pop e clic – spy

+0

ancora in giro con questo, sembra registrare ok, ma la riproduzione non funziona. Opus sta segnalando solo decodificare 3 byte alla volta. – spy