 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Sab 29 Ene, 2011 3:55 pm Asunto: Archivo de sonido AU. |
|
|
Estimados.
Necesito reproducir archivos sonido con extensión .AU. Además necesito poder extraer los datos de su cabecera.
Leyendo en el foro encontré que para reproducir archivos WAV puede hacerse de la esta forma:
| Código: |
PlaySound("miMusica.wav",NULL,SND_FILENAME | SND_ASYNC);
|
Para este tipo de archivo de sonido me funciona. Pero he probado de esta manera para mi archivo AU:
| Código: |
PlaySound("Sonido.au",NULL,SND_FILENAME | SND_ASYNC);
|
y no me funciona. ¿Qué puedo hacer?. Con el programa Winamp puedo convertir todos los archivos AU en archivos WAV para después reproducirlos, pero la idea es usar los archivos AU originales y no tener que duplicar información ni perder tiempo en ese proceso.
Respecto a leer los datos de su cabecera, encontré que el formato es así:
| Cita: |
Audio data is encoded in three parts: a header, containing fields that
describe the audio encoding format; a variable-length information field,
in which, for instance, ASCII annotation may be stored; and, the actual
encoded audio. The header and data fields are written using big-endian
ordering.
The header part consists of six 32-bit quantities, in this order:
longword field description
-------- ----- -----------
0 magic number the value 0x2e736e64 (ASCII ".snd")
1 data offset the offset, in octets, to the data part.
The minimum valid number is 24 (decimal).
2 data size the size in octets, of the data part.
If unknown, the value 0xffffffff should
be used.
3 encoding the data encoding format:
value format
1 8-bit ISDN u-law
2 8-bit linear PCM [REF-PCM]
3 16-bit linear PCM
4 24-bit linear PCM
5 32-bit linear PCM
6 32-bit IEEE floating point
7 64-bit IEEE floating point
23 8-bit ISDN u-law compressed
using the CCITT G.721 ADPCM
voice data encoding scheme.
4 sample rate the number of samples/second (e.g., 8000)
5 channels the number of interleaved channels (e.g., 1)
The information part, consists of 0 or more octets, and starts 24 octets
after the beginning of the header part. The length of the information
part is calculated by subtracting 24 (decimal) from the data offset
field in the header part.
|
Lo que necesito es leer la cebecera de todos los archivos AU de un directorio y volcar algunos de esos datos en una grilla. Pero no sé cómo leer esos datos.
Perdón por saber tan poco y gracias de antemano por la ayuda que puedan brindarme.
Atentamente. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Sab 29 Ene, 2011 10:35 pm Asunto: |
|
|
Usando la API mciSendString puedes reproducir un medio multimedia siempre que tengas instalados los codecs necesarios.
| Código: |
#include <Mmsystem.h>
mciMediaPlay(String FileName)
{
String mciCmd = "open \"" + FileName + "\" alias mediaplay";
mciSendString("stop mediaplay", 0, 0, 0);
mciSendString("close mediaplay", 0, 0, 0);
if(!mciSendString(mciCmd.c_str(), 0, 0, 0))
mciSendString("play mediaplay", 0, 0, 0);
}
|
Saludos. |
|
| Volver arriba |
|
 |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Dom 30 Ene, 2011 1:35 am Asunto: |
|
|
¡Gracias Escafandra!. ¡Funcionó perfectamente!. Reproduce el archivo AU de sonido. Del mismo modo hice la función Pausa y Detener.
Me faltaría colocarle una barra de progreso, la cual yo pueda picar con el mouse y arrastrarla hacia cualquier posición haciendo saltar la reproducción a ese punto. ¿Cómo puedo hacer esto?.
¡Gracias!. Saludos atentos. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Dom 30 Ene, 2011 3:06 pm Asunto: |
|
|
| Código: | #include <Mmsystem.h>
mciPlay(String FileName)
{
String mciCmd = "open \"" + FileName + "\" alias mediaplay";
mciSendString("stop mediaplay", 0, 0, 0);
mciSendString("close mediaplay", 0, 0, 0);
if(!mciSendString(mciCmd.c_str(), 0, 0, 0))
mciSendString("play mediaplay", 0, 0, 0);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
mciPlay("MyFile.au");
char Buffer[256];
mciSendString("status mediaplay length", Buffer, sizeof(Buffer), 0);
MediaPosition->Max = StrToIntDef(Buffer, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char Buffer[256];
mciSendString("status mediaplay position", Buffer, sizeof(Buffer), 0);
MediaPosition->OnChange = 0;
MediaPosition->Position = StrToIntDef(Buffer, 0);
MediaPosition->OnChange = MediaPositionChange;
if(MediaPosition->Position == MediaPosition->Max)
mciSendString("stop mediaplay", 0, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MediaPositionChange(TObject *Sender)
{
mciSendString(("seek mediaplay to " + IntToStr(MediaPosition->Position)).c_str(), 0, 0, 0);
mciSendString("play mediaplay", 0, 0, 0);
}
|
Saludos. |
|
| Volver arriba |
|
 |
lucasmontani Cdt

Registrado: 28 May 2009Mensajes: 9
|
Publicado: Mie 02 Feb, 2011 2:00 am Asunto: |
|
|
Muchísimas gracias de nuevo, Escafandra.
Voy a probar con esto y después les cuento cómo me fue.
¿MediaPosition sería el nombre de un TProgressBar, verdad?. En ese caso me extraña la función MediaPositionChange, ya que mi TProgressBar no tiene evento OnChange. Uso C++Builder 2009.
Saludos. Atentamente, |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 03 Feb, 2011 12:19 am Asunto: |
|
|
| lucasmontani escribió: | | ...¿MediaPosition sería el nombre de un TProgressBar, verdad?... |
No, es un TTrackBar.
Saludos. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|