|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
[C++]Riprodurre un file audio
Salve a tutti,
è da tanto che non sono alle prese con c++ per cui chiedo aiuto per una cosa che non ho mai fatto. Devo riprodurre un file audio (qualsiasi formato va bene) al verificarsi di un certo evento. Lavoro su un sistema unix (Linux Ubuntu Hardy) ed avevo letto qualcosa che faceva intendere si postesse fare con l'ausilio della sola <stdio.h>. Potete darmi qualche suggerimento? Grazie
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Credo che sia possibile suonare un file audio su linux solo con stdio !!!
ma probabilmente devi aver installato dei driver che gestiscono la cosa. ed a quel punto basta aprire il file giusto sotto /dev vedi questo esempio credo che ti può essere di aiuto: http://users.powernet.co.uk/kienzle/...io/aurecord.cc |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
anche questa guida credo ti sia utile:
http://www.oreilly.de/catalog/multil...pt/ch14-05.htm |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Grazie tglman ci dò subito un'occhiata!!
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Grazie alla guida sopra linkata forse ho capito che direzione prendere tuttavia non sto riuscedo a riprodurre il contenuto di un file audio.
L'esempio proposto per programmare /dev/dsp permette di registrare un audio di 3 secondi e di riprodurlo. Ho visto che per registrare utilizza la funzione read allora ho pensato: Codice:
audio = open("/home/jacktric/Scrivania/Provadir/prova_audio.wav", O_RDONLY);
status = read(audio, buf, sizeof(buf)); /* mette il contenuto del file audio in buf */
status = write(fd, buf, sizeof(buf)); /* play it back */
In realtà però quando riproduco scrivendo nel file dsp mi viene fuori un suono pazzesco che nulla centra con quello della traccia!! Vi prego come posso fare ci sto perdendo i giorni!!
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Devi prima usare una libreria per leggere gli wav (o scrivertela da te) e poi passare i campioni ottenuti alla scheda audio. Io ti consiglio la libreria libsndfile |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Oppure usi aplay richiamandolo con fork - exec. Certo funziona solo se è presente ALSA nel sistema.
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Signori per me state parlando arabo (sopratutto cionci) comunque vi ringrazio per il vostro intervento e mi metto subito a studiare le possibilità da voi esposte!!
Certo che se mi fareste un piccolo banale esempio se ce lo avete a portata...
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
man aplay
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Ragazzi, ma è possibile che sia così difficile riprodurre un file audio?
Ci sto provando da giorni ormai...vi posto un pò di codice a cui sono giunto ditemi per favore cosa non va (ho usato la libreria libsndfile) Codice:
#include <stdio.h>
#include <linux/soundcard.h>
#include <sndfile.h>
int main()
{
int fd; /* sound device file descriptor */
int arg; /* argument for ioctl calls */
int status; /* return status of system calls */
int audio; /* audio da riprodurre file descriptor */
SF_INFO sfinfo;
sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_32;
sfinfo.samplerate = 22050;
sfinfo.channels = 1;
sfinfo.frames = 123456789 ;
char *filename ;
filename = "/home/jacktric/Scrivania/Provadir/prova_audio.wav";
/* apro il file audio da riprodurre in lettura */
SNDFILE* sf_audio;
sf_audio = sf_open(filename, SFM_READ, &sfinfo);
if (sf_audio == NULL) {
perror("open of file audio failed");
exit(1);
}
/* open sound device */
SNDFILE* sf_fd;
sf_fd = sf_open("/dev/dsp", SFM_WRITE, &sfinfo);
if (sf_fd == NULL) {
perror("open of /dev/dsp failed");
exit(1);
}
sf_command (sf_fd, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
/* Operazioni di lettura audio ed esecuzione */
int intptr[659924];
int status_read;
status_read = sf_read_int(sf_audio, intptr, 659924);
printf("status_read: %d\n", status_read);
int status_write;
status_write = sf_write_int(sf_fd, intptr, 659924);
printf("status_write: %d\n", status_write);
int close;
close = sf_close(sf_audio);
close = sf_close(sf_fd);
}
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
[OT]
Ci sara' anche un motivo per cui i giochi sotto Linux non sono molto diffusi. Sotto Windows, in C# Codice:
SoundPlayer sp = new SoundPlayer(@"C:\WINDOWS\Media\tada.wav"); sp.Play();
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#13 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() Quote:
Codice:
new SoundPlayer(@"C:\WINDOWS\Media\tada.wav").Play(); ![]() Quote:
http://msdn.microsoft.com/en-us/library/ms712879.aspx
|
|||
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Io credo proprio di no. |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ad esempio su linux se dovessi fare un player utilizzerei libsox. Apro un file (il bello è che supporta molti formati), estraggo i campioni PCM e poi lo butto su /dev/dsp.
Praticamente si riesce a fare un player audio multiformato in 20 linee di codice. |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Mmmm...
Nessuno che abbia usato ste libsndfile per riprodurre un file audio? Mi state per caso suggerendo qualche via alternativa? Le proposte windowsniane sono molto allettanti ma io mi trovo sotto Linux e qui DEVO rimanere...
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#20 | |
|
Member
Iscritto dal: Apr 2007
Città: Lecce
Messaggi: 227
|
Quote:
Ho letto tutta la documentazione di libsndfile ma non trovo nulla (apparentemente) riguardante l'estrazione della sola codifica pcm dell'audio o l'isolamento dell'header ecc ecc come mi avevi tu stesso suggerito. Allora pensando che lo facesse in automatico ho scritto quel codice che ho postato...ma nada de nada!!
__________________
MY PC CONFIGURATION: SCHEDA MADRE: ASROCK 4CORE-DUAL VSTA PROCESSORE: CONROE E6600 CORE DUO RAM: 1Gb Geil PC 3200 400MHz (2.5,4,4,8) ALI: ALLIED da 450WSCHEDA VIDEO: HD4850 Sapphire Design 512MB HARD DISK: Saegate 500Gb 7200Rpm MAST DVD LG LETTORE DVD LG |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:34.






















