|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 7
|
[C++] rtAudio Class
Buongiorno, avrei bisogno di un aiuto se possibile, nel mio lavoro di tesi ho bisogno di interfacciarmi con un microfono e catturare in tempo reale l'esecuzione i un musicista che poi devo rielaborare a blocchi di 256 campio alla volta.
Pensavo di utilizzare la rtAudio per interfacciarmi, che dite può andare???? Avete da conisgliarmi qlk????? grazie mille. Arrivderci. Alessio |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 7
|
Beh grazie......davvero va bene???? ti potrei chiedere qualche consiglio sul come usarla????
xche io ho qlk ifficolta.......se vuoi anche privatamente se ti scoccia qui..... ciao e grazie Alessio |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 7
|
Beh il mio problema è questo:
Allora il mio progetto di tesi è praticamente questo: Progettare un riconoscitore musicale monofonico utilizzando l'analisi a Q-Costante. Ora la parte di decodifica,l'ho effettua facendo il porting in c++ di un progetto elaborato precedentemente da un altro ragazzo su Matlab. Ora io ho creato diciamo la classe Madre..che contiene a sua volta la classe figlia ke viene utilizzata x ognuna delle 9 ottave musicali da rilevare... A questa Classe madre...devono arrivare blocchi da 256 campioni alla volta....effettuando una prima parte di riempimento del buffer...poi raggiunto i 256 campioni il tutto gira a regime di 256 camp alla volta... Ora qst campioni mi dovrebbero arrivare appunto dalla rtAudio...effettuando presumo un openstream...e successivamente uno strart stream...... Ecco...ma poi come faccio a prendere i campioni?? Il getBuffer mi ritorna un char....non capisco.... Altra cosa...a me servono blokki di 256 campioni...quindi il buffersize lo metto a 256??quanti Buffer della rtAudio mi conviene usare???.... Scusa x tutte qst domande.. ciao e grazie |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
In questo caso l'apertura dello stream per la lettura dalla scheda è Codice:
audio = new RtAudio(); audio->openStream(0, 0, device, nChannels, RTAUDIO_SINT16, nSamplesPerSec, &bufferSize, nBuffers); Se lavori sotto Windows 256 campioni di buffer potrebbero essere pochi e potresti andare incontro a perdite di campioni, devi un pò sperimentare, io sono riuscito ad arrivare a 64 campioni e 4 buffer. Se vuoi usare la scheda audio di default puoi usare: Codice:
int ndev = audio->getDeviceCount();
RtAudioDeviceInfo info;
for(int i = 1; i < ndev; i++)
{
info = audio->getDeviceInfo(i);
if (info.isDefault)
device = i;
}
Codice:
audio->setStreamCallback(&recdata, this); la funzione recdata sarà qualcosa di simile a Codice:
int recdata(char *buffer, int bufferSize, void *data)
{
return ((AudioInterface*)data)->OutputData(buffer, bufferSize);
}
A questo punto in buffer hai i campioni. Considera che bufferSize è la dimensione del buffer espressa in char, ma se usi 16 bit la dimensione dimezza. Se usi un flusso stereo i campioni sono interlacciati: prima il sinistro poi il destro, come da standard. A questo punto nel metodo OutputData fai quello che ti pare dei dati ricevuti, puoi scriverli su file, accodarli in un buffer che verrà svuotato da un thread consumatore... Non è necessario che acquisisci dalla scheda solamente 256 campioni, ti conviene metterli in una queue e pacchettizzare successivamente questo buffer, non penso ti serva il ritardo 0 come negli studi di registrazione. |
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 7
|
Per cominciare....grazie e scusa x il tempo che ti sto facendo perdere....
Premetto che io praticamente sono ignorante in programmazione..... Cmq si...lavoro su 16 Bit...audio Monofonico,quindi non ho problemi sull'interlacciamento.... Però abbi pazienza...non ho capito qst cosa dei buffer..... Xche 4 da 64 e non 1 solo????? L'obiettivo sarebbe quello di riuscire ad analizzare un brano eseguito da uno studente praticamente in tempo reale..... Quindi a me i blocchi in successione dei 256 campioni mi devono uscire di continuo....(quindi il discorsco della callback l'ho capito).....per nn capisco come io dalla mia classe madre posso capire qnd è il momento di rikiamarmi i 256 campioni....o se semplicemente mi conviene fare come dicevi tu...un travaso dei campioni che man mano la rtAudio genera..su un contenitotore di 256 elementi che qnd è pieno...utilizzo..svuoto...e comincio a ripienare..... Questo non mi fa perdere tempo??? Non c'è un modo piu rapido?? Grazie ancora..... Alessio |
|
|
|
|
|
#8 | ||||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Quote:
Quote:
|
||||
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 11
|
COMPILARE RTAUDIO VC6
Ciao a tutti,
scusate forse qualcuno può aiutarmi, Ho scaricato il tool rtaudio 4.0.2 ed ho cercato di compilare i progetti esempio in ambiente VC6 però ottengo alcuni errori tipo: Codice:
RtAudio.cpp
c:\giobbo\rtaudio-4.0.2\rtaudio.h(319) : error C2027: use of undefined type 'RtAudio'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(213) : see declaration of 'RtAudio'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(330) : error C2629: unexpected 'class RtAudio ('
c:\giobbo\rtaudio-4.0.2\rtaudio.h(330) : error C2238: unexpected token(s) preceding ';'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(706) : error C2562: 'closeStream' : 'void' function returning a value
c:\giobbo\rtaudio-4.0.2\rtaudio.h(432) : see declaration of 'closeStream'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(707) : error C2562: 'startStream' : 'void' function returning a value
c:\giobbo\rtaudio-4.0.2\rtaudio.h(441) : see declaration of 'startStream'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(708) : error C2562: 'stopStream' : 'void' function returning a value
c:\giobbo\rtaudio-4.0.2\rtaudio.h(450) : see declaration of 'stopStream'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(709) : error C2562: 'abortStream' : 'void' function returning a value
c:\giobbo\rtaudio-4.0.2\rtaudio.h(459) : see declaration of 'abortStream'
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(137) : error C2511: 'RtAudio::RtAudio' : overloaded member function 'void (enum RtAudio::Api)' not found in 'RtAudio'
c:\giobbo\rtaudio-4.0.2\rtaudio.h(213) : see declaration of 'RtAudio'
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(182) : error C2562: 'openStream' : 'void' function returning a value
c:\giobbo\rtaudio-4.0.2\rtaudio.h(421) : see declaration of 'openStream'
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(2597) : error C2039: 'log10' : is not a member of 'std'
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(2771) : error C2371: 'i' : redefinition; different basic types
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(2656) : see declaration of 'i'
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(3464) : error C2065: 'WAVE_FORMAT_96S16' : undeclared identifier
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(3468) : error C2065: 'WAVE_FORMAT_96S08' : undeclared identifier
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(3487) : error C2065: 'WAVE_FORMAT_96M16' : undeclared identifier
c:\giobbo\rtaudio-4.0.2\rtaudio.cpp(3491) : error C2065: 'WAVE_FORMAT_96M08' : undeclared identifier
Error executing cl.exe.
Qualcuno sa dirmi cosa succede? Grazie,.............ciao! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:01.



















