Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Archivo de sonido AU.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Archivo de sonido AU. Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¡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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

lucasmontani escribió:
...¿MediaPosition sería el nombre de un TProgressBar, verdad?...

No, es un TTrackBar.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.