donc ce que j'ai un tableau court [] qui représente les données brutes d'un fichier WAV. Cela signifie qu'il n'inclut aucune information d'en-tête ou de pied de page qui est généralement incluse. Pour lire cet audio, j'ai besoin de le convertir en un flux, malheureusement les données dans ce tableau court [] sont Int16 et beaucoup de valeurs dépassent 255, donc ne peuvent pas être converties en octets et ne peuvent pas être converties en un courant. Est-ce que quelqu'un a une idée de comment je serais capable de lire ces données audio?Convertir court [] en Stream qui peut être joué en tant que Audio
3
A
Répondre
9
Vous pouvez convertir le tableau court vers un tableau d'octets:
short[] sampleData = ...
byte[] byteArray = new byte[sampleData.Length*2];
Buffer.BlockCopy(sampleData , 0, byteArray, 0, byteArray.Length);
Ensuite, vous pouvez créer un flux d'ondes en utilisant la classe WaveMemoryStream
ci-dessous - pour que vous aurez besoin de connaître le format d'onde de vos données d'échantillon . Ce flux peut ensuite être enregistré en tant que fichier WAV ou être lu par SoundPlayer
. Un flux «d'une certaine sorte» est trop vague;
public class WaveMemoryStream : Stream
{
public override bool CanSeek { get { return false; } }
public override bool CanWrite { get { return false; } }
public override bool CanRead { get { return true; } }
public override long Length { get { return _waveStream.Length; } }
public override long Position { get { return _waveStream.Position; } set { _waveStream.Position = value; } }
private MemoryStream _waveStream;
public WaveMemoryStream(byte[] sampleData, int audioSampleRate, ushort audioBitsPerSample, ushort audioChannels)
{
_waveStream = new MemoryStream();
WriteHeader(_waveStream, sampleData.Length, audioSampleRate, audioBitsPerSample, audioChannels);
WriteSamples(_waveStream, sampleData);
_waveStream.Position = 0;
}
public void WriteHeader(Stream stream, int length, int audioSampleRate, ushort audioBitsPerSample, ushort audioChannels)
{
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(new char[4] { 'R', 'I', 'F', 'F' });
int fileSize = 36 + length;
bw.Write(fileSize);
bw.Write(new char[8] { 'W', 'A', 'V', 'E', 'f', 'm', 't', ' ' });
bw.Write((int)16);
bw.Write((short)1);
bw.Write((short)audioChannels);
bw.Write(audioSampleRate);
bw.Write((int)(audioSampleRate * ((audioBitsPerSample * audioChannels)/8)));
bw.Write((short)((audioBitsPerSample * audioChannels)/8));
bw.Write((short)audioBitsPerSample);
bw.Write(new char[4] { 'd', 'a', 't', 'a' });
bw.Write(length);
}
public void WriteSamples(Stream stream, byte[] sampleData)
{
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(sampleData, 0, sampleData.Length);
}
public override int Read(byte[] buffer, int offset, int count)
{
return _waveStream.Read(buffer, offset, count);
}
public virtual void WriteTo(Stream stream)
{
int bytesRead = 0;
byte[] buffer = new byte[8192];
do
{
bytesRead = Read(buffer, 0, buffer.Length);
stream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
stream.Flush();
}
public override void Flush()
{
_waveStream.Flush();
}
public override long Seek(long offset, SeekOrigin origin)
{
return _waveStream.Seek(offset, origin);
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
public override void Write(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}
}
+0
Merci l'homme ... cela aide beaucoup. – UNOWN301
Questions connexes
- 1. comment convertir .h263 dans avi ou toute autre extension qui peut être joué? C++
- 2. Convertir SVG-stream en png ou jpg
- 3. Convertir l'objet en court
- 4. Memory Stream convertir en octet
- 5. minuterie ne peut être ajouté en tant que contrôle WinForms
- 6. audio Stream sur le réseau en MP3
- 7. Pourquoi je reçois Stream en tant que System.IO.UnmanagedMemoryStream?
- 8. java convertir int en court
- 9. widget tableau flash qui peut enregistrer en tant que PDF
- 10. Une classe privée qui peut être passée n'importe où en tant que paramètre - est-ce possible?
- 11. Une application Delphi autonome qui peut également être installée en tant que service Windows
- 12. Comment une sonnerie peut-elle être enregistrée en tant que chaîne?
- 13. Lecture de Byte [] en tant que Java court non signé
- 14. Convertir flv uniquement audio en aac: ffmpeg
- 15. Est-ce que ce JQuery peut être plus court?
- 16. Niveau de sortie audio sous une forme qui peut être converti en décibels
- 17. ffmpeg: convertir flv uniquement audio en swf
- 18. Comment un ELF peut-il être "court"?
- 19. TreeView s'affiche en tant que CustomControl - ne peut pas être rediffusé en TreeView
- 20. iPhone - Enregistrement audio joué uniquement par l'application
- 21. fichier multimédia ne peut être activé et joué
- 22. Lecture de Core Audio en tant que tableau de flottants
- 23. Convertir court [] en une image en niveaux de gris
- 24. Convertir des fichiers audio en mp3 en utilisant ffmpeg
- 25. MS SQL Convertir la date en court
- 26. Combiner peut-être en tant que lignes monad en quelque chose de plus général
- 27. Un opérateur peut-il être surchargé en tant que méthode de classe en python?
- 28. javascript/jquery convertir utc en heure locale en format court
- 29. Convertir char * en court et caractère
- 30. Puis-je convertir un objet Stream en un objet FileInfo?
si vous connaissez la disposition désirée, l'endianness, etc. - c'est-à-dire les entrées => sorties ... –