| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	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: 01:12.









		
		
		




		
		
 
 







