0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 2

Как считать заголовок WAV файла?

06.12.2014, 15:18. Показов 2546. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как считать заголовок WAV файла? Есть код под конс. но надо windowsform. Помогите! Заранее , спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
 
// Структура, описывающая заголовок WAV файла.
struct WAVHEADER
{
    // WAV-формат начинается с RIFF-заголовка:
 
    // Содержит символы "RIFF" в ASCII кодировке
    // (0x52494646 в big-endian представлении)
    char chunkId[4];
 
    // 36 + subchunk2Size, или более точно:
    // 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
    // Это оставшийся размер цепочки, начиная с этой позиции.
    // Иначе говоря, это размер файла - 8, то есть,
    // исключены поля chunkId и chunkSize.
    unsigned long chunkSize;
 
    // Содержит символы "WAVE"
    // (0x57415645 в big-endian представлении)
    char format[4];
 
    // Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
    // Подцепочка "fmt " описывает формат звуковых данных:
    
    // Содержит символы "fmt "
    // (0x666d7420 в big-endian представлении)
    char subchunk1Id[4];
 
    // 16 для формата PCM.
    // Это оставшийся размер подцепочки, начиная с этой позиции.
    unsigned long subchunk1Size;
 
    // Аудио формат, полный список можно получить здесь 
    // Для PCM = 1 (то есть, Линейное квантование).
    // Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
    unsigned short audioFormat;
 
    // Количество каналов. Моно = 1, Стерео = 2 и т.д.
    unsigned short numChannels;
 
    // Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
    unsigned long sampleRate;
 
    // sampleRate * numChannels * bitsPerSample/8
    unsigned long byteRate;
 
    // numChannels * bitsPerSample/8
    // Количество байт для одного сэмпла, включая все каналы.
    unsigned short blockAlign;
 
    // Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
    unsigned short bitsPerSample;
 
    // Подцепочка "data" содержит аудио-данные и их размер.
 
    // Содержит символы "data"
    // (0x64617461 в big-endian представлении)
    char subchunk2Id[4];
 
    // numSamples * numChannels * bitsPerSample/8
    // Количество байт в области данных.
    unsigned long subchunk2Size;
 
    // Далее следуют непосредственно Wav данные.
};
 
int main(int argc, _TCHAR* argv[])
{
    FILE *file;
    errno_t err;
    err = fopen_s(&file, "test.wav", "rb");
    if (err)
    {
        printf_s("Failed open file, error %d", err);
        return 0;
    }
 
    WAVHEADER header;
 
    fread_s(&header, sizeof(WAVHEADER), sizeof(WAVHEADER), 1, file);
 
    // Выводим полученные данные
    printf_s("Sample rate: %d\n", header.sampleRate);
    printf_s("Channels: %d\n", header.numChannels);
    printf_s("Bits per sample: %d\n", header.bitsPerSample);
 
    // Посчитаем длительность воспроизведения в секундах
    float fDurationSeconds = 1.f * header.subchunk2Size / (header.bitsPerSample / 8) / header.numChannels / header.sampleRate;
    int iDurationMinutes = (int)floor(fDurationSeconds) / 60;
    fDurationSeconds = fDurationSeconds - (iDurationMinutes * 60);
    printf_s("Duration: %02d:%02.f\n", iDurationMinutes, fDurationSeconds);
 
    fclose(file);
 
    _getch();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2014, 15:18
Ответы с готовыми решениями:

Как считать заголовок Wav файла
Как считать заголовок

Как считать из .wav файла длительность аудиозаписи?
Здравствуйте! Какой командой можно занести аудиофайл в переменную Добавлено через 20 минут Как считать из .wav файла длительность...

Заголовок wav файла
Помогите решить проблему. Пытаюсь написать программу, которая бы считывала информацию из заголовка wav файла (Subchunk2Size, Bits per...

1
Заблокирован
12.12.2014, 05:39
А почему нельзя скомпилировать код под консоль и полученное консольное приложение запускать из приложения Winform? Передачу информации туда и обратно можно осуществить через аргументы + return (либо саму консоль, в нее можно что-то программно вводить при запуске приложения и отслеживать вывод).

Да и свой код с нуля написать обычно проще, чем переделывать готовый.
wav обычный бинарный формат. Читаем по байтам с помощью BinaryReader, получаем значения определенных по счету байтов - они и содержат нужную нам информацию.
Весь вопрос только в том, какие именно байт нам нужны. Ну это можно узнать опытным путем: в каком-нибудь редакторе создаем wav, открываем HEX-редактором, потом что-то меняем в этом wav, снова открываем в HEX-редакторе, смотрим, какие байты изменились. Вот в этих байтах и хранится нужная нам информация.

Конечно, не со всеми форматами такое проходит одинаково успешно, попадаются всякие подводные камни. У меня с JPEGом так не получилось. Но вероятность высока.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2014, 05:39
Помогаю со студенческими работами здесь

Заголовок WAV файла
Требуется прочитать сам звук из wav файла. Читаю для начала заголовок , таким образом: wavheader openWH(FILE *fo) { wavheader...

Создание нового Wav - файла, используя заголовок другого
Помогите пожалуйста! Задали такую задачу: надо полностью считать все о любом WAV файле (заголовок, сами данные), а потом записать их в...

Считать data из wav файла
Ребят, все перелазил и не могу дойти как считать данные звукового файла. Заголовок считал. Теперь нужно считать в массив данные,...

Как побайтово считать Wav файл?
Так, чтобы у я мог с ним работать, а потом опять выгрузить его как wav файл?

Как считать файл Wav в массив байт
Добрый день дорогие форумчане. Подскажите пожалуйста, как считать wav файл в byte. Выглядит это вот так byte buffer =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru