Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. #include <stdio.h>
  2. //#include <tchar.h>
  3. //#include <conio.h>
  4. #include <math.h>
  5.  
  6. // Структура, описывающая заголовок WAV файла.
  7. typedef struct WAVHEADER {
  8. // WAV-формат начинается с RIFF-заголовка:
  9.  
  10. // Содержит символы "RIFF" в ASCII кодировке
  11. // (0x52494646 в big-endian представлении)
  12. char chunkId[4];
  13.  
  14. // 36 + subchunk2Size, или более точно:
  15. // 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
  16. // Это оставшийся размер цепочки, начиная с этой позиции.
  17. // Иначе говоря, это размер файла - 8, то есть,
  18. // исключены поля chunkId и chunkSize.
  19. unsigned long chunkSize;
  20.  
  21. // Содержит символы "WAVE"
  22. // (0x57415645 в big-endian представлении)
  23. char format[4];
  24.  
  25. // Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
  26. // Подцепочка "fmt " описывает формат звуковых данных:
  27.  
  28. // Содержит символы "fmt "
  29. // (0x666d7420 в big-endian представлении)
  30. char subchunk1Id[4];
  31.  
  32. // 16 для формата PCM.
  33. // Это оставшийся размер подцепочки, начиная с этой позиции.
  34. unsigned long subchunk1Size;
  35.  
  36. // Аудио формат, полный список можно получить здесь http://audiocoding.ru/wav_formats.txt
  37. // Для PCM = 1 (то есть, Линейное квантование).
  38. // Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
  39. unsigned short audioFormat;
  40.  
  41. // Количество каналов. Моно = 1, Стерео = 2 и т.д.
  42. unsigned short numChannels;
  43.  
  44. // Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
  45. unsigned long sampleRate;
  46.  
  47. // sampleRate * numChannels * bitsPerSample/8
  48. unsigned long byteRate;
  49.  
  50. // numChannels * bitsPerSample/8
  51. // Количество байт для одного сэмпла, включая все каналы.
  52. unsigned short blockAlign;
  53.  
  54. // Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
  55. unsigned short bitsPerSample;
  56.  
  57. // Подцепочка "data" содержит аудио-данные и их размер.
  58.  
  59. // Содержит символы "data"
  60. // (0x64617461 в big-endian представлении)
  61. char subchunk2Id[4];
  62.  
  63. // numSamples * numChannels * bitsPerSample/8
  64. // Количество байт в области данных.
  65. unsigned long subchunk2Size;
  66.  
  67. // Далее следуют непосредственно Wav данные.
  68. } WAVHEADER;
  69.  
  70. int main(int argc, char* argv[])
  71. {
  72. FILE *err;
  73. err = fopen("input.wav", "rb");
  74.  
  75. WAVHEADER header;
  76.  
  77. fread(&header, sizeof(WAVHEADER), 1, err);
  78.  
  79. // Выводим полученные данные
  80. printf("Sample rate: %lu\n", header.sampleRate);
  81. printf("Channels: %hu\n", header.numChannels);
  82. printf("Bits per sample: %d\n", header.bitsPerSample);
  83.  
  84. // Посчитаем длительность воспроизведения в секундах
  85. float fDurationSeconds = 1.f * header.subchunk2Size / (header.bitsPerSample / 8) / header.numChannels / header.sampleRate;
  86. int iDurationMinutes = (int)floor(fDurationSeconds) / 60;
  87. fDurationSeconds = fDurationSeconds - (iDurationMinutes * 60);
  88. printf("Duration: %02d:%02.f\n", iDurationMinutes, fDurationSeconds);
  89.  
  90. fclose(err);
  91.  
  92. getchar();
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement