Отображение формата кодирования RIFF Wav файла - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Возникла такая проблема (простите нуба). При чтении Riff информации из Wav файла нужно чтобы формат кодирования отображался не просто номером(Как на скриншоте), а полноценным текстом, как в представленном файле. () И было бы идеально подключить этот файл, дабы брать информацию для отображения прямо из него.
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. namespace WavRiffAnalayzer
  5. {
  6. [StructLayout(LayoutKind.Sequential)]
  7. internal class WavHeader
  8. {
  9. public UInt32 ChunkId;
  10. public UInt32 ChunkSize;
  11. public UInt32 Format;
  12. public UInt32 Subchunk1Id;
  13. public UInt32 Subchunk1Size;
  14. public UInt16 AudioFormat;
  15. public UInt16 NumChannels;
  16. public UInt32 SampleRate;
  17. public UInt32 ByteRate;
  18. public UInt16 BlockAlign;
  19. public UInt16 BitsPerSample;
  20. public UInt32 Subchunk2Id;
  21. public UInt32 Subchunk2Size;
  22. }
  23. class Program
  24. {
  25. static void Main(string[] args)
  26. {
  27. var header = new WavHeader();
  28. var headerSize = Marshal.SizeOf(header);
  29. System.Console.WriteLine("Введите путь к файлу.");
  30. string a = Console.ReadLine();
  31. var fileStream = new FileStream(a, FileMode.Open, FileAccess.Read);
  32. var buffer = new byte[headerSize];
  33. fileStream.Read(buffer, 0, headerSize);
  34. var headerPtr = Marshal.AllocHGlobal(headerSize);
  35. Marshal.Copy(buffer, 0, headerPtr, headerSize);
  36. Marshal.PtrToStructure(headerPtr, header);
  37. ushort wf = header.AudioFormat; //тут я присвоил число из riff файла к переменной wf
  38. //Console.WriteLine(wf); //энто я проверял прочиталось ли число
  39.  
  40. Console.WriteLine("Формат Кодирования: {0}", header.AudioFormat);
  41. Console.WriteLine("Число каналов: {0}", header.NumChannels);
  42. Console.WriteLine("Частота дискретизации: {0}", header.SampleRate);
  43. Console.WriteLine("Битность файла: {0}", header.BitsPerSample);
  44.  
  45. var Seconds = 1.0 * header.ChunkSize / (header.BitsPerSample / 8.0) / header.NumChannels / header.SampleRate;
  46. var Minutes = (int)Math.Floor(Seconds / 60);
  47. Seconds = Seconds - (Minutes * 60);
  48. Console.WriteLine("Продолжительность звучания: {0:00}:{1:00}", Minutes, Seconds);
  49. Console.ReadKey();
  50. Marshal.FreeHGlobal(headerPtr);
  51. }
  52. }
Авось кто подскажет решение. Заранее спасибо!

Решение задачи: «Отображение формата кодирования RIFF Wav файла»

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. class Program
  5. {
  6.  
  7.     public enum WavFormats : UInt16
  8.     {
  9.         WAVE_FORMAT_UNKNOWN = 0x0000, /* Microsoft Corporation */
  10.         WAVE_FORMAT_PCM = 0x0001, /* Microsoft Corporation */
  11.         WAVE_FORMAT_ADPCM = 0x0002, /* Microsoft Corporation */
  12.         WAVE_FORMAT_IEEE_FLOAT = 0x0003, /* Microsoft Corporation */
  13.         WAVE_FORMAT_VSELP = 0x0004, /* Compaq Computer Corp. */
  14.         WAVE_FORMAT_IBM_CVSD = 0x0005, /* IBM Corporation */
  15.         WAVE_FORMAT_ALAW = 0x0006, /* Microsoft Corporation */
  16.         WAVE_FORMAT_MULAW = 0x0007, /* Microsoft Corporation */
  17.         WAVE_FORMAT_DTS = 0x0008, /* Microsoft Corporation */
  18.         WAVE_FORMAT_DRM = 0x0009, /* Microsoft Corporation */
  19.         WAVE_FORMAT_OKI_ADPCM = 0x0010, /* OKI */
  20.         WAVE_FORMAT_DVI_ADPCM = 0x0011, /* Intel Corporation */
  21.         WAVE_FORMAT_IMA_ADPCM = (WAVE_FORMAT_DVI_ADPCM), /* Intel Corporation */
  22.         WAVE_FORMAT_MEDIASPACE_ADPCM = 0x0012, /* Videologic */
  23.         WAVE_FORMAT_SIERRA_ADPCM = 0x0013, /* Sierra Semiconductor Corp */
  24.         WAVE_FORMAT_G723_ADPCM = 0x0014, /* Antex Electronics Corporation */
  25.         WAVE_FORMAT_DIGISTD = 0x0015, /* DSP Solutions, Inc. */
  26.         WAVE_FORMAT_DIGIFIX = 0x0016, /* DSP Solutions, Inc. */
  27.         WAVE_FORMAT_DIALOGIC_OKI_ADPCM = 0x0017, /* Dialogic Corporation */
  28.         WAVE_FORMAT_MEDIAVISION_ADPCM = 0x0018, /* Media Vision, Inc. */
  29.         WAVE_FORMAT_CU_CODEC = 0x0019, /* Hewlett-Packard Company */
  30.         WAVE_FORMAT_YAMAHA_ADPCM = 0x0020, /* Yamaha Corporation of America */
  31.         WAVE_FORMAT_SONARC = 0x0021, /* Speech Compression */
  32.         WAVE_FORMAT_DSPGROUP_TRUESPEECH = 0x0022, /* DSP Group, Inc */
  33.         WAVE_FORMAT_ECHOSC1 = 0x0023, /* Echo Speech Corporation */
  34.         WAVE_FORMAT_AUDIOFILE_AF36 = 0x0024, /* Virtual Music, Inc. */
  35.         WAVE_FORMAT_APTX = 0x0025, /* Audio Processing Technology */
  36.         WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /* Virtual Music, Inc. */
  37.         WAVE_FORMAT_PROSODY_1612 = 0x0027, /* Aculab plc */
  38.         WAVE_FORMAT_LRC = 0x0028, /* Merging Technologies S.A. */
  39.         WAVE_FORMAT_DOLBY_AC2 = 0x0030, /* Dolby Laboratories */
  40.         WAVE_FORMAT_GSM610 = 0x0031, /* Microsoft Corporation */
  41.         WAVE_FORMAT_MSNAUDIO = 0x0032, /* Microsoft Corporation */
  42.         WAVE_FORMAT_ANTEX_ADPCME = 0x0033, /* Antex Electronics Corporation */
  43.         WAVE_FORMAT_CONTROL_RES_VQLPC = 0x0034, /* Control Resources Limited */
  44.         WAVE_FORMAT_DIGIREAL = 0x0035, /* DSP Solutions, Inc. */
  45.         WAVE_FORMAT_DIGIADPCM = 0x0036, /* DSP Solutions, Inc. */
  46.         WAVE_FORMAT_CONTROL_RES_CR10 = 0x0037, /* Control Resources Limited */
  47.         WAVE_FORMAT_NMS_VBXADPCM = 0x0038, /* Natural MicroSystems */
  48.         WAVE_FORMAT_CS_IMAADPCM = 0x0039, /* Crystal Semiconductor IMA ADPCM */
  49.         WAVE_FORMAT_ECHOSC3 = 0x003A, /* Echo Speech Corporation */
  50.         WAVE_FORMAT_ROCKWELL_ADPCM = 0x003B, /* Rockwell International */
  51.         WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C, /* Rockwell International */
  52.         WAVE_FORMAT_XEBEC = 0x003D, /* Xebec Multimedia Solutions Limited */
  53.         WAVE_FORMAT_G721_ADPCM = 0x0040, /* Antex Electronics Corporation */
  54.         WAVE_FORMAT_G728_CELP = 0x0041, /* Antex Electronics Corporation */
  55.         WAVE_FORMAT_MSG723 = 0x0042, /* Microsoft Corporation */
  56.         WAVE_FORMAT_MPEG = 0x0050, /* Microsoft Corporation */
  57.         WAVE_FORMAT_RT24 = 0x0052, /* InSoft, Inc. */
  58.         WAVE_FORMAT_PAC = 0x0053, /* InSoft, Inc. */
  59.         WAVE_FORMAT_MPEGLAYER3 = 0x0055, /* ISO/MPEG Layer3 Format Tag */
  60.         WAVE_FORMAT_LUCENT_G723 = 0x0059, /* Lucent Technologies */
  61.         WAVE_FORMAT_CIRRUS = 0x0060, /* Cirrus Logic */
  62.         WAVE_FORMAT_ESPCM = 0x0061, /* ESS Technology */
  63.         WAVE_FORMAT_VOXWARE = 0x0062, /* Voxware Inc */
  64.         WAVE_FORMAT_CANOPUS_ATRAC = 0x0063, /* Canopus, co., Ltd. */
  65.         WAVE_FORMAT_G726_ADPCM = 0x0064, /* APICOM */
  66.         WAVE_FORMAT_G722_ADPCM = 0x0065, /* APICOM */
  67.         WAVE_FORMAT_DSAT_DISPLAY = 0x0067, /* Microsoft Corporation */
  68.         WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 0x0069, /* Voxware Inc */
  69.         WAVE_FORMAT_VOXWARE_AC8 = 0x0070, /* Voxware Inc */
  70.         WAVE_FORMAT_VOXWARE_AC10 = 0x0071, /* Voxware Inc */
  71.         WAVE_FORMAT_VOXWARE_AC16 = 0x0072, /* Voxware Inc */
  72.         WAVE_FORMAT_VOXWARE_AC20 = 0x0073, /* Voxware Inc */
  73.         WAVE_FORMAT_VOXWARE_RT24 = 0x0074, /* Voxware Inc */
  74.         WAVE_FORMAT_VOXWARE_RT29 = 0x0075, /* Voxware Inc */
  75.         WAVE_FORMAT_VOXWARE_RT29HW = 0x0076, /* Voxware Inc */
  76.         WAVE_FORMAT_VOXWARE_VR12 = 0x0077, /* Voxware Inc */
  77.         WAVE_FORMAT_VOXWARE_VR18 = 0x0078, /* Voxware Inc */
  78.         WAVE_FORMAT_VOXWARE_TQ40 = 0x0079, /* Voxware Inc */
  79.         WAVE_FORMAT_SOFTSOUND = 0x0080, /* Softsound, Ltd. */
  80.         WAVE_FORMAT_VOXWARE_TQ60 = 0x0081, /* Voxware Inc */
  81.         WAVE_FORMAT_MSRT24 = 0x0082, /* Microsoft Corporation */
  82.         WAVE_FORMAT_G729A = 0x0083, /* AT&T Labs, Inc. */
  83.         WAVE_FORMAT_MVI_MVI2 = 0x0084, /* Motion Pixels */
  84.         WAVE_FORMAT_DF_G726 = 0x0085, /* DataFusion Systems (Pty) (Ltd) */
  85.         WAVE_FORMAT_DF_GSM610 = 0x0086, /* DataFusion Systems (Pty) (Ltd) */
  86.         WAVE_FORMAT_ISIAUDIO = 0x0088, /* Iterated Systems, Inc. */
  87.         WAVE_FORMAT_ONLIVE = 0x0089, /* OnLive! Technologies, Inc. */
  88.         WAVE_FORMAT_SBC24 = 0x0091, /* Siemens Business Communications Sys */
  89.         WAVE_FORMAT_DOLBY_AC3_SPDIF = 0x0092, /* Sonic Foundry */
  90.         WAVE_FORMAT_MEDIASONIC_G723 = 0x0093, /* MediaSonic */
  91.         WAVE_FORMAT_PROSODY_8KBPS = 0x0094, /* Aculab plc */
  92.         WAVE_FORMAT_ZYXEL_ADPCM = 0x0097, /* ZyXEL Communications, Inc. */
  93.         WAVE_FORMAT_PHILIPS_LPCBB = 0x0098, /* Philips Speech Processing */
  94.         WAVE_FORMAT_PACKED = 0x0099, /* Studer Professional Audio AG */
  95.         WAVE_FORMAT_MALDEN_PHONYTALK = 0x00A0, /* Malden Electronics Ltd. */
  96.         WAVE_FORMAT_RHETOREX_ADPCM = 0x0100, /* Rhetorex Inc. */
  97.         WAVE_FORMAT_IRAT = 0x0101, /* BeCubed Software Inc. */
  98.         WAVE_FORMAT_VIVO_G723 = 0x0111, /* Vivo Software */
  99.         WAVE_FORMAT_VIVO_SIREN = 0x0112, /* Vivo Software */
  100.         WAVE_FORMAT_DIGITAL_G723 = 0x0123, /* Digital Equipment Corporation */
  101.         WAVE_FORMAT_SANYO_LD_ADPCM = 0x0125, /* Sanyo Electric Co., Ltd. */
  102.         WAVE_FORMAT_SIPROLAB_ACEPLNET = 0x0130, /* Sipro Lab Telecom Inc. */
  103.         WAVE_FORMAT_SIPROLAB_ACELP4800 = 0x0131, /* Sipro Lab Telecom Inc. */
  104.         WAVE_FORMAT_SIPROLAB_ACELP8V3 = 0x0132, /* Sipro Lab Telecom Inc. */
  105.         WAVE_FORMAT_SIPROLAB_G729 = 0x0133, /* Sipro Lab Telecom Inc. */
  106.         WAVE_FORMAT_SIPROLAB_G729A = 0x0134, /* Sipro Lab Telecom Inc. */
  107.         WAVE_FORMAT_SIPROLAB_KELVIN = 0x0135, /* Sipro Lab Telecom Inc. */
  108.         WAVE_FORMAT_G726ADPCM = 0x0140, /* Dictaphone Corporation */
  109.         WAVE_FORMAT_QUALCOMM_PUREVOICE = 0x0150, /* Qualcomm, Inc. */
  110.         WAVE_FORMAT_QUALCOMM_HALFRATE = 0x0151, /* Qualcomm, Inc. */
  111.         WAVE_FORMAT_TUBGSM = 0x0155, /* Ring Zero Systems, Inc. */
  112.         WAVE_FORMAT_MSAUDIO1 = 0x0160, /* Microsoft Corporation */
  113.         WAVE_FORMAT_UNISYS_NAP_ADPCM = 0x0170, /* Unisys Corp. */
  114.         WAVE_FORMAT_UNISYS_NAP_ULAW = 0x0171, /* Unisys Corp. */
  115.         WAVE_FORMAT_UNISYS_NAP_ALAW = 0x0172, /* Unisys Corp. */
  116.         WAVE_FORMAT_UNISYS_NAP_16K = 0x0173, /* Unisys Corp. */
  117.         WAVE_FORMAT_CREATIVE_ADPCM = 0x0200, /* Creative Labs, Inc */
  118.         WAVE_FORMAT_CREATIVE_FASTSPEECH8 = 0x0202, /* Creative Labs, Inc */
  119.         WAVE_FORMAT_CREATIVE_FASTSPEECH10 = 0x0203, /* Creative Labs, Inc */
  120.         WAVE_FORMAT_UHER_ADPCM = 0x0210, /* UHER informatic GmbH */
  121.         WAVE_FORMAT_QUARTERDECK = 0x0220, /* Quarterdeck Corporation */
  122.         WAVE_FORMAT_ILINK_VC = 0x0230, /* I-link Worldwide */
  123.         WAVE_FORMAT_RAW_SPORT = 0x0240, /* Aureal Semiconductor */
  124.         WAVE_FORMAT_ESST_AC3 = 0x0241, /* ESS Technology, Inc. */
  125.         WAVE_FORMAT_IPI_HSX = 0x0250, /* Interactive Products, Inc. */
  126.         WAVE_FORMAT_IPI_RPELP = 0x0251, /* Interactive Products, Inc. */
  127.         WAVE_FORMAT_CS2 = 0x0260, /* Consistent Software */
  128.         WAVE_FORMAT_SONY_SCX = 0x0270, /* Sony Corp. */
  129.         WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /* Fujitsu Corp. */
  130.         WAVE_FORMAT_BTV_DIGITAL = 0x0400, /* Brooktree Corporation */
  131.         WAVE_FORMAT_QDESIGN_MUSIC = 0x0450, /* QDesign Corporation */
  132.         WAVE_FORMAT_VME_VMPCM = 0x0680, /* AT&T Labs, Inc. */
  133.         WAVE_FORMAT_TPC = 0x0681, /* AT&T Labs, Inc. */
  134.         WAVE_FORMAT_OLIGSM = 0x1000, /* Ing C. Olivetti & C., S.p.A. */
  135.         WAVE_FORMAT_OLIADPCM = 0x1001, /* Ing C. Olivetti & C., S.p.A. */
  136.         WAVE_FORMAT_OLICELP = 0x1002, /* Ing C. Olivetti & C., S.p.A. */
  137.         WAVE_FORMAT_OLISBC = 0x1003, /* Ing C. Olivetti & C., S.p.A. */
  138.         WAVE_FORMAT_OLIOPR = 0x1004, /* Ing C. Olivetti & C., S.p.A. */
  139.         WAVE_FORMAT_LH_CODEC = 0x1100, /* Lernout & Hauspie */
  140.         WAVE_FORMAT_NORRIS = 0x1400, /* Norris Communications, Inc. */
  141.         WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 0x1500, /* AT&T Labs, Inc. */
  142.         WAVE_FORMAT_DVM = 0x2000 /* FAST Multimedia AG */
  143.     }
  144.  
  145.  
  146.  
  147.    [StructLayout(LayoutKind.Sequential)]
  148.     public class WavHeader
  149.     {
  150.         public UInt32 ChunkId;
  151.         public UInt32 ChunkSize;
  152.         public UInt32 Format;
  153.         public UInt32 Subchunk1Id;
  154.         public UInt32 Subchunk1Size;
  155.         public WavFormats AudioFormat;
  156.         public UInt16 NumChannels;
  157.         public UInt32 SampleRate;
  158.         public UInt32 ByteRate;
  159.         public UInt16 BlockAlign;
  160.         public UInt16 BitsPerSample;
  161.         public UInt32 Subchunk2Id;
  162.         public UInt32 Subchunk2Size;
  163.     }
  164.  
  165.  
  166.         static void Main(string[] args)
  167.         {
  168.             var header = new WavHeader();
  169.  
  170.             var headerSize = Marshal.SizeOf(header);
  171.  
  172.             System.Console.WriteLine("Введите путь к файлу.");
  173.             string a = Console.ReadLine();
  174.  
  175.             var fileStream = new FileStream(a, FileMode.Open, FileAccess.Read);
  176.             var buffer = new byte[headerSize];
  177.             fileStream.Read(buffer, 0, headerSize);
  178.  
  179.             var headerPtr = Marshal.AllocHGlobal(headerSize);
  180.  
  181.             Marshal.Copy(buffer, 0, headerPtr, headerSize);
  182.  
  183.             Marshal.PtrToStructure(headerPtr, header);
  184.  
  185.            WavFormats wf = header.AudioFormat; //тут я присвоил число из riff файла к переменной wf
  186.  
  187.             //Console.WriteLine(wf); //энто я проверял прочиталось ли число
  188.  
  189.  
  190.             Console.WriteLine("Формат Кодирования: {0}", header.AudioFormat);
  191.             Console.WriteLine("Число каналов: {0}", header.NumChannels);
  192.             Console.WriteLine("Частота дискретизации: {0}", header.SampleRate);
  193.             Console.WriteLine("Битность файла: {0}", header.BitsPerSample);
  194.  
  195.  
  196.             var Seconds = 1.0 * header.ChunkSize / (header.BitsPerSample / 8.0) / header.NumChannels / header.SampleRate;
  197.             var Minutes = (int)Math.Floor(Seconds / 60);
  198.             Seconds = Seconds - (Minutes * 60);
  199.             Console.WriteLine("Продолжительность звучания: {0:00}:{1:00}", Minutes, Seconds);
  200.  
  201.             Marshal.FreeHGlobal(headerPtr);
  202.        
  203.         Console.ReadKey(true);
  204.  
  205.     }
  206.  
  207. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы