Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15

Перезапись из одного wav файла в другой

21.04.2019, 03:19. Показов 2021. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется такой код:
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <tchar.h>
#include "wave.h"
#include <windows.h>
#define N 2048
 
struct WAVEHEADER {
    char chunkId[4];//символы RIFF
    unsigned long chunkSize;//оставшийся размер цепочки
    char format[4];//символы WAVE
    char subchunk1Id[4];//символы fmt
    unsigned long subchunk1Size;//оставшийся размер подцепочки
    unsigned short audioFormat;//аудио-формат
    unsigned short numChannels;//количество каналов
    unsigned long sampleRate;//частота дискретизации
    unsigned long byteRate;//sampleRate * numChannels * bitsPerSample/8
    unsigned short blockAlign;//количество байт для одного сэмпла (numChannels * bitsPerSample/8)
    unsigned short bitsPerSample;//точность звучания
 
    //data
    char subchunk2Id[4];//содержит символы data
    unsigned long subchunk2Size;//количество байт в области данных (numSamples * numChannels * bitsPerSample/8)
 
    //далее следуют непосредственно wav данные
};
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    FILE *file = fopen("Slipknot_1.wav", "rb");
    FILE *txt = fopen("txt.txt", "w");
    WAVEHEADER head;
    short *data;
    short buf[N];
    data = (short *)malloc(N * sizeof(short));
    
    fread_s(&head, sizeof(WAVEHEADER), sizeof(WAVEHEADER), 1, file);
 
    fprintf(txt, "---Считывание заголовка wav файла---\n\n");
    fprintf(txt, "Информация о формате: %c%c%c%c\n", head.chunkId[0], head.chunkId[1], head.chunkId[2], head.chunkId[3]);
    fprintf(txt, "Формат данных: %c%c%c%c\n", head.format[0], head.format[1], head.format[2], head.format[3]);
    fprintf(txt, "Информация о сжатии: %ld\n", head.audioFormat);
    fprintf(txt, "Параметры wav-файла: %c%c%c%c\n", head.subchunk1Id[0], head.subchunk1Id[1], head.subchunk1Id[2], head.subchunk1Id[3]);
    fprintf(txt, "Размер: %ld байт\n", head.chunkSize);
    fprintf(txt, "Частота: %d\n", head.sampleRate);
    fprintf(txt, "Количество каналов: %d", head.numChannels);
    if (head.numChannels == 2)
        fprintf(txt, " (Стерео)\n");
    else
        fprintf(txt, " (Моно)\n");
    fprintf(txt, "Байт в секунду: %ld\n", head.byteRate);
    fprintf(txt, "Размер сэмпла: %d бит\n", head.bitsPerSample);
    fprintf(txt, "Размер области данных: %ld байт\n", head.subchunk2Size);
    fprintf(txt, "\n\n\n");
    
    
    for (int i = 0; i < N; i++) {
        fread(&buf, sizeof(short), i+1, file);
        fprintf(txt, "%i\n", buf[i]);
    }
    
 
    printf("---Считывание заголовка wav файла---\n\n");
    printf("Информация о формате: %c%c%c%c\n", head.chunkId[0], head.chunkId[1], head.chunkId[2], head.chunkId[3]);
    printf("Формат данных: %c%c%c%c\n", head.format[0], head.format[1], head.format[2], head.format[3]);
    printf("Информация о сжатии: %ld\n", head.audioFormat);
    printf("Параметры wav-файла: %c%c%c%c\n", head.subchunk1Id[0], head.subchunk1Id[1], head.subchunk1Id[2], head.subchunk1Id[3]);
    printf("Размер: %ld байт\n", head.chunkSize);
    printf("Частота: %d\n", head.sampleRate);
    printf("Количество каналов: %d", head.numChannels);
    if (head.numChannels == 2)
        printf(" (Стерео)\n");
    else
        printf(" (Моно)\n");
    printf("Байт в секунду: %ld\n", head.byteRate);
    printf("Размер сэмпла: %d бит\n", head.bitsPerSample);
    printf("Размер области данных: %ld байт\n", head.subchunk2Size);
 
    FILE *wave = fopen("new.wav", "wb");
    fwrite(&head, sizeof(WAVEHEADER), 1, wave);
    for(int i = 0; i < N; i++)
        fwrite(buf, sizeof(short), sizeof(buf), wave);
 
    
    fclose(file);
    fclose(txt);
    fclose(wave);
 
    _getch();
    return 0;
}
Нужно взять заголовок и данные из одного файла и записать их в новый файл, созданный так же в коде (new.wav). Это не конечная цель, но мне важно понять как правильно записать файл. Я хотела перезаписать первые 4 Кб, но проигрыватель отказывается воспроизводить файл. Пишет, что «decoder was not found for this format» (Декодер не найден для этого формата). В чём моя ошибка? С функцией fwrite работаю впервые и я мог в ней напортачить...

В txt я просто записываю данные о файле (Заголовок и данные).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2019, 03:19
Ответы с готовыми решениями:

Создание файла. Перезапись информации с одного файла в другой. Ошибки
Здравствуйте! Помогите пожалуйста. Поставлена задача: создать файл из 55 целых чисел, используя генератор рандомных чисел. Переписать все...

перезапись из файла в другой
Здравствуйте, вопрос такой: есть txt файл в котором находятся данные, нужно все строки из файла вывести на страницу сайта и после каждой...

Из одного файла переместить текст в другой файл с заменой текста на другой
Помогите нужно сделать вот такую вещь заготовка есть но не могу осмыслит как сделать вот это: Надо из одного файла переместить текст в...

22
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15
26.04.2019, 12:09  [ТС]
Студворк — интернет-сервис помощи студентам
Ygg, спасибо! Можно последние два вопроса? Какие переменные для чего нужны в 18-ой строке? Я только dataSize понял. И для того, чтобы производить манипуляции с данными, нужно сначала склеить char'ы data в short'ы?
0
2737 / 894 / 331
Регистрация: 10.02.2018
Сообщений: 2,136
26.04.2019, 12:28
formatOffset - смещение от начала файла до информации о формате звука,
formatSize - размер информации о формате звука,
dataOffset - смещение от начала файла до звуковых семплов,
dataSize - суммарный размер всех звуковых семплов.

Ничего склеивать не нужно. Но нужно проанализировать формат данных. Нужно убедиться, что звук не компрессированный. Понять сколько каналов звука в файле и узнать размер одной выборки отдельного канала. От этих параметров зависит дальнейшая обработка.
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15
27.04.2019, 10:32  [ТС]
Ygg, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2019, 10:32

Как скопировать текст от одной заданной метки до другой из одного текстового файла в другой?
нужно скопировать всё что находится в txt файле ОТ &lt;dekl&gt; ДО &lt;/dekl&gt; подскажите пожалуйста, сам найти так и не смог =(

Перезапись данных из одно fit файла в другой fit файл
Помогите пожалуйста составить программу, которая брала бы имеющийся файл in.fit и переписовала бы из этого файла все данные в новый файл...

Организовать перенос из одного файла в другой с помощью нетипизированого файла.
Организовать перенос из одного файла в другой с помощью нетипизированого файла.

Написать программу записи содержимого из одного файла в другой : Тип файла текстовый
#include &quot;StdAfx.h&quot; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main () { FILE...

из одного файла в другой
подскажите пожалуйста, как скопировать полностью бит в бит из одного exe в другой exe? Чтото не получается :) int main() { ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru