View Full Version : [C++] DIALOGARE CON SCHEDA AUDIO RME
Salve a tutti,
sono nuovo di questo forum, e scrivo per chiedere lumi...!!!
Dovrei scrivere per ambiti universitari codice in [c++] che mi permetta di leggere a basso livello da una scheda di acquisizione Audio [RME] o meglio, dovrei dialogare con essa in ambiente Windows XP.
Poichè non so da dove iniziare chiedo se qualcuno mi possa indicare la strada da percorrere (Tipo: Librerie C++ da cercare, codice simile già implementato, esempi, ecc..).
Grazie.
tomminno
08-11-2007, 12:14
Salve a tutti,
sono nuovo di questo forum, e scrivo per chiedere lumi...!!!
Dovrei scrivere per ambiti universitari codice in [c++] che mi permetta di leggere a basso livello da una scheda di acquisizione Audio [RME] o meglio, dovrei dialogare con essa in ambiente Windows XP.
Poichè non so da dove iniziare chiedo se qualcuno mi possa indicare la strada da percorrere (Tipo: Librerie C++ da cercare, codice simile già implementato, esempi, ecc..).
Grazie.
Cosa intendi per basso livello?
Io per l'audio ho sempre usato RtAudio (http://www.music.mcgill.ca/~gary/rtaudio/)
A basso livello intendo che dovrei leggere lo stream in uscita di questa scheda (che magari sarà un formato tipo AES3) o cmq magari inizio ad interagire poi vediamo, ho letto pure che ci sono le (MSC) che dovrebbero supplire alle API ma, mai usate! Tu cosa mi consigli? Comunque grazie per la tua risposta immediata.
tomminno
08-11-2007, 16:39
A basso livello intendo che dovrei leggere lo stream in uscita di questa scheda (che magari sarà un formato tipo AES3) o cmq magari inizio ad interagire poi vediamo, ho letto pure che ci sono le (MSC) che dovrebbero supplire alle API ma, mai usate! Tu cosa mi consigli? Comunque grazie per la tua risposta immediata.
Ma ti interessano i dati audio o anche tutto quello che arriva con il protocollo AES?
Sinceramente non mi sono mai spinto così in basso, anche perchè quello è trattato dall'hardware e non so nemmeno se sia disponibile a livello software, oltretutto dovresti realizzare un parser del protocollo calcolare se il CRC è corretto ecc...
A me sono sempre bastati i campioni PCM in esso contenuti.
INFATTI CREDO PROPRIO CHE SI DEBBA REALIZZARE UN PARSER, SAI DOVE POSSO TROVARE QUALCOSA DI REALIZZATO? O CMQ DGESTIONE AES3 E C++?
GRAZIE PER LE TUE RISPOSTE.
tomminno
09-11-2007, 13:45
INFATTI CREDO PROPRIO CHE SI DEBBA REALIZZARE UN PARSER, SAI DOVE POSSO TROVARE QUALCOSA DI REALIZZATO? O CMQ DGESTIONE AES3 E C++?
GRAZIE PER LE TUE RISPOSTE.
Scusa la curiosità a cosa ti serve parserizzare direttamente l'AES?
Conoscendo il protocollo non è difficile tirare fuori un parser, ma più che altro sarebbe da capire come far arrivare l'AES fino al software, anche perchè l'AES transita su un segnale a 6MHz, sperando bene che l'hardware ti tolga la codifica biphase mark devi sempre lavorare con un segnale a 3MHz per un contenuto a 44100Hz.
Scusa la curiosità a cosa ti serve parserizzare direttamente l'AES?
Conoscendo il protocollo non è difficile tirare fuori un parser, ma più che altro sarebbe da capire come far arrivare l'AES fino al software, anche perchè l'AES transita su un segnale a 6MHz, sperando bene che l'hardware ti tolga la codifica biphase mark devi sempre lavorare con un segnale a 3MHz per un contenuto a 44100Hz.
ALLORA, CREDO CHE IL PB SIA QUESTO:
IN USCITA ALLA SCHEDA AUDIO HO I DATI IN FORMATO AES3 (CHE SE NN SBAGLIO è QUELLO COMUNE DEI LETTORI CD) QUINDI è QUEL TIPO DI FORMATO CHE DEVO POI MANIPOLARE.INNANZI TUTTO L'INIZIO è INTERFACCIARMI CON LA SCHEDA (E CREDO CHE CON LE API CHE MI HAI SUGG DOVREI RIUSCIRE) POI VEDIAMO COME FARE. GRAZIE!
tomminno
12-11-2007, 11:25
ALLORA, CREDO CHE IL PB SIA QUESTO:
IN USCITA ALLA SCHEDA AUDIO HO I DATI IN FORMATO AES3 (CHE SE NN SBAGLIO è QUELLO COMUNE DEI LETTORI CD) QUINDI è QUEL TIPO DI FORMATO CHE DEVO POI MANIPOLARE.INNANZI TUTTO L'INIZIO è INTERFACCIARMI CON LA SCHEDA (E CREDO CHE CON LE API CHE MI HAI SUGG DOVREI RIUSCIRE) POI VEDIAMO COME FARE. GRAZIE!
Dalla scheda audio ottieni i campioni PCM, non il protocollo AES, che è leggermente differente dall'SPDIF che esce dai lettori cd.
Dalla scheda audio ottieni i campioni PCM, non il protocollo AES, che è leggermente differente dall'SPDIF che esce dai lettori cd.
OK, DA LI COME LI PRENDO?
tomminno
12-11-2007, 14:36
OK, DA LI COME LI PRENDO?
Da lì dove?
I campioni PCM sono il contenuto musicale, organizzato in maniera interlacciata prima il canale sinistro e poi il destro esattamente come arrivano dall'esterno.
La libreria RtAudio, così come tutte le altre, ti restituisce un array di valori che rispecchia questa struttura. Poi sta a te usarli come meglio credi.
Da lì dove?
I campioni PCM sono il contenuto musicale, organizzato in maniera interlacciata prima il canale sinistro e poi il destro esattamente come arrivano dall'esterno.
La libreria RtAudio, così come tutte le altre, ti restituisce un array di valori che rispecchia questa struttura. Poi sta a te usarli come meglio credi.
ok, ORA INIZIO A CAPIRE, GRAZIE. ORA METTO GIU' UN PO DI CODICE E POI TI FACCIO SAPERE, DI SICURO AVRO' BISOGNO DEI TUOI CONSIGLI, GRAZIE TANTE!
groovediego
16-11-2007, 13:03
Ciao mi intrometto nella vostra discussione in quanto sono interessato anchio a fare una piccola applicazione di questo tipo e comunque premetto che con il c++ non sono un esperto ho incominciato da poco, per questo volevo chiedervi se gentilmente potete aiutarmi.
Ho scaricato la lib. rtaudio e subito ho provato a eseguire qualche riga di codice presentata nel sito ma non capisco perchè, il compilatore mi da sempre degli errori:
// probe.cpp
#include <iostream>
#include "RtAudio.h"
int main()
{
RtAudio audio;
// Determine the number of devices available
unsigned int devices = audio.getDeviceCount();
// Scan through devices for various capabilities
RtAudio::DeviceInfo info;
for ( unsigned int i=1; i<=devices; i++ ) {
info = audio.getDeviceInfo( i );
if ( info.probed == true ) {
// Print, for example, the maximum number of output channels for each device
std::cout << "device = " << i;
std::cout << ": maximum output channels = " << info.outputChannels << "\n";
}
}
return 0;
}
ho eseguito lo script con devc++ e successivamento con visual studio c++
ma l'errore è sempre quello, eppure le librerie .h sono già incluse e il sorgente è originale.
[Linker error] undefined reference to `RtAudio::RtAudio(RtAudio::Api)'
[Linker error] undefined reference to `RtAudio::~RtAudio()'
[Linker error] undefined reference to `RtAudio::~RtAudio()'
ld returned 1 exit status
[Build Error] [Project1.exe] Error 1
1>------ Inizio generazione: Progetto: AUDIO, Configurazione: Debug Win32 ------
1>Compilazione in corso...
1>AUDIO.cpp
1>Collegamento in corso...
1>AUDIO.obj : error LNK2019: riferimento al simbolo esterno "public: __thiscall RtAudio::~RtAudio(void)" (??1RtAudio@@QAE@XZ) non risolto nella funzione _main
1>AUDIO.obj : error LNK2019: riferimento al simbolo esterno "public: __thiscall RtAudio::RtAudio(enum RtAudio::Api)" (??0RtAudio@@QAE@W4Api@0@@Z) non risolto nella funzione _main
1>D:\DIEGO\Visual Studio 2005\Projects\AUDIO\Debug\AUDIO.exe : fatal error LNK1120: 2 esterni non risolti
1>Il log di generazione è stato salvato in 'file://d:\DIEGO\Visual Studio 2005\Projects\AUDIO\AUDIO\Debug\BuildLog.htm'
1>AUDIO - 3 errore/i, 0 avviso/i
========== Generazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========
sapete di cosa sitratta ?
grazie :D
tomminno
16-11-2007, 14:29
Sembrerebbe che non trovi l'header RTAudio.h, l'hai aggiunto al progetto?
groovediego
16-11-2007, 17:55
Be si oltre che averlo incluso con la direttiva #include file.h l'ho aggiunto al progetto con le procedure di devc++ infatti ne posso visualizzare le classi e i metodi, ma in ogni caso non mi spiego perchè non funziona.
tomminno
16-11-2007, 18:11
Be si oltre che averlo incluso con la direttiva #include file.h l'ho aggiunto al progetto con le procedure di devc++ infatti ne posso visualizzare le classi e i metodi, ma in ogni caso non mi spiego perchè non funziona.
Scusa mi sono accorto ora di aver sbagliato a scrivere: manca RtAudio.cpp. Infatti legge la dichiarazione, ma poi il linker non trova il codice corrispondente.
groovediego
16-11-2007, 18:31
in effetti ora riesco a compilarlo senza problemi grazie,
ma quindi quali file devo sempre caricare perchè funzioni tutto ?
tomminno
16-11-2007, 21:00
in effetti ora riesco a compilarlo senza problemi grazie,
ma quindi quali file devo sempre caricare perchè funzioni tutto ?
Tutti i file forniti con la libreria. Se non usi ASIO ne bastano 3: RtAudio.h RtAudio.cpp e RtError.h
groovediego
17-11-2007, 13:02
Sembra funzionare a parte un messaggio di errore
RtApiDummy: This class provides no functionality, che sto cercando di capire da dove deriva, comunque grazie.
A proposito di ASIO ho scaricato i sorgenti direttamente dal sito della steimber ma anche con esso non riesco a cominciare, avresti qualche piccolo esempio da passarmi.
Grazie.
Da lì dove?
I campioni PCM sono il contenuto musicale, organizzato in maniera interlacciata prima il canale sinistro e poi il destro esattamente come arrivano dall'esterno.
La libreria RtAudio, così come tutte le altre, ti restituisce un array di valori che rispecchia questa struttura. Poi sta a te usarli come meglio credi.
Ciao, rieccomi!
volevo chiederti come faccio a prendere questi valori e ad esempio organizzarmeli in qualche modo in un file di testo?
Grazie!
tomminno
20-12-2007, 15:06
Ciao, rieccomi!
volevo chiederti come faccio a prendere questi valori e ad esempio organizzarmeli in qualche modo in un file di testo?
Grazie!
Nella funzione callback il secondo parametro rappresenta il puntatore all'array dei dati letti. Devi castarlo opportunamente in base al tipo di dato con cui hai aperto lo stream. La dimensione del buffer è quella specificata dal parametro bufferFrames.
A questo punto con i dati ci fai quello che vuoi.
Nella funzione callback il secondo parametro rappresenta il puntatore all'array dei dati letti. Devi castarlo opportunamente in base al tipo di dato con cui hai aperto lo stream. La dimensione del buffer è quella specificata dal parametro bufferFrames.
A questo punto con i dati ci fai quello che vuoi.
Ciao tommino, rieccomi,
mi faccio vivo perchè ho giochicchiato con il tool rtaudio,
e mi sono tirato fuori il mio bel file di testo dove nn capisco nulla o quasi. Nel file mi ritrovo sequenze di num esadec senza un apparente ordine, ti chiedo come posso fare ad isolare lo stream e poi trasformarlo in uno stream binario? Grazie ciao!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.